终极攻略!如何彻底防止Selenium被检测!

发表于:2023-8-14 09:50

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:编程启航    来源:CSDN

  在使用Selenium进行爬虫时,许多朋友都会遇到各种反爬措施。
  实际上,在绝大多数情况下,网站轻而易举地能够检测出你正在使用WebDriver而非标准浏览器
  本文将详细介绍如何有效防止检测的方法。
  我们知道目前网上的反检测方法几乎都是掩耳盗铃,因为模拟浏览器有几十个特征可以被检测,仅仅隐藏 webdriver 这一个值是没有任何意义的。
  今天我们就来说说应该如何正确解决这个问题。我们首先给出解决方案。然后再说明这个解决方案,我是通过什么方式找到的。
  解决这个问题的关键,就是一个 js 文件,叫做stealth.min.js。这个文件的获取有点复杂,具体可以搜索一下,这里不详细介绍。
  我们需要设定,让 Selenium在打开任何页面之前,先运行这个 Js 文件。
  就可以避免被检测到。
  论证过程如下:
  首先,我们直接在浏览器输入网址访问这个网站:
  https://bot.sannysoft.com/
  这些选项其实就是浏览器的特征:
  但我们如果使用selenium就会得到不一样的结果,如下:
  代码:
  from selenium.webdriver import Chrome
  from selenium.webdriver.chrome.options import Options
  chrome_options = Options()
  chrome_options.add_argument("--headless")
  driver = Chrome(executable_path='./chromedriver', options=chrome_options)
  driver.get('https://bot.sannysoft.com/')
  driver.save_screenshot('screenshot.png')
  结果如下:
  下面我们加载这个js文件后再来访问这个网站,查看特征值:
  代码:
  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(executable_path='./chromedriver', options=chrome_options)
  with open('./stealth.min.js') as f:
      js = f.read()
  driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": js
  })
  driver.get('https://bot.sannysoft.com/')
  time.sleep(5)
  driver.save_screenshot('walkaround.png')
  source = driver.page_source
  with open('result.html', 'w') as f:
      f.write(source)
  结果:
  我们可以发现结果与第一种情况一模一样。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号