selenium 反反爬

写在前面:该篇文章是学习selenium反反爬的记录文章,会逐步完善,并不代表是selenium所有的反反爬方式,还请大佬纠正指点!

1. 修改特征值

问题:

在我们使用自动化脚本工具抓取网页的时候,在网页控制台中执行这一段JS代码window.navigator.webdriver会返回true;而人工手动打开的网页则会返回false;这就是目标网站判断我们是不是自动化工具的手段之一。

未修改之前.png

解决方式:

已失效方法:
  1. 修改特征值:
# 以Chromedriver举例
chrome = webdriver.ChromeOptions()
# 打开这个参数
chrome.add_experimental_option('excludeSwitches', ['enable-automation'])
# 设置driver
driver = webdriver.Chrome(options=chrome, executable_path=chrome_path)

但是有的朋友可能会发现,该方法无效,这是因为在谷歌79版本之后,修复了启用自动化时window.navigator.webdriver为未定义的问题。所以该方法失效!解决方式可以回退Chrome浏览器版本,有兴趣的朋友可以尝试一下~
失效之后我在网上查找了很多使用CDP(GoogleChrome Devtools-Protocol(Chrome 开发工具协议))修改特征值的方法,都未成功。
看看CDP官网有这么一段

selenium 反反爬_第1张图片
image.png

意思就是在driver打开每一个页面之前(网站还未加载JS代码时),可以先执行我们自己的代码;但是我尝试了很多执行JS都无效,不能修改成功。

目前成功方法:

只需要添加--disable-blink-features=AutomationControlled参数即可;上边代码修改为

# 以Chromedriver举例
chrome = webdriver.ChromeOptions()
# 打开这个参数
chrome.add_experimental_option('excludeSwitches', ['enable-automation'])
# 将window.navigator.webdriver特征值去除
chrome.add_argument("--disable-blink-features=AutomationControlled")
# 设置driver
driver = webdriver.Chrome(options=chrome, executable_path=chrome_path)

第一次的失效代码保留或删除都不影响结果
看看执行结果:

修改之后.png

这里显示执行结果为undefined,即修改成功!

你可能感兴趣的:(selenium 反反爬)