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

如何使用Python Selenium提取Google Jobs页面via后标注的所有公司名称

招聘页面展示示例

代码问题分析与修正方案

原代码存在3个核心问题导致只能提取到2条记录:

  • 使用全局XPath提取公司信息,没有绑定当前滚动到的职位条目,每次获取的都是页面第一个符合条件的元素内容
  • Google Jobs列表为懒加载机制,没有判断所有条目是否加载完成的逻辑,异常捕获范围太粗很容易提前终止循环
  • 没有处理条目切换后右侧详情区的加载延迟,可能拿到上一个职位的信息
import time
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

# 需提前完成driver初始化配置,此处省略初始化逻辑
driver.get("https://www.google.com/search?q=bank+jobs+in+india&rlz=1C1CHBF_enIN869IN869&oq=upsc+jo&aqs=chrome.1.69i57j0i433i512j0i131i433i512j0i512l3j0i131i433i512l2j0i512j0i433i512&sourceid=chrome&ie=UTF-8&ibp=htl;jobs&sa=X&sqi=2&ved=2ahUKEwjR27GN_qPzAhX4ppUCHb_0B_QQkd0GegQIORAB#fpstate=tldetail&sxsrf=AOaemvIxuJXh3if0tw7ezZfjkXRe5DSxsA:1632911697417&htivrt=jobs&htidocid=hr3yUBTZAssve05hAAAAAA%3D%3D")

name = []
# 先等待职位列表加载完成
WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.XPATH, "//div[@role='treeitem']")))
last_cnt = 0
# 连续2次拿到的条目数量一致则判定所有内容加载完成
same_cnt_times = 0

while same_cnt_times < 2:
    elements = driver.find_elements(By.XPATH, "//div[@role='treeitem']")
    current_cnt = len(elements)
    # 判断是否没有新加载的条目
    if current_cnt == last_cnt:
        same_cnt_times +=1
    else:
        same_cnt_times = 0
        last_cnt = current_cnt
    # 遍历处理当前批次的条目
    for cnt in range(last_cnt - (current_cnt - last_cnt) if current_cnt != last_cnt else 0, current_cnt):
        # 滚动到当前条目居中显示
        driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", elements[cnt])
        # 点击条目触发右侧详情区刷新
        elements[cnt].click()
        try:
            # 等待右侧详情的公司信息加载完成再提取
            nam_ele = WebDriverWait(driver, 3).until(
                EC.presence_of_element_located((By.XPATH, "//div[contains(@class, 'oNwCmf') and contains(text(), 'via ')]"))
            )
            nam = nam_ele.text
            company = nam.split("via ")[1].split("\n")[0].strip()
            if company not in name: # 新增去重逻辑避免重复收录
                name.append(company)
        except:
            name.append("")
        time.sleep(0.5)
    # 滚动到列表底部触发加载更多内容
    driver.execute_script("arguments[0].scrollIntoView(true);", elements[-1])
    time.sleep(2)

# 输出所有提取到的公司名称
print(name)

调整点说明

  • 新增懒加载判定逻辑,连续2次获取的职位条目数量一致就判定所有内容加载完成,不会意外终止循环
  • 每次滚动到对应职位后增加点击操作,触发右侧详情区刷新,等待对应元素加载完成后再提取内容,避免拿到旧数据
  • 优化提取逻辑,新增去重处理防止重复抓取相同公司
  • 适配新版本Selenium的元素定位语法,替换了已弃用的find_elements_by_xpath写法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:39:03