Python Selenium脚本在Chrome升级至v93版本后无法运行问题求助
修复方案
1. 匹配ChromeDriver与Chrome版本
Chrome大版本更新后,必须使用对应大版本的ChromeDriver才能正常驱动浏览器。你当前Chrome已升级到v93,需要下载对应v93版本的ChromeDriver替换原有驱动文件即可。如果想要避免后续升级浏览器后重复适配,可以使用webdriver-manager库自动管理驱动版本。
2. 补充反检测参数,适配v93版本的浏览器检测机制
Chrome v93对自动化测试工具的识别规则有更新,原有仅添加excludeSwitches的配置不足以绕过检测,需要额外添加禁用自动化标识的启动参数:
# 添加到ChromeOptions配置中 self.options.add_argument("--disable-blink-features=AutomationControlled") self.options.add_experimental_option("useAutomationExtension", False)
同时你当前请求头里的User-Agent还是Chrome v92的版本,需要更新为和当前v93浏览器匹配的UA值,避免UA与实际浏览器版本不一致导致网站拦截请求。
3. 修复Selenium弃用参数
你当前初始化driver使用的chrome_options参数在Selenium 3.14+版本已经被标记为弃用,替换为options参数即可避免兼容报错:
# 替换原有初始化代码 self.driver = webdriver.Chrome(options=self.options)
4. 完善Cookie添加规则
Chrome v93对Cookie的域、路径校验更严格,添加Cookie时显式指定domain和path可以避免添加失败的问题:
# 替换原有add_cookie代码 cookie_dict = session.cookies.get_dict() self.driver.add_cookie({'name':'__jsl_clearance_s','value':cookie_dict['__jsl_clearance_s'], 'domain':'.cnvd.org.cn', 'path':'/'}) self.driver.add_cookie({'name':'JSESSIONID','value':cookie_dict['JSESSIONID'], 'domain':'.cnvd.org.cn', 'path':'/'}) self.driver.add_cookie({'name':'__jsluid_s','value':cookie_dict['__jsluid_s'], 'domain':'.cnvd.org.cn', 'path':'/'})
修改后完整可参考代码
import requests from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager session = requests.session() class CNVD(object): def __init__(self): self.options=webdriver.ChromeOptions() self.options.add_experimental_option("detach", True) self.options.add_argument("--disable-blink-features=AutomationControlled") self.options.add_experimental_option("useAutomationExtension", False) self.options.add_experimental_option("excludeSwitches", ['enable-automation', 'enable-logging']) # 自动适配v93版本ChromeDriver,也可以手动指定驱动路径替换该行 self.driver = webdriver.Chrome(executable_path=ChromeDriverManager(version="93.0.4577.63").install(), options=self.options) def login(self): headers = { 'Host':'www.cnvd.org.cn', # 替换为你本地Chrome v93对应的实际UA值 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36', 'Accept':'*/*', 'Accept-Language':'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2', 'Accept-Encoding':'gzip, deflate', 'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8', 'X-Requested-With':'XMLHttpRequest', 'Origin':'https://www.cnvd.org.cn', 'Referer':'https://www.cnvd.org.cn/user/login' } data = 'password=xxxx' response = session.post(url="https://www.cnvd.org.cn/user/doLogin/loginForm",data=data,headers=headers) response.encoding='utf-8' self.driver.get("https://www.cnvd.org.cn") cookie_dict = session.cookies.get_dict() self.driver.add_cookie({'name':'__jsl_clearance_s','value':cookie_dict['__jsl_clearance_s'], 'domain':'.cnvd.org.cn', 'path':'/'}) self.driver.add_cookie({'name':'JSESSIONID','value':cookie_dict['JSESSIONID'], 'domain':'.cnvd.org.cn', 'path':'/'}) self.driver.add_cookie({'name':'__jsluid_s','value':cookie_dict['__jsluid_s'], 'domain':'.cnvd.org.cn', 'path':'/'}) self.driver.get("https://www.cnvd.org.cn/user/doLogin/loginForm")
内容的提问来源于stack exchange,提问作者HHHAMTER
相关产品推荐
相关产品推荐

