Boss直聘网的“强悍”互动脚本

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.edge.service import Service
from selenium.webdriver.common.action_chains import ActionChains
import time
from webdriver_manager.microsoft import EdgeChromiumDriverManager
from selenium.webdriver.edge.service import Service as EdgeService

edge_options = webdriver.EdgeOptions()
edge_options.add_argument("--disable-gpu")
edge_options.add_argument("--no-sandbox")
edge_options.add_argument("--start-maximized")

try:
    # 初始化 WebDriver
    driver = webdriver.Edge(service=EdgeService(EdgeChromiumDriverManager().install()), options=edge_options)
except Exception as e:
    print(f"无法自动安装 EdgeDriver,请手动下载并指定路径:{e}")
    exit(1)

# 打开目标网址
url = "https://www.zhipin.com/web/geek/jobs"
driver.get(url)

# 等待用户输入 y 开始执行
user_input = input("请输入 y 开始执行自动化操作:")
if user_input.lower() != 'y':
    print("操作取消。")
    driver.quit()
    exit()

wait = WebDriverWait(driver, 60)
action_chains = ActionChains(driver)

processed_count = 0        # 已处理的卡片数量
max_process_count = 100    # 最大处理数量


try:
    while processed_count < max_process_count:
        print(f"\n等待岗位卡片加载... 已处理 {processed_count}/{max_process_count}")

        # 等待 job-list-container 出现
        wait.until(EC.presence_of_element_located((By.CLASS_NAME, "job-list-container")))

        # 等待至少有一个 card-area 出现
        cards = wait.until(lambda d: d.find_elements(By.CSS_SELECTOR, ".job-list-container .card-area"))
        if not cards:
            print("未找到任何岗位卡片,等待重试...")
            time.sleep(3)
            continue

        first_card = cards[0]

        # 鼠标悬停并点击
        action_chains.move_to_element(first_card).click().perform()
        print("已点击岗位卡片")
        time.sleep(2)

        try:
            # 步骤2:等待 job-detail-container 出现后查找“立即沟通”按钮并点击
            WebDriverWait(driver, 10).until(
                EC.presence_of_element_located((By.CSS_SELECTOR, ".job-detail-container"))
            )
            communicate_button = driver.find_element(By.XPATH, "//*[contains(text(), '立即沟通')]")
            action_chains.move_to_element(communicate_button).click().perform()
            print("点击了‘立即沟通’")
            time.sleep(1)
        except Exception as e:
            print("未找到‘立即沟通’按钮或出错:", str(e))

        try:
            # 步骤3:等待 greet-boss-container 并点击“继续沟通”
            WebDriverWait(driver, 10).until(
                EC.presence_of_element_located((By.CSS_SELECTOR, ".greet-boss-container"))
            )
            continue_button = driver.find_element(By.XPATH, "//*[contains(text(), '继续沟通')]")
            action_chains.move_to_element(continue_button).click().perform()
            print("点击了‘继续沟通’")
            time.sleep(1)
        except Exception as e:
            print("未找到‘继续沟通’按钮或出错:", str(e))

        try:
            # 步骤4:定位 chat-input 输入框,模拟输入信息并发送
            chat_input = WebDriverWait(driver, 10).until(
                EC.element_to_be_clickable((By.CSS_SELECTOR, ".message-controls .chat-input"))
            )
            action_chains.move_to_element(chat_input).click().send_keys("您好,211硕士毕业 看有兴趣了解下我的工作简历吗").perform()
            print("输入了消息")

            # 模拟按下 Enter 键
            action_chains.send_keys(u'\ue007').perform()  # u'\ue007' 是 Enter 键
            print("发送了消息")
            time.sleep(1)
        except Exception as e:
            print("输入消息时出错:", str(e))

        driver.back()
        time.sleep(5)
        # 更新计数器和上次记录的标题

        processed_count += 1

except Exception as e:
    print("发生异常:", str(e))


finally:
    # 可选:关闭浏览器
    driver.quit()
    print("脚本结束")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值