use std::time::Duration;
use rust_drission::{utils::sleep_random_ms, BrowserConfig, CdpError, ChromiumPage};
fn main() -> Result<(), CdpError> {
let user_data_dir = std::env::temp_dir().join("drission_boss_userdata");
let user_data_dir = user_data_dir.to_string_lossy().to_string();
let config = BrowserConfig::new()
.user_data_dir(user_data_dir)
.headless(false);
let mut page = ChromiumPage::new(config)?;
page.get("https://www.zhipin.com/web/chat/recommend")?;
let card_selector = "#recommend-list .card-item";
page.wait(card_selector, Duration::from_secs(30))?;
const RECOMMEND_FRAME_LOCATOR: &str = "css:iframe[name=recommendFrame]";
let mut sayed: Vec<String> = vec![];
let say_limit = 20;
let mut sayed_count = 0;
while sayed_count < say_limit {
let card_item_eles = page.eles(card_selector)?;
let mut bk = false;
println!("当前牛人卡片数量: {}", card_item_eles.len());
for i in 0..card_item_eles.len() {
let card_item_ele = &card_item_eles[i];
let similar_ele = card_item_ele.element(".similar-geek-wrap")?;
if similar_ele.is_some() {
continue;
}
if say_limit - sayed_count <= 0 {
break;
}
if check_vip2(&page)? {
println!("检测到充值vip弹窗,停止打招呼");
bk = true;
break;
}
let card_inner_ele = card_item_ele.element(".card-inner")?;
if card_inner_ele.is_none() {
continue;
}
let geek_id = card_inner_ele.unwrap().attr("data-geekid")?;
if sayed.contains(&geek_id) {
continue;
}
let expect_job_ele = card_item_ele.element(".expect-wrap")?;
if expect_job_ele.is_none() {
continue;
}
let expect_text = expect_job_ele.unwrap().text()?;
let boss_info_ele = card_item_ele.element(".join-text-wrap.base-info")?;
if boss_info_ele.is_none() {
continue;
}
let boss_info_text = boss_info_ele.unwrap().text()?;
let say_hello_btn_ele = card_item_ele.element(".btn.btn-greet")?;
if say_hello_btn_ele.is_none() {
continue;
}
sayed_count += 1;
sayed.push(geek_id.clone());
println!(
"牛人id: {}, 期望岗位: {}, 牛人信息: {}",
geek_id.clone(),
expect_text,
boss_info_text
);
println!("打招呼进度: {}/{}", sayed_count, say_limit);
sleep_random_ms(800, 1200);
}
if bk {
break;
}
println!("滚动加载更多牛人...");
let iframe_ele = page.get_iframe(RECOMMEND_FRAME_LOCATOR)?.unwrap();
iframe_ele.run_js("window.scrollTo(0, document.body.scrollHeight);")?;
sleep_random_ms(1200, 1500);
}
page.close_browser();
Ok(())
}
pub fn check_vip2(page: &ChromiumPage) -> Result<bool, CdpError> {
let vip_layout = page.ele(".vip2-layout")?;
if vip_layout.is_some() {
let close_ele = page.ele(".icon-close")?;
if let Some(close_ele) = close_ele {
close_ele.click()?;
}
}
return Ok(vip_layout.is_some());
}