Selenium爬取Indeed网站按class名定位元素返回空列表问题求解
问题原因定位
你遇到的空列表问题核心出在find_elements_by_class_name方法的使用规则上:
- Selenium的
find_elements_by_class_name仅支持传入单个类名作为参数,你传入的jobsearch-SerpJobCard unifiedRow row result clickcard是由空格分隔的5个独立类名拼接的字符串,Selenium会把整串当做一个完整类名去匹配页面元素,自然找不到对应结果。
修复方案
你可以任选以下任意一种方式修改定位逻辑:
- 保留类名定位,仅传入单个唯一识别的类名
职位卡片的jobsearch-SerpJobCard类是该类元素独有的标识,直接传入单个类名即可匹配到所有目标卡片:# 旧写法(Selenium3兼容) content = driver.find_elements_by_class_name('jobsearch-SerpJobCard') # 新写法(Selenium4推荐,避免弃用警告) content = driver.find_elements(By.CLASS_NAME, 'jobsearch-SerpJobCard') - 改用CSS选择器定位,精准匹配多类名元素
如果需要通过多个类名缩小匹配范围,用CSS选择器语法,每个类名前加.拼接即可:content = driver.find_elements(By.CSS_SELECTOR, '.jobsearch-SerpJobCard.unifiedRow.row.result.clickcard')
附加优化建议
你当前的等待条件只判断了结果列resultsCol加载完成,可能出现结果列渲染了但职位卡片还没加载的极端情况,可以把等待条件调整为等待第一个职位卡片加载完成,进一步提升稳定性:
wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'jobsearch-SerpJobCard')))
内容的提问来源于stack exchange,提问作者Math142
相关产品推荐
相关产品推荐

