2025年Chrome浏览器中Selenium无头模式无法正常工作问题求助
2025年Chrome浏览器中Selenium无头模式无法正常工作问题求助
最近我在爬取https://whatson.bfi.org.uk/Online/default.asp这个AJAX页面时碰了壁——照着常规写法用Selenium Chrome驱动写了代码,结果啥内容都爬不到!我的环境是Selenium v4.32.0,Chrome版本136.0.7103.114,代码大概是这样的:
from selenium import webdriver from selenium.webdriver import ChromeOptions def scrape_multiple_events_from_page(url): if some_condition: # options的内容 # 后续爬取逻辑
折腾好一阵都没解决,想问问有没有大佬遇到过类似情况?我估摸着大概率是Chrome新版本对无头模式的配置要求变了,毕竟这俩更新起来参数规则总在变。
给你几个我试下来可能有用的调整方向,你可以挨个试试:
- 把无头模式参数换成
--headless=new:旧的--headless参数在Chrome 112之后就推荐用新版本了,尤其是136这种较新的版本,旧参数很可能导致页面渲染异常,直接返回空内容 - 加上浏览器伪装参数:好多网站会识别无头模式的特征,你可以设置和普通Chrome一样的user-agent,再指定窗口大小比如
--window-size=1920,1080,还能加些禁用自动化检测的参数,避免被网站拦截 - 一定要等AJAX加载完成:AJAX页面的内容是动态出来的,不能打开页面就直接拿元素,得用
WebDriverWait等目标元素出现,比固定sleep靠谱多了
调整后的参考代码你可以看看:
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By def scrape_multiple_events_from_page(url): options = Options() # 启用新版无头模式 options.add_argument("--headless=new") # 伪装成普通浏览器 options.add_argument("--window-size=1920,1080") options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.7103.114 Safari/537.36") # 禁用自动化特征检测 options.add_argument("--disable-blink-features=AutomationControlled") options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option("useAutomationExtension", False) driver = webdriver.Chrome(options=options) try: driver.get(url) # 等待AJAX加载完成,这里的定位器要换成你实际需要爬取的元素选择器 wait = WebDriverWait(driver, 10) target_elements = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".your-target-element-class"))) # 处理爬取到的内容 for element in target_elements: print(element.text) finally: # 确保浏览器关闭 driver.quit() # 调用测试 scrape_multiple_events_from_page("https://whatson.bfi.org.uk/Online/default.asp")
另外还有几个检查点别漏掉:
- 确认ChromeDriver和Chrome版本完全匹配:虽然Selenium 4.6+自带驱动,但偶尔还是会有兼容问题,最好手动对应上版本
- 检查元素定位器是否正确:用Chrome开发者工具的元素选择器确认你写的CSS或XPath能不能找到目标元素,定位错了肯定拿不到内容
- 看看浏览器日志:用
driver.get_log('browser')可以查页面加载时有没有JS错误,说不定是页面本身加载出了问题
内容来源于stack exchange




