Selenium webdriver下Firefox的headless模式运行无响应问题
问题修复方案
- Selenium版本适配问题:Selenium 4.0及以上版本已经废弃了直接设置
headless = True的写法,需要通过参数传入的方式开启无头模式,正确写法为:firefox_options.add_argument("--headless=new") - 反爬拦截问题:绝大多数站点会识别默认的Firefox无头模式请求(默认UA携带
HeadlessFirefox标识),直接拦截访问,需要手动添加正常浏览器的UA伪装:firefox_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36") - 页面加载等待缺失:现有代码执行完
driver.get(web)后没有后续操作也没有等待逻辑,若需要获取页面内容需要添加显式/隐式等待,确保页面元素加载完成后再执行操作,比如添加隐式等待:driver.implicitly_wait(10) - 驱动版本不匹配:请确认本地安装的Firefox浏览器版本和
geckodriver版本适配,Selenium 4.0+会自动管理驱动,若使用的是旧版本Selenium请手动下载对应版本的geckodriver并放置到系统PATH路径下。
完整可运行参考代码
from selenium import webdriver from selenium.webdriver.firefox.options import Options web = "https://www.powerplay.com/sportsbook/SOCCER/" firefox_options = Options() # 新版无头模式写法 firefox_options.add_argument("--headless=new") # 伪装UA firefox_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36") driver = webdriver.Firefox(options=firefox_options) # 隐式等待10秒等待元素加载 driver.implicitly_wait(10) driver.get(web) # 测试输出页面标题验证是否加载成功 print(driver.title) driver.quit()
内容的提问来源于stack exchange,提问作者Ariel
相关产品推荐
相关产品推荐

