Selenium隐藏浏览器特征

这篇具有很好参考价值的文章主要介绍了Selenium隐藏浏览器特征。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Selenium特征

我们使用 Selenium 对网页进行爬虫时,如果不做任何处理直接进行爬取,会导致很多特征是暴露的
对一些做了反爬的网站,做了特征检测,用来阻止一些恶意爬虫

来源网址:
https://blog.csdn.net/m0_67695717/article/details/128866017
https://blog.csdn.net/m0_67695717/article/details/130687622
https://blog.csdn.net/houmenghu/article/details/120489611

1. CDP

CDP 全称为 Chrome Devtools-Protocol

https://chromedevtools.github.io/devtools-protocol/

通过执行 CDP 命令,可以在网页加载前运行一段代码,进而改变浏览器的指纹特征

比如,window.navigator.webdriver 在 Selenium 直接打开网页时返回结果为 true;而手动打开网页时,该对象值为 undefined

因此,我们可以利用 CDP 命令修改该对象的值,达到隐藏指纹特征的目的

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
import time

chrome_options = Options()

s = Service(r"chromedriver.exe路径")

driver = webdriver.Chrome(service=s, options=chrome_options)

# 执行cdp命令,修改(window.navigator.webdriver )对象的值
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": """
            Object.defineProperty(navigator, 'webdriver', {
              get: () => undefined
            })
            """
})

driver.get(url='URL')

driver.save_screenshot('result.png')

# 保存
source = driver.page_source
with open('result.html', 'w', encoding='utf-8') as f:
    f.write(source)

time.sleep(200)

需要指出的是,浏览器的指纹特征很多,使用该方法存在一些局限性

2. stealth.min.js

该文件包含了常用的浏览器特征,我们只需要读取该文件,然后执行 CDP 命令即可

下载地址:

https://github.com/berstend/puppeteer-extra/tree/stealth-js

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import time

chrome_options = Options()

# 无头模式
# chrome_options.add_argument("--headless")

# 添加请求头
chrome_options.add_argument(
    'user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36')

s = Service(r"chromedriver.exe路径")

driver = webdriver.Chrome(service=s, options=chrome_options)

# 利用stealth.min.js隐藏浏览器指纹特征
# stealth.min.js下载地址:https://github.com/berstend/puppeteer-extra/tree/stealth-js
with open('./stealth.min.js') as f:
    driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
        "source": f.read()
    })

driver.get(url='URL')
# driver.get(url='https://bot.sannysoft.com/')

# 保存图片
driver.save_screenshot('result.png')

time.sleep(200)

3. undetected_chromedriver

这是一个防止浏览器指纹特征被识别的依赖库,可以自动下载驱动配置再运行

项目地址:https://github.com/ultrafunkamsterdam/undetected-chromedriver

首先,我们安装依赖库

# 安装依赖
pip3 install undetected-chromedriver

然后,通过下面几行代码就能完美隐藏浏览器的指纹特征

from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
import time
import undetected_chromedriver as uc

chrome_options = Options()
# chrome_options.add_argument("--headless")

s = Service(r"chromedriver.exe")

driver = uc.Chrome(service=s, options=chrome_options)

driver.get(url='URL')
# driver.get(url='https://bot.sannysoft.com/')

driver.save_screenshot('result.png')
time.sleep(100)

4. 操作已开启的浏览器

如何利用 Selenium 对已打开的浏览器进行爬虫!

我们只需要通过命令行启动一个浏览器

import subprocess

# 使用当前浏览器
# "C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222
# 创建一个全新配置的浏览器, 一个文件夹只会创建一次
# "C:\Program Files\Google\Chrome\Application\chrome.exe"  --remote-debugging-port=9222 --user-data-dir="随便找个空文件夹路径"

cmd = 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\\selenum\\user_data"'
subprocess.run(cmd)

然后,利用 Selenium 直接操作上面的浏览器即可模拟正常操作浏览器的行为

from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
# 注意我把chromedriver文件放到了当前文件夹里面,所以可以这样调用
# 如果你是windows电脑,你需要使用./chromedriver.exe
driver = Chrome(options=chrome_options)

driver.get('http://exercise.kingname.info/exercise_login_success')
input('输入任意内容继续')
driver.get('https://www.kingname.info')
input('输入任意内容继续')
driver.get('http://exercise.kingname.info/exercise_login_success')


4. 常见的隐藏Selenium特征的方法

隐藏Selenium特征是实现自动化网页测试的关键。通过以下三种方法,我们可以让浏览器看起来更像正常的用户,避免被网站检测到并拒绝访问。综合下面的几种selenium特征隐藏方式,以采集大众点评的评论为案例,结合实际爬虫采集过程中需要使用的代理IP池,提供如下demo:

4.1 修改navigator.webdriver标志

navigator.webdriver是一个浏览器提供的属性,用于表示浏览器是否由webdriver控制。默认情况下,如果浏览器由Selenium驱动,这个标志的值为true,否则为false。我们可以通过execute_cdp_cmd命令来执行Google Chrome DevTools命令,从而修改这个标志的值为false或者undefined,以隐藏Selenium的特征。

4.2 改变user-agent

user-agent是一个浏览器发送给网站的字符串,用于表示浏览器的类型和版本。有些网站会根据user-agent来判断用户的设备和操作系统,如果发现user-agent不符合正常的范围,就会怀疑是Selenium驱动的浏览器。我们可以通过execute_cdp_cmd命令来设置Network.setUserAgentOverride参数,从而改变user-agent为任意我们想要的值,以隐藏Selenium的特征
enable-automation和useAutomationExtension是两个常见的Selenium相关开关,它们会影响浏览器的行为和外观,比如在浏览器窗口上显示“Chrome正在受到自动软件的控制”的提示。我们可以通过Chrome选项来添加或删除这些开关,从而让浏览器看起来更像正常的浏览器,以隐藏Selenium的特征。

4.3 排除或关闭一些Selenium相关的开关

enable-automation和useAutomationExtension是两个常见的Selenium相关开关,它们会影响浏览器的行为和外观,比如在浏览器窗口上显示“Chrome正在受到自动软件的控制”的提示。我们可以通过Chrome选项来添加或删除这些开关,从而让浏览器看起来更像正常的浏览器,以隐藏Selenium的特征。

4.4 代码展示

  from selenium import webdriver
  from selenium.webdriver.common.proxy import Proxy, ProxyType
  # 亿牛云爬虫加强版代理IP 地址、端口号、用户名和密码
  proxy_address = 'www.16yun.cn'
  proxy_port = '3100'
  proxy_username = '16YUN'
  proxy_password = '16IP'
  # 设置Chrome选项,包括隐藏Selenium特征、设置代理IP和排除或关闭一些Selenium相关开关
  options = webdriver.ChromeOptions()
  options.add_argument('--disable-blink-features=AutomationControlled')
  options.add_argument('--disable-extensions')
  options.add_argument('--disable-gpu')
  options.add_argument('--disable-infobars')
  options.add_argument('--disable-notifications')
  options.add_argument('--disable-popup-blocking')
  options.add_argument('--disable-web-security')
  options.add_argument('--ignore-certificate-errors')
  options.add_argument('--no-sandbox')
  options.add_argument('--start-maximized')
  options.add_argument('--user-data-dir=/dev/null')
  options.add_argument('--proxy-server={}'.format(proxy_address + ':' + proxy_port))
  options.add_argument('--proxy-auth={}:{}'.format(proxy_username, proxy_password))
  options.add_experimental_option('excludeSwitches', ['enable-automation', 'useAutomationExtension'])
  # 初始化Chrome浏览器,并使用上述选项
  driver = webdriver.Chrome(options=options)
  # 隐藏navigator.webdriver标志,将其值修改为false或undefined
  driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {
      'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'
  })
  # 设置user-agent,改变user-agent的值
  user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
  driver.execute_cdp_cmd("Network.setUserAgentOverride", {"userAgent": user_agent})
  # 访问大众点评中商品的评论页面
  url = 'https://www.dianping.com/shop/1234567/review_all'
  driver.get(url)
  # 在此处添加其他代码来执行您想要的任务

4.5 总结

此代码将使用Chrome浏览器,并在启动浏览器时使用选项隐藏Selenium特征、设置用户名和密码方式的代理IP和排除或关闭一些Selenium相关开关。然后,使用execute_cdp_cmd命令来执行Google Chrome DevTools协议中的命令,将navigator.webdriver标志的值修改为false或undefined。使用execute_cdp_cmd命令来设置Network.setUserAgentOverride参数,将user-agent更改为指定的user-agent字符串。最后,访问大众点评中商品的评论页面,并在此处添加其他代码来执行您想要的任务。文章来源地址https://www.toymoban.com/news/detail-722642.html

到了这里,关于Selenium隐藏浏览器特征的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • selenium+python切换浏览器窗口

    selenium在当前浏览器页面打开了新的窗口,此时如果要聚焦到新开的浏览器窗口,就需要切换到新的窗口,切换窗口的操作,具体selenium+python示例如下:

    2024年02月15日
    浏览(40)
  • python爬虫之selenium库,浏览器访问搜索页面并提取信息,及隐藏浏览器运行

    如果链接简单,爬虫可以通过链接用requests库提取页面信息,如爬取豆瓣top250影片信息,链接简单易懂。参考:爬取豆瓣top250影片信息 但如果遇到一些搜索之类的,基于js动态加载的网页,以上就不适合,如爬虫b站,搜索“爬虫”页面,第一页链接如下,第二页又是很长没规

    2024年01月23日
    浏览(101)
  • Selenium(二)对浏览器窗口的操作

    Selenium可以通过WebDriver控制浏览器窗口的各种操作,包括:

    2024年02月09日
    浏览(51)
  • Selenium教程__浏览器窗口大小(6)

    本文将介绍如何使用Selenium来获取和设置浏览器窗口的大小,以及一些实际应用场景。 学习本文内容将能够轻松地控制浏览器窗口的大小,从而更好地适应不同的屏幕分辨率和设备,并确保网页在各种窗口大小下都能够良好地展示。  -事必有法,然后有成-  最后祝大家早日

    2024年02月13日
    浏览(46)
  • selenium+python切换浏览器窗口--详细讲解

    在浏览器页面打开窗口后,有时点击按钮会打开新的页面,我们需要切换到新的窗口才能去定位操作,不然无法操作,切换窗口代码如下

    2024年02月14日
    浏览(44)
  • 补充:selenium操作已打开的浏览器窗口

    1. 打开浏览器 首先来到安装 chrome浏览器 的文件夹下,例:C:Users\\01AppDataLocalGoogleChromeApplication 在此界面打开 cmd窗口, 然后输入:chrome.exe --remote-debugging-port=9527 --user-data-dir=“F:seleniumAutomationProfile” ,并回车。 这句代码的意思是启动 chrome浏览器 的调试模式, user-data

    2023年04月09日
    浏览(43)
  • selenium在浏览器定位到下一个窗口

    定位到新打开的页面(窗口): 这里的操作时: 打开拉勾网→定位到地址“北京→搜索框输入“python”进行查找→进入查找结果的第一个连接→定位到新的页面 →关闭新的页面→回到第一个页面

    2024年02月11日
    浏览(46)
  • python-selenium控制浏览器多开窗口

    1、视频展示-多开5个百度页面 目录结构 只要在当前目录下放上自己所在的谷歌驱动器:谷歌驱动器如何下载,请参考博客:请点我 奉上代码

    2024年02月16日
    浏览(55)
  • Selenium操作已经打开的Chrome浏览器窗口

    在使用之前的代码通过selenium操作Chrome浏览器时,每次都要新打开一个窗口,觉得麻烦,所以尝试使用 Selenium 获取已经打开的浏览器窗口,在此记录下过程 本文使用 chrome浏览器来做示例。 ChromeDriver谷歌浏览器驱动的下载安装与使用,可以参考点击:Selenium安装WebDriver:Chro

    2024年02月05日
    浏览(107)
  • 【Selenium】控制当前已经打开的 chrome浏览器窗口(高级版)

    利用 Selenium 获取已经打开的浏览器窗口,全python操作 标题 链接 【Selenium】控制当前已经打开的 chrome浏览器窗口 https://blog.csdn.net/weixin_45081575/article/details/112621581 【Selenium】控制当前已经打开的 chrome浏览器窗口(高级篇) https://blog.csdn.net/weixin_45081575/article/details/126389273 不同

    2024年01月17日
    浏览(85)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包