You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python Selenium点击按钮爬取JobBank招聘岗位标题及邮箱

爬取逻辑实现方案

一、现有代码问题修正

你当前的代码将岗位标题和详情链接分开存入elements列表,两者没有一一对应,后续无法匹配单个岗位的标题和对应详情页,首先需要调整数据结构,让每个岗位的标题、链接存在同一个字典中。

二、核心实现步骤

  • 导入显式等待相关模块控制页面加载节奏,避免元素未加载就操作报错;导入正则模块用于匹配邮箱格式内容
  • 遍历所有配对完成的岗位数据,逐个访问详情页链接
  • 等待「Show how to apply」按钮可点击后执行点击操作
  • 等待申请信息区域展开后,用正则规则匹配提取区域内的邮箱地址
  • 增加异常捕获逻辑,处理无公开邮箱、按钮加载失败等特殊场景

三、完整可运行代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import re

# 配置驱动路径,注意路径前加r避免转义字符问题
s = Service(r'C:\Program Files (x86)\chromedriver.exe')
driver = webdriver.Chrome(service=s)
# 全局等待超时时间设为10秒
wait = WebDriverWait(driver, 10)

driver.get('https://www.jobbank.gc.ca/jobsearch/jobsearch?sort=D&fsrc=16&fbclid=IwAR2SIG3lbY1S9lO4WilcKw6TxJAJQbFIGYTVE_tOTqYRpb43qM3uYgLWV64')

# 修正后的数据结构:每个元素包含对应岗位的标题和详情链接
jobs = []
# 先获取所有岗位条目
job_items = driver.find_elements(By.CLASS_NAME, 'resultJobItem')
for item in job_items:
    # 提取标题
    title = item.find_element(By.XPATH, './/*[@class="noctitle"]').text.strip()
    # 提取对应详情链接
    link = item.find_element(By.XPATH, './a').get_attribute('href')
    jobs.append({
        'title': title,
        'link': link,
        'email': '未提取到公开邮箱'
    })

# 邮箱匹配正则规则
email_pattern = re.compile(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}')

# 遍历所有岗位提取邮箱
for job in jobs:
    try:
        # 访问详情页
        driver.get(job['link'])
        # 等待申请按钮可点击
        apply_btn = wait.until(EC.element_to_be_clickable((By.ID, 'howtoapply')))
        apply_btn.click()
        # 等待申请区域加载完成
        apply_area = wait.until(EC.visibility_of_element_located((By.ID, 'howtoapplycontent')))
        # 匹配区域内的邮箱
        email_match = email_pattern.search(apply_area.text)
        if email_match:
            job['email'] = email_match.group()
    except Exception:
        # 异常情况保留默认值
        continue

# 打印最终结果
for job in jobs:
    print(f"岗位名称:{job['title']},申请邮箱:{job['email']}")

# 关闭驱动
driver.quit()

注意事项

  • 如果需要爬取多页数据,可以在单页数据爬取完成后模拟点击下一页按钮,重复上述逻辑即可
  • 可以适当调整显式等待的超时时间,适配网络较差的场景
  • 部分岗位可能仅提供外部申请链接不公开邮箱,会保留默认的未提取标识

内容的提问来源于stack exchange,提问作者n1kushach

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 02:15:09