整理网上关于selenium的反爬机制以及解决办法。

这篇博客整理了Selenium在爬虫中遇到的反爬问题及解决方案,包括:修改navigator.webdriver属性,设置Chrome用户数据目录以保存登录状态,篡改chromedriver文件避免识别,通过端口通信隐蔽内核启动,以及使用undetected_chromedriver库隐藏webdriver特征。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

只是收集目前找到的一些关于selenium的反爬问题。
未亲自尝试,不保证效果。也会持续跟进相关的内容继续整理。

1.window.navigator.webdriver

现象:用户正常访问该值为false。使用selenium时该值为true。
解决:去除该参数

option = ChromeOptions()
#设置为开发者模式
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_experimental_option('useAutomationExtension', False)
option.add_argument("--disable-blink-features=AutomationControlled")
browser = WebChrome(options=option)
browser.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {
  'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'
        })
#网上还找到一些关于通过 stealth.min.js 隐藏chromedirver特征的内容。
#说是chromedirver 88 版本以后。
#chrome_options.add_argument("--disable-blink-features=AutomationControlled")
#就能够隐藏特征内容了。

2.cookie验证

现象:登录是绕不开的话题,我也不知各个网站都是怎么验证登录的。有没有什么隐藏的手段。
解决办法:设置缓存路径,每次启动selenium加载对应缓存

option.add_argument('--user-data-dir=C:\\Users\\用户名\\AppData\\Local\\Google\\Chrome\\User Data')
option.add_argument('--profile-directory=Default')
browser = WebChrome(options=option)
#这行代码直接使用了,自身浏览器的缓存文件。

3.chromedriver的驱动key验证

现象:验证chromedriver文件中的key值。相同就拒绝访问。
解决办法:修改chromedriver文件

1)notepad3 打开该文件。搜索 $cdc_ 
2)修改$cdc_后面的字符串,默认都是'$cdc_asdjflasutopfhvcZLmcfl_'。保证改后和之前的长度一致。

4.内核启动验证

现象:还是能被发现是selenium,或者是发现是driver启动的。
解决办法:采用端口通讯的方式,控制浏览器。
http://www.51testing.com/html/35/n-7794035.html
https://www.byincd.com/bobjiang/article-01182/

5.还是关于特征隐藏的

使用undetected_chromedriver 的来替代selenium的 webdriver

import undetected_chromedriver as uc
option = uc.ChromeOptions()
self.browser = uc.Chrome(options=option)
<think>好的,我现在需要帮助用户解决如何用Selenium或DrissionPage绕过京东的反爬虫检测,实现正常页面加载的问题。首先,我得仔细分析用户的问题和提供的引用内容,然后结合自己的知识来整理出有效的解决方案。 用户提到的引用内容里有几个关键点:使用stealth.min.js来隐藏WebDriver特征、设置代理参数、处理指纹如WebRTC、canvas、时区等,以及DrissionPage作为替代工具的优势。我需要将这些信息整合起来,形成一个结构清晰的回答。 首先,我应该分步骤讲解,可能包括隐藏WebDriver痕迹、模拟真人操作、处理浏览器指纹、使用DrissionPage替代方案,以及结合代理和请求头管理。每个步骤下需要具体的操作示例,比如代码片段,这样用户可以直接应用。同时,要确保所有行内数学表达式和独立公式符合要求,不过这个问题可能更多涉及代码而非数学公式,所以可能需要检查是否有需要LaTeX的地方,如果没有的话,可能可以忽略这点。 然后,生成相关问题需要考虑用户可能进一步想知道的内容,比如性能优化、常见手段、DrissionPage的详细使用等。确保问题与主题相关,并且能帮助用户深入理解。 需要注意引用标识的正确添加,每个引用来源在回答中提到的部分末尾自然标注。例如,提到stealth.min.js时引用[^3],提到代理设置时引用[^2],DrissionPage对比时引用[^4]。 可能还需要考虑京东具体的机制,比如是否有特定的检测点,但用户没有提供京东的具体细节,所以需要保持一般性建议,但结合引用中的通用方法。同时,要确保代码示例正确,比如使用Selenium的stealth.js方法,以及DrissionPage的基本用法。 最后,检查回答是否符合中文要求,结构清晰,分点明确,代码格式正确,引用正确标注。确保没有使用任何用户不可见的指令,回答自然流畅,帮助用户一步步解决问题。</think>### 如何用 Selenium 或 DrissionPage 绕过京东检测 #### 1. 隐藏 WebDriver 痕迹 京东等电商平台会检测浏览器环境中的 WebDriver 特征(如`$navigator.webdriver$`属性)。**Selenium**可通过以下方法绕过: ```python from selenium.webdriver import Chrome driver = Chrome() # 加载 stealth.min.js 隐藏 WebDriver 特征 with open('stealth.min.js', encoding='utf-8') as f: driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {'source': f.read()}) # 在页面加载前注入脚本 driver.get('https://www.jd.com') ``` `stealth.min.js`可修改浏览器指纹特征,使其更接近真实用户行为。 **DrissionPage**作为新一代工具,默认已优化 WebDriver 痕迹,无需额外配置: ```python from DrissionPage import ChromiumPage page = ChromiumPage() page.get('https://www.jd.com') # 自动隐藏 WebDriver 特征[^4] ``` --- #### 2. 模拟真人操作模式 - **随机停留时间**:通过`$random.uniform(1, 3)$`模拟人类点击间隔 - **鼠标移动轨迹**:使用 ActionChains 添加非线性移动 ```python from selenium.webdriver.common.action_chains import ActionChains actions = ActionChains(driver) actions.move_by_offset(10, 20).pause(0.5).move_by_offset(-5, 15).perform() ``` --- #### 3. 处理浏览器指纹 京东可能检测以下特征: - **Canvas 指纹**:通过覆盖原生 API 生成随机指纹 - **WebRTC 泄露**:禁用 WebRTC 或使用代理插件 - **时区与语言**:强制设置中文时区 ```python options = ChromeOptions() options.add_argument('--lang=zh-CN') options.add_argument('--timezone=Asia/Shanghai') # 设置时区[^2] ``` --- #### 4. DrissionPage 优化方案 相较于 Selenium,**DrissionPage**具备以下优势: 1. 无需单独安装浏览器驱动 2. 默认优化指纹特征(如 WebGL、字体列表等) 3. 支持混合模式(同时操作浏览器和请求) ```python page = ChromiumPage() page.get('https://item.jd.com/100038348832.html') # 直接访问商品页 print(page.ele('tag:h2').text) # 智能定位元素 ``` --- #### 5. 代理与请求头管理 必须配合代理 IP 和 Header 随机化: ```python # Selenium 代理设置(需同时设置 capabilities) options.add_argument('--proxy-server=http://127.0.0.1:8080') driver = Chrome(options=options) # DrissionPage 代理设置 page.set.proxy('http://127.0.0.1:8080') # 简化的代理配置 ``` 注意需定期更换 User-Agent,推荐使用`$fake_useragent`库生成随机头部[^2]。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值