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

Selenium无头Chrome模式下页面及元素加载异常问题

Selenium无头Chrome模式下页面及元素加载异常问题

我之前也碰到过好几次无头Chrome加载页面卡住、元素找不到的情况,给你几个实际踩坑后验证有效的调整方案,你可以逐个尝试:

  • 补充关键的ChromeOptions配置
    无头模式下Chrome的默认行为和正常浏览器差异很大,很多网站会识别并拦截。除了你已经加的参数,建议再加上这些:

    • --no-sandbox:禁用沙箱模式,在Linux服务器或容器环境下几乎是必须的
    • --disable-dev-shm-usage:避免/dev/shm内存不足导致的页面加载失败
    • 自定义User-Agent:模拟真实浏览器的UA,避免被网站识别为无头模式
    • 禁用自动化相关标识,进一步伪装成普通用户
  • 替换不可靠的等待方式
    time.sleep(5)太死板,万一网络慢就没用。可以先等待页面完全加载完成,再去等待目标元素,这样更可靠。

  • 检查Chrome版本匹配度
    一定要确保Chrome浏览器和ChromeDriver的版本完全对应,哪怕差一个小版本都可能出现各种奇怪的加载问题,这个是很多人容易忽略的点。

给你调整后的代码示例:

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

options = Options()
options.add_argument("--headless=new")  # 新版Chrome推荐用--headless=new替代旧的--headless
options.add_argument("--disable-gpu")
options.add_argument("--window-size=1920,1080")
options.add_argument("--disable-blink-features=AutomationControlled")
# 新增的关键配置
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)

driver = webdriver.Chrome(options=options)
# 执行JS隐藏webdriver标识
driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")

driver.get("https://www.example.com")

# 先等待页面完全加载
wait = WebDriverWait(driver, 30)
wait.until(lambda driver: driver.execute_script('return document.readyState') == 'complete')

try:
    # 再等待目标元素可见
    wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "some-selector")))
    print("元素加载成功!")
except Exception as e:
    print(f"加载失败:{str(e)}")
    # 可以截图排查问题
    driver.save_screenshot("load_error.png")
finally:
    driver.quit()

另外,如果还是不行,建议先去掉--headless参数,用正常浏览器模式跑一遍,看看是否能正常加载。如果正常模式没问题,那基本就是无头模式的伪装不到位;如果正常模式也不行,那可能是目标网站有更严格的反爬,或者你的网络环境有问题。

备注:内容来源于stack exchange,提问作者random_person_0609

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 10:49:33