• 2
  • 4
分享
  • selenium打开网页被检测,怎么屏蔽和绕过——软件测试圈
  • 北极 2022-07-20 11:33:47 字数 1941 阅读 10371 收藏 4

Selenium 操作被检测屏蔽

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

1.png

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文件的。

3. undetected_chromedriver

undetected_chromedriver

使用方法

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

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

这是目前在用的一种方法,基本可以解决selenium被识别的问题

2.png


作者:fengzhilanyu

原文链接:https://blog.csdn.net/fengzhilanyu/article/details/124745539

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 在谷歌搜索引擎中输入"如何选择一种测试工具?" ,你会发现答案从开源软件到各种基于不同假设的最佳繁衍物,五花八门。一类结果是假定在理想状态下你需要一个不需要编码的、基于GUI界面的测试工具,而另一类结果宣称是可以编码的自动化测试,第三类则是更加感兴趣于测试工具中的例子和文档是否可被执行。Liquidity Services公司的质量和测试主管Connor Roberts曾说过,有时公司引入或更换测试工具,仅仅是因为新上任的经理在上一家公司有此工具的使用经验,或者为了节省开支,使得预算单上的数据看起来更漂亮。Connor Roberts说:最终每天都使用工具的团队发现自己和以...
            1 1 2904
            分享
          • 1、目的本文档定义了软件缺陷管理流程和相关规则,确保软件缺陷管理的系统性和规范性,以保证项目研发质量。2、适用范围适用于部门项目研发过程的缺陷管理,对各阶段的缺陷管理过程进行指导和规范。3、定义3.1 术语缺陷(Defect):存在于软件之中偏差,可被激活,以静态形式存在于软件内部。Bug:缺陷一种表现形态,系统或程序存在的任何一种破坏正常运转能力的问题。3.2 缺陷定义(1)软件未达到需求规格说明书的功能; (2)软件出现了需求规格说明书指明不会出现的错误; (3)软件功能超出需求规格说明书的范围;(4)软件未达到需求规格说明书未指出但应达到的目标; (5)测试...
            12 12 2069
            分享
          •   序言  哈喽兄弟们,今天咱们来了解一下 fileinput 。  说到fileinput,可能90%的码农表示没用过,甚至没有听说过。  这不奇怪,因为在python界,既然open可以走天下,何必要fileinput呢?  但是,今天我还是要介绍fileinput这个方法,因为太奈斯了。  不止是香。是真香!  接下来,就跟着我,一起fileinput,对,就是这个feel。  正文  1、方法介绍  基本用法  先来看一下fileinput的基本功能:  fileinput.filename():返回当前被读取的文件名。  —>在第一行被读取之前,返回 None。  filein...
            0 0 1190
            分享
          • 一、压测流程可参照上篇压测对抗流程二、压测需求需要明确需要压测的环境需要压测的接口,其中包含接口的入参需要明确接口的预计qps需要明确线上机器配置三、压测准备3.1、服务端开发准备:1.根据需要测试的接口,决定需要部署哪些相关依赖服务;2.测试接口对应的服务、接口;3.相关配置;4.相关数据库;5.需要的机器整理,其中包含机器的配置,需要几台机器。3.2、前端开发准备:1.测试的接口和服务应用;2.域名;3.需要准备的机器;4.根据需要测试的接口,决定要部署哪些相关依赖。3.3、测试准备:1.准备压测的测试方案和测试计划;2.通过接口确认压测的场景,其中包含每一个接口需要测试的场景,预计接口需...
            0 0 2249
            分享
          •   据路透社报道,特斯拉首席执行官马斯克6月20日表示,他当晚在纽约与印度总理莫迪进行了一次“非常好的”谈话,将“尽人类最大可能尽快”(assoonashumanlypossible)让特斯拉进入印度。马斯克还说计划明年访问印度。  马斯克在被记者问及与莫迪的会面时说:“这是一次很棒的对话,非常好。”他还透露,他打算明年访问印度。当被记者问及特斯拉进入印度的时间表时,马斯克说:“我相信特斯拉会进入印度,并将在人类可能的情况下尽快这样做。”  据悉,这是莫迪访问美国期间的一项高层会议,也是双方首次就特斯拉在印度建立生产基地的问题进行直接沟通。  IT之家注意到,上个月特斯拉的高管曾访问印度,并与...
            0 0 1086
            分享
      • 51testing软件测试圈微信