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

使用Python+Selenium爬取cwjobs网站超时失败,求排查解决

问题分析与修复方案

核心问题

  1. CSS选择器错误:原代码中等待的.jobsearch-SerpJobCard类名不存在于当前cwjobs网站的职位卡片元素上,导致超时无法定位元素。
  2. 未处理Cookie弹窗:网站加载后会弹出Cookie授权窗口,可能阻塞页面交互或元素加载流程。
  3. 使用已弃用的Selenium语法:find_element_by_css_selector在Selenium 4及以上版本已被移除,需使用新的API语法。

修复后的完整代码

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
import csv

# 初始化Chrome驱动(需确保已配置ChromeDriver环境)
driver = webdriver.Chrome()
driver.maximize_window()

url = "https://www.cwjobs.co.uk/jobs/cloud-security-engineer?searchOrigin=Resultlist_top-search"
driver.get(url)

try:
    # 处理Cookie同意弹窗(等待并点击同意按钮)
    cookie_accept_btn = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, ".cc-btn.cc-allow"))
    )
    cookie_accept_btn.click()

    # 等待职位列表加载(使用当前网站有效的职位卡片选择器)
    job_listings = WebDriverWait(driver, 15).until(
        EC.visibility_of_all_elements_located((By.CSS_SELECTOR, ".job-card"))
    )

    # 写入CSV文件,指定UTF-8编码避免乱码
    with open('job_listings.csv', mode='w', newline='', encoding='utf-8') as file:
        writer = csv.writer(file)
        writer.writerow(['Title', 'Company', 'Location', 'Salary', 'Summary'])

        for job in job_listings:
            # 获取职位标题
            title = job.find_element(By.CSS_SELECTOR, ".job-title a").text.strip()
            # 获取公司名称
            company = job.find_element(By.CSS_SELECTOR, ".job-company").text.strip()
            # 获取工作地点
            location = job.find_element(By.CSS_SELECTOR, ".job-location").text.strip()
            # 获取薪资(处理无薪资标注的情况)
            try:
                salary = job.find_element(By.CSS_SELECTOR, ".job-salary").text.strip()
            except:
                salary = "未标注薪资"
            # 获取职位摘要
            summary = job.find_element(By.CSS_SELECTOR, ".job-description").text.strip()

            writer.writerow([title, company, location, salary, summary])

    print("数据已成功写入job_listings.csv")

except Exception as e:
    print(f"爬取过程中出现错误: {str(e)}")

finally:
    # 确保浏览器关闭
    driver.quit()

关键修复点说明

  • Cookie弹窗处理:添加等待并点击Cookie同意按钮的逻辑,避免弹窗干扰后续元素定位。
  • 修正CSS选择器:将职位卡片选择器改为当前网站有效的.job-card,同步更新子元素选择器(如职位标题、公司名称等),匹配最新DOM结构。
  • 替换弃用API:将所有find_element_by_css_selector替换为find_element(By.CSS_SELECTOR, ...),适配Selenium 4+版本要求。
  • 异常防护:为薪资字段添加异常捕获,避免部分职位无薪资导致程序崩溃;外层全局异常捕获便于快速排查问题。
  • 编码优化:写入CSV时指定encoding='utf-8',避免特殊字符乱码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:00:46