Bob's Blog

Web开发、测试框架、自动化平台、APP开发、机器学习等

返回上页首页

Selenium反爬的几种方式



selenium是用来自动化操作web页面元素的工具,当我们有需要自动化某些业务流程的时候就可以用到。但是对于有些网站来说,是有各类反爬机制,会监测到是否是真人操作,这里记录了几种可以绕过反爬机制的方式。

一. 利用devtools,用命令行启动chrome浏览器,指定remote-debugging-port,随后由selenium接管该进程,便达到了绕过selenium启动检查的目的。

这个在之前的一篇文章中有记录:Python加Selenium自动化测试知乎网站(一)配置启动浏览器

二. 修改window.navigator.webdriver的值,有些网站时监测window.navigator.webdriver的值来判断是否用了selenium自动化,于是修改该值便能绕过这个检查。

当用selenium打开浏览器时,该值为true,按如下操作启动浏览器,该值变为false

from selenium.webdriver import Chrome
from selenium.webdriver import ChromeOptions

option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_argument("--disable-blink-features=AutomationControlled")

driver = Chrome(options=option)

也可以加上这两句

script = '''object.defineProperty(navigator,'webdriver',{undefinedget: () => undefined})'''
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {'source': script})

三. 修改chromedriver中的key,看到有其他人分享过有的网站会检查webdriver驱动文件的key值,那么替换掉该值可以绕过该检查。

但我还没见到过有这类逻辑的网站。

具体的方法是以chromedriver为例

vim chromedriver

用/cdc_做为关键词搜索,

就会看到类似如下的内容

function getPageCache(opt_doc, opt_w3c) {
  var doc = opt_doc || document;
  var w3c = opt_w3c || false;
  // |key| is a long random string, unlikely to conflict with anything else.
  var key = '$cdc_asdjflasutopfhvcZLmcfl_';  ## here
  if (w3c) {
    if (!(key in doc))
      doc[key] = new CacheWithUUID();
    return doc[key];
  } else {
    if (!(key in doc))
      doc[key] = new Cache();
    return doc[key];
  }
}

把这个值改成同长度的值,或者就改最后一个字母比如var key = '$cdc_asdjflasutopfhvcZLmcflT';, 然后保存,再次启动driver。

四. 注意操作间隔时间, 有的网站的检查比较简单粗暴,看你每次操作的间隔,因为人和机器最明显的区别就是机器太快了,当一个流程操作达到一秒执行了十多个操作,那么不用说了,肯定不是真人。于是在这样的情况下注意设置一些等待时间即可。

上一篇:  Mac M1重装环境问题汇总

共有0条评论

添加评论

暂无评论