You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Selenium打开的Tripadvisor页面与普通浏览器显示存在差异

问题原因
  • 核心原因是目标站点的反爬机制生效。Selenium默认启动的浏览器存在大量可被检测的自动化特征:包括默认开启的navigator.webdriver标识、自动化扩展残留、默认User-Agent带爬虫特征、旧版无头模式的专属指纹等。站点识别到自动化访问流量后,不会直接拦截,而是故意返回篡改、错位的DOM结构,给爬虫返回脏数据,普通人工访问的浏览器无上述自动化特征,因此能拿到正常渲染的页面结构。
  • 次要原因是懒加载渲染逻辑不匹配。目标站点的列表采用滚动懒加载机制,如果Selenium打开页面后未等DOM完全挂载、滚动节奏和真人操作差异过大,前端JS动态渲染节点时会出现挂载错位,导致链接嵌套错误。
解决方案
  • 第一步先抹除核心自动化检测特征,启动浏览器时优先关闭自动化开关,覆盖webdriver属性,参考配置:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import random
import time

options = Options()
# 关闭自动化受控标识
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)
# *不要使用旧版无头模式*,旧版无头模式检测率极高,必须使用新版无头模式
options.add_argument("--headless=new")
# 替换为真实浏览器的User-Agent,不要使用默认标识
options.add_argument("user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36")
# 设置和普通真人一致的视口大小
options.add_argument("--window-size=1920,1080")

driver = webdriver.Chrome(options=options)
# 注入JS覆盖navigator.webdriver属性
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
})
  • 模拟真人浏览的加载节奏,不要打开页面就立刻抓取DOM。列表是懒加载模式,每次滚动300-600像素的随机距离,每滚一次停留1-3秒的随机时长,等所有列表项的图片、链接资源全部加载完成后再开始解析,避免DOM还在动态挂载时取到错位节点。
  • 如果手动配置参数后仍被识别,直接换用封装好反爬特征的undetected-chromedriver启动浏览器,该库已经默认屏蔽了绝大多数主流的Selenium自动化检测点,和真人手动打开浏览器的指纹特征几乎一致,过检率远高于手动配置的原生Selenium。
  • 解析节点时缩小查找范围,不要全局匹配链接。先定位到所有独立的列表项元素,遍历每个列表项时,只在当前项的元素范围内查找对应的标题、链接属性,避免跨节点匹配到错位的链接地址,就算出现个别DOM异常也能最大程度减少串数据问题。

注意:不要在Selenium页面刚加载完成就立刻打开开发者工具检查DOM,开启开发者工具本身会干扰前端JS的执行逻辑,建议页面完全加载后等待5秒以上再做结构检查。

内容的提问来源于stack exchange,提问作者Bartson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 20:09:20