selenium打开网页被检测,怎么屏蔽和绕过

Selenium 操作被检测屏蔽

selenium打开浏览器模仿人工操作是诸多爬虫小白最万能的网页数据获取方式,但是在做自动化爬虫时,经常被检测到是selenium驱动。前段时间selenium打开维普高级搜索时得到的页面是空白页。
在这里插入图片描述

Selenium为何会被检测

主要原因是selenium打开的浏览器指纹和人工操作打开的浏览器指纹是不同的,比如最熟知的window.navigator.webdriver关键字,在selenium打开的浏览器打印返回结果为true,而正常浏览器打印结果返回为undefined,我们可以在
网站比较各关键字。

Selenium防检测方法

1. 修改window.navigator.webdriver关键字返回结果
from selenium import webdriver
options = webdriver.ChromeOptions()
# 此步骤很重要,设置为开发者模式,防止被各大网站识别出来使用了Selenium
driver = webdriver.Chrome(options=options)
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
            "source": """
            Object.defineProperty(navigator, 'webdriver', {
              get: () => undefined
            })
            """
        })

但是因为浏览器指纹很多,这种方法的局限性是显而易见的。

2. 使用stealth.min.js文件防止selenium被检测
import time
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument('user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36')
driver = Chrome('./chromedriver', options=chrome_options)

with open('/Users/kingname/test_pyppeteer/stealth.min.js') as f:
    js = f.read()

driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
  "source": js
})

stealth.min.js文件来源于puppeteer,有开发者给 puppeteer 写了一套插件,叫做puppeteer-extra。其中,就有一个插件叫做puppeteer-extra-plugin-stealth专门用来让 puppeteer 隐藏模拟浏览器的指纹特征。

python开发者就需要把其中的隐藏特征的脚本提取出来,做成一个 js 文件。然后让 Selenium 或者 Pyppeteer 在打开任意网页之前,先运行一下这个 js 文件里面的内容。

puppeteer-extra-plugin-stealth的作者还写了另外一个工具,叫做extract-stealth-evasions。这个东西就是用来生成stealth.min.js文件的。

stealth.min.js资源:
链接:https://pan.baidu.com/s/1wiFnwOlHx3Wxe1UzW5gdrg
提取码:6hqf

3. undetected_chromedriver

undetected_chromedriver
使用方法
undetected_chromedriver 可以防止浏览器特征被识别,并且可以根据浏览器版本自动下载驱动。

import undetected_chromedriver as uc
driver = uc.Chrome()
driver.get('https://nowsecure.nl')

这是目前在用的一种方法,基本可以解决selenium被识别的问题
在这里插入图片描述

  • 37
    点赞
  • 236
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
根据提供的引用内容,可以使用以下方法来规避Selenium检测: 1. 首先,确保您已经关闭了所有浏览器窗口。 2. 设置Chrome驱动器路径和启动选项,代码示例如下: ``` System.setProperty("webdriver.chrome.driver", "your chrome driver path"); ChromeOptions option = new ChromeOptions(); option.setExperimentalOption("debuggerAddress", "127.0.0.1:9222"); WebDriver webDriver = new ChromeDriver(option); webDriver.manage().timeouts().implicitlyWait(20, TimeUnit.MILLISECONDS); webDriver.get("web page url"); ``` 请注意,这段代码中的`your chrome driver path`需要替换为您的Chrome驱动器的实际路径。 3. 使用上述代码启动Chrome浏览器后,您可以执行您需要的操作。 需要注意的是,这种方法有一些优势和劣势。优势是可以规避大多数网站的检测。劣势是无法使用无头模式,因为必须存在一个已经打开的窗口,并且HTTP代理将不会生效。 如果您想了解如何接管已经打开的浏览器窗口,可以参考提供的链接文章。 #### 引用[.reference_title] - *1* *3* [【SeleniumSelenium绕过检测 & 隐藏特征](https://blog.csdn.net/weixin_45081575/article/details/126585575)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Java Selenium防止被网站检测](https://blog.csdn.net/daiyi666/article/details/124350179)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值