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("脚本结束")