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

Python实现Indeed爬虫问题:无法获取职位信息+位置覆盖失效

针对Indeed爬虫问题的解决方案

问题1:位置无法被代码设置覆盖

Indeed的自动填充通常来自浏览器表单记忆或页面JS补全,可通过以下方式解决:

  • 启动Chrome时禁用自动填充功能:
    from selenium.webdriver.chrome.options import Options
    
    chrome_options = Options()
    chrome_options.add_experimental_option("prefs", {
        "credentials_enable_service": False,
        "profile.password_manager_enabled": False,
        "autofill.enabled": False
    })
    driver = webdriver.Chrome(options=chrome_options)
    
  • 定位位置输入框后,强制清空再输入:
    location_input = driver.find_element(By.ID, "text-input-where")
    # 先清空原有内容
    location_input.clear()
    # 若仍有自动填充残留,用JS强制重置输入框值
    driver.execute_script("arguments[0].value = '';", location_input)
    location_input.send_keys("你的目标地点")
    
  • 确认定位的是正确输入框:如果text-input-where这个ID失效,可改用By.NAME="l"或By.CSS_SELECTOR="input[aria-label='Location']"定位。

问题2:无法抓取职位标题和公司名称

核心原因多为元素定位错误或页面未加载完全,解决方案如下:

  • 使用WebDriverWait等待页面元素加载,避免提前查找导致失败:
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    # 等待职位列表区域加载完成
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "div.job_seen_beacon"))
    )
    
    # 遍历职位卡片提取信息
    job_cards = driver.find_elements(By.CSS_SELECTOR, "div.job_seen_beacon")
    for card in job_cards:
        # 捕获可能的元素查找失败,避免脚本中断
        try:
            job_title = card.find_element(By.CSS_SELECTOR, "h2.jobTitle a").text
        except:
            job_title = "无标题"
        try:
            company_name = card.find_element(By.CSS_SELECTOR, "span.companyName").text
        except:
            company_name = "无公司名"
        print(f"职位:{job_title},公司:{company_name}")
    
  • 验证选择器有效性:打开Indeed页面按F12,查看当前职位标题、公司名称的实际HTML结构,替换失效的选择器(Indeed会不定期更新页面结构,旧代码的选择器可能已失效)。
  • 分页内容需额外处理:若要抓取多页数据,需定位下一页按钮,等待按钮加载完成后点击,重复上述抓取逻辑。

完整修改示例片段

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 配置Chrome禁用自动填充
chrome_options = Options()
chrome_options.add_experimental_option("prefs", {
    "credentials_enable_service": False,
    "profile.password_manager_enabled": False,
    "autofill.enabled": False
})

driver = webdriver.Chrome(options=chrome_options)
driver.get("https://www.indeed.com/")

# 输入职位名称
job_input = driver.find_element(By.ID, "text-input-what")
job_input.clear()
job_input.send_keys("Python Developer")

# 输入目标地点,覆盖自动填充
location_input = driver.find_element(By.ID, "text-input-where")
location_input.clear()
driver.execute_script("arguments[0].value = '';", location_input)
location_input.send_keys("New York")

# 点击搜索按钮
search_btn = driver.find_element(By.CSS_SELECTOR, "button[type='submit']")
search_btn.click()

# 等待职位列表加载并抓取信息
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, "div.job_seen_beacon"))
)

job_cards = driver.find_elements(By.CSS_SELECTOR, "div.job_seen_beacon")
for idx, card in enumerate(job_cards, 1):
    job_title = card.find_element(By.CSS_SELECTOR, "h2.jobTitle a").text
    company_name = card.find_element(By.CSS_SELECTOR, "span.companyName").text
    print(f"第{idx}个职位:")
    print(f"标题:{job_title}")
    print(f"公司:{company_name}\n")

driver.quit()

注意:运行前确保安装对应版本的ChromeDriver,且selenium为最新版本(执行pip install --upgrade selenium更新)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:50:29