Chrome、ChromeDriver与UA指定版本不一致的影响咨询
问题背景
当前环境与代码配置如下:
- 本地安装Google Chrome浏览器版本:
103.0.5060.53 - 代码中通过启动参数指定的User-Agent标注Chrome版本:
91.0.4472.114 - 本地调用的chromedriver.exe版本:
102.0.5005
相关实现代码:
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36' options.add_argument(f'user-agent={user_agent}') driver = webdriver.Chrome(executable_path=r'D:\NCF_GoogleDrive\chromedriver.exe', options=options) driver.get(paper_url) doc=BeautifulSoup(driver.page_source,'html.parser')
疑问解答
1. 三者版本不一致是否存在问题?可能引发哪些异常故障?
存在明确的兼容性与风控风险,两类不匹配问题对应的故障如下:
- Chrome浏览器与ChromeDriver版本不匹配:二者的硬兼容规则是大版本号必须完全对应,103版本Chrome搭配102版本Driver属于不兼容配置,可能出现的故障包括:启动时直接抛出
SessionNotCreatedException版本不匹配报错、运行时偶发元素定位超时、JS执行失败、点击/输入等交互动作无响应、渲染过程中driver进程崩溃断连。 - User-Agent标注版本与实际浏览器版本不匹配:二者相差12个正式大版本,跨度过大,很容易触发站点反爬校验,可能出现的故障包括:站点直接返回403拦截页、验证码校验页、空白无内容页,甚至临时封禁访问IP。
2. 版本不一致是否会导致网页返回的HTML代码发生变化?doc变量存储的页面内容是否会因版本差异出现不同?
会导致HTML内容出现差异,doc存储的解析结果自然也会不同,分两种场景:
- 浏览器与Driver版本不匹配时,Driver无法正常调用浏览器的渲染接口,可能出现页面JS未执行完成、动态加载内容未挂载到DOM树、页面渲染中途中断的问题,此时
driver.page_source拿到的本身就是不完整的残缺DOM,BeautifulSoup解析后的doc内容和正常加载完成的页面存在明显差异。 - UA版本与实际浏览器版本不匹配时,站点会根据UA标识的浏览器版本做兼容适配:Chrome 91是2021年发布的版本,不支持后续新增的大量JS、CSS特性,站点会给该版本UA返回适配旧内核的降级页面,HTML结构、资源引用、内容渲染逻辑都和适配Chrome 103的新版页面存在区别;如果UA异常触发反爬,返回的拦截页内容和目标页更是完全不同。
3. 该情况是否会对网页爬虫工作造成干扰?待抓取的目标信息对应的标签、类名、id等定位属性是否会因此发生变化?
会对爬虫稳定运行造成明确干扰,定位属性也可能出现匹配失效的问题:
- 如果触发反爬拦截,拿到的根本不是目标内容页,预先写好的所有标签、类名、id定位规则会全部失效,只能抓到拦截页的无关内容。
- 如果站点返回旧版兼容页面,DOM结构通常会做适配调整:比如新版 新版页面用
<div class="article-content">承载正文,旧版兼容页可能用<div id="main-text" class="content">,预先写的定位规则会直接匹配不到目标节点。 - 如果是Driver和浏览器不匹配导致的渲染异常,会出现无规律的抓取失败:同样的代码跑多次,可能偶尔能拿到完整内容,多数时候因为动态节点没加载出来抓到空值,爬虫稳定性完全无法保障。
内容的提问来源于stack exchange,提问作者himself
相关产品推荐
相关产品推荐

