使用Python+Selenium爬取cwjobs网站超时失败,求排查解决
问题分析与修复方案
核心问题
- CSS选择器错误:原代码中等待的
.jobsearch-SerpJobCard类名不存在于当前cwjobs网站的职位卡片元素上,导致超时无法定位元素。 - 未处理Cookie弹窗:网站加载后会弹出Cookie授权窗口,可能阻塞页面交互或元素加载流程。
- 使用已弃用的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
相关产品推荐
相关产品推荐

