Python Selenium实现与chromedriver功能等效的firefoxdriver驱动函数
问题原因
Firefox的Options类不支持Chrome专属的add_experimental_option方法,同时用户目录配置、防自动化检测、保持浏览器不自动关闭的配置逻辑,火狐都有独立的实现方式,照搬Chrome的写法会直接触发属性错误。
修改后的完整代码
def get_firefoxdriver(headless = False): import os from selenium import webdriver from selenium.webdriver.firefox.options import Options options = Options() options.binary_location = '/usr/bin/firefox' # 火狐用户配置目录参数为 -profile options.add_argument('-profile=' + os.environ['HOME'] + '/.config/firefoxdriver') # 实现原有detach效果:脚本执行完后浏览器不自动关闭 options.set_preference('keep_webdriver_alive', True) # 实现原有反自动化检测效果 options.set_preference('dom.webdriver.enabled', False) options.set_preference('useAutomationExtension', False) options.headless = headless driver = webdriver.Firefox(executable_path='/usr/bin/geckodriver', options=options) # 额外隐藏webdriver特征,和Chrome版效果对齐 driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})") return driver
核心修改点说明
- 移除了所有Chrome专属的
add_experimental_option调用,替换为Firefox支持的set_preference配置项 - 用户数据目录启动参数从
user-data-dir替换为火狐兼容的-profile - 新增
keep_webdriver_alive配置实现和Chrome版detach完全一致的效果 - 新增
dom.webdriver.enabled等配置实现反自动化检测,和Chrome版的防检测功能对齐 - 保留了原有无头模式、二进制路径、驱动路径的配置逻辑,功能完全等效
内容的提问来源于stack exchange,提问作者Mario Palumbo
相关产品推荐
相关产品推荐

