如何隐藏Selenium特征实现自动化网页采集

Selenium是一个流行的自动化网页测试工具,可以通过模拟用户在Chrome浏览器中的操作来完成网站的测试。然而,有些网站会检测浏览器是否由Selenium驱动,如果是,就会返回错误的结果或拒绝访问。为了避免这种情况,我们需要隐藏Selenium的特征,让网站认为我们是正常的用户。

以下是三种常见的隐藏Selenium特征的方法:

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

2、改变user-agent:user-agent是一个浏览器发送给网站的字符串,用于表示浏览器的类型和版本。有些网站会根据user-agent来判断用户的设备和操作系统,如果发现user-agent不符合正常的范围,就会怀疑是Selenium驱动的浏览器。我们可以通过execute_cdp_cmd命令来设置Network.setUserAgentOverride参数,从而改变user-agent为任意我们想要的值,以隐藏Selenium的特征。

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

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

python 复制代码
  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)
  # 在此处添加其他代码来执行您想要的任务

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

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关推荐
User_undefined2 分钟前
selenium大量并发连接驱动超时
selenium·测试工具
少喝冰美式19 分钟前
大语言模型在序列推荐中的应用
人工智能·程序人生·自然语言处理·大模型·大语言模型·计算机技术·大模型应用
百晓生说测试3 小时前
15:00面试,15:08就出来了,问的问题有点变态。。。
自动化测试·软件测试·功能测试·程序人生·面试·职场和发展
提笔惊蚂蚁4 小时前
java-web-苍穹外卖-day1:软件开发步骤简化版+后端环境搭建
java·开发语言·前端·程序人生
南东山人5 小时前
使用pktgen进行高吞吐发包
linux·测试工具·udp·wireshark·压力测试
吾店云建站6 小时前
使用ACF插件向WooCommerce商城产品添加自定义字段
程序人生·职场和发展·创业创新·流量运营·程序员创富
Cici_ovo7 小时前
使用Wireshark获取USB HID(Human Interface Device)报告描述符
网络·测试工具·wireshark
Draina7 小时前
抓包分析:wireshark抓不到TLS1.3数据包中证书的解决方案
网络·测试工具·wireshark
EterNity_TiMe_8 小时前
【论文复现】自动化细胞核分割与特征分析
运维·人工智能·python·数据分析·自动化·特征分析
迈威通信9 小时前
迈威通信助力海上探测,守护蓝色疆域
网络·自动化·能源