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

开发公司操作被检测屏蔽

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

Selenium为何会被检测

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

Selenium防检测方法

1. 修改window.navigator.webdriver关键字返回结果

from selenium import webdriveroptions = webdriver.ChromeOptions()# 此步骤很重要,设置为开发者模式,防止被各大网站识别出来使用了Seleniumdriver = webdriver.Chrome(options=options)driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {            "source": """            Object.defineProperty(navigator, 'webdriver', {              get: () => undefined            })            """        })
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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

2. 使用stealth.min.js文件防止selenium被检测

import timefrom selenium.webdriver import Chromefrom selenium.webdriver.chrome.options import Optionschrome_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})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

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

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

3. undetected_chromedriver


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

import undetected_chromedriver as ucdriver = uc.Chrome()driver.get('https://nowsecure.nl')
  • 1
  • 2
  • 3

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

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发