WebDriver 识别反爬虫的原理和破解方法~

e84d71f677a016bb8fcb9957d899859b.gif

作者|志斌

来源|python笔记

有时候我们在爬取动态网页的时候,会借助渲染工具来进行爬取,这个“借助”实际上就是通过使用相应的浏览器驱动(即WebDriver)向浏览器发出命令。

但是有时候使用浏览器驱动来爬取网页时,会遇到这种情况

bac9faa30addad11d4bb3a090f70a294.png

这时,就代表我们的爬虫程序被反爬了。

今天志斌就来给大家分享一下,如何破解这类特征识别反爬虫之WebDriver识别反爬虫。

01

原理

开发者在开发网页的时候,通过JavaScript设置一个事件,然后让这个事件来调用Navigator对象的webdriver属性,从而来判断客户端是否使用WebDriver驱动浏览器。

如果检测到客户端有webdriver属性,则会返回True,此时反爬虫就会认为这是一个爬虫程序,从而进行限制;如果没有检测到,则会返回False或者Undefined,此时反爬虫不会运行。

检测代码如下:

webdriver = window.navigator.webdriver;
if(webdriver){
    console.log('请不要使用自动化测试工具访问网页') 
} 
else{  
  console.log('正常浏览器')
 }

02

破解

通过学习上面的WebDriver识别反爬虫原理,我们知道反爬虫机制是根据webdriver属性的返回值来判断是否是爬虫程序访问的。

也就是说,当我们用浏览器驱动来爬取网页时,只要我们能够将它的特征给隐藏,让Navigator对象检测不到浏览器驱动,从而使得webdriver属性返回的值为False或者Undefined,此时就破解WebDriver识别反爬虫了。

上面已经分析出来解决方案了,那我们现在就可以书写代码来实现这个方案了,隐藏浏览器驱动特征的代码如下:

driver = webdriver.Chrome()
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_experimental_option('useAutomationExtension', False)
option.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')
option.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Chrome(options=option)
with open('stealth.min.js') as f:
   js = f.read()
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {
   'source': js
})

让我们来看看效果:

bed46a06b8807766c85b13af0e5605ac.gif

此时,文章内容就被正确显示出来了,没有再出现被反爬冲限制。

03

小结

1. 本文详细介绍了如何破解特征识别反爬虫之WebDriver识别反爬虫。

2. 现在很多网站对Selenium套件有着明显的限制,所以破解WebDriver识别反爬虫是一个爬虫工程师必备的技能之一。

3. 本文仅供学习参考,不做它用。

06cf16aee7c11315be2966e5c0f5b19c.gif

e6d182ac625adebfa2b994f0ca160df5.png

资讯

AI不可以作为专利认证发明人

技术

谷歌新深度学习系统促进放射科

资讯

机器学习可以忘记吗?是个好问题

资讯

Tidio AI 趋势报告!超精彩

9dc6f4e9715d458d698ab0ecbe676c1a.png

分享

e4f9485dae614c5a77a0997c524f1f0c.png

点收藏

1b973b55c35fdb7c4dc555bdc1a00d7b.png

点点赞

3959d3edc37e958c1819abe14d2b134d.png

点在看

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值