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

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 第一章:什么是软件?计算机系统中与硬件相互依存的另一部分。软件包括程序、数据及其相关文档的完整集合。(1)能够完成预定功能呾性能的可执行指令(program)  (2)使得程序能够适当地操作信息的数据结构(data)  (3)描述程序的操作呾使用的文档(document)软件危机的定义?软件在开发和维护过程中遇到的一系列严重问题。软件危机包含两层含义:(1)如何开发软件 (2)如何维护数量不断膨胀的现有软件。软件危机的表现:(1)软件开发的迚度难以控制,经常出现经费超预算、完成期限拖延的现象。 (2)软件需求在开发初期不明确,导致矛盾在后期集中暴露,从而对整个开发 ...
            0 0 1909
            分享
          • 前言爬虫与反爬虫,是一个很不阳光的行业。这里说的不阳光,有两个含义。第一是,这个行业是隐藏在地下的,一般很少被曝光出来。很多公司对外都不会宣称自己有爬虫团队,甚至隐瞒自己有反爬虫团队的事实。这可能是出于公司战略角度来看的,与技术无关。第二是,这个行业并不是一个很积极向上的行业。很多人在这个行业摸爬滚打了多年,积攒了大量的经验,但是悲哀的发现,这些经验很难兑换成闪光的简历。面试的时候,因为双方爬虫理念或者反爬虫理念不同,也很可能互不认可,影响自己的求职之路。本来程序员就有“文人相轻”的倾向,何况理念真的大不同。然而这就是程序员的宿命。不管这个行业有多么的不阳光,依然无法阻挡大量的人进入这个行业,...
            13 14 1650
            分享
          • 编写一份优秀的接口文档会让软件开发中变得更加轻松,更有效率。这可是关键任务,写得好不仅可以帮助开发人员更好地理解和使用 API 接口,还可以提高整个团队的协作效率。大家可以在线感受一下优秀的接口文档是怎样的:https://petstore.apifox.cn那么我们该如何写好一份优秀的接口文档呢?接口文档结构首先我们要知道文档结构是什么样子的。接口文档应该有清晰明确的结构,以便开发人员能快速定位自己需要的 API 接口信息,同时帮助快速理解。一般来说,接口文档应该包括以下内容:接口概述接口参数接口请求和响应示例接口返回码接口调用方法这些内容都包括的话,起码在结构完整性上就已经做得很好了。接下...
            0 0 1143
            分享
          • 我们写用例的时候一般是先写测试点,然后再写测试用例,也可以这么理解,测试点就是精简版的测试用例。编写用例四个基本方法:等价类、边界值、正交法、场景法。我认为对于一般的企业测试来说,这四个方法足够了。编写测试用例的策略:先点后面,先局部再整体,最忌讳的是点和面混在一起,局部和整体不明。在测试点设计的时候,需要思考如下几点:1、测试操作的难度;测试操作包括环境、配置、执行等因素,在测试设计时,尽量减小操作的难度。2、重要性及优先级;测试点一定要区分重要性及优先级,以便在实际项目测试中进行选择。重要性部门建议突出内部测试、外部验收、线上问题等标签,便于管理和分类更新。3、自动化可实现性;测试点一定要...
            0 0 2521
            分享
          • 在做接口测试的时候,我们经常会遇到一种情况就是要对接口的参数进行各种可能的校验,手动修改很麻烦,尤其是那些接口参数有几十个甚至更多的,有没有一种方法可以批量的对指定参数做生成处理呢。答案是肯定的!python的jinja2模板库可以很好的满足我们的需求,通过维护一个原始数据模板,将我们想要动态生成的变量模板化,就可以实现需求。现在我们有这样的一个请求数据{     "abc":"123",     "p2p":"123",  ...
            0 0 2456
            分享
      • 51testing软件测试圈微信