前言
对于使用模拟登陆等操作来爬虫的手段,已经很容易被检测了,网上很多教程是说在网站所有js代码执行之前来执行下面几个js代码来到达效果:
1 | js1 = '''() =>{Object.defineProperties(navigator,{ webdriver:{ get: () => false}})}''' |
确实修改成功了。这种写法就万无一失了吗?并不是这样的,如果此时你在模拟浏览器中通过点击链接、输入网址进入另一个页面,或者开启新的窗口,你会发现,window.navigator.webdriver
这个对象又变成true了,所以这样并非根治。
最近看到两篇文章,说可以解除使用selenuim/pyppeteer模拟登录的检测,设置之后,网站压根检测不到是使用自动化工具操作的把柄,下来买介绍一下,这两个设置神方法。
一、selenuim设置仿被检测
原理大概如下:在启动Chromedriver之前,为Chrome开启实验性功能参数 ==excludeSwitches==,它的==值为 [‘enable-automation’]==
1 | from selenium.webdriver import Chrome, ChromeOptions |
然后设置这个参数之后,Chrome浏览器会提示你,叫你“停用开发者模式运行的扩展程序”,这时候你不要点击“停用”,你只需要忽略它或者点击那个叉叉,把它关掉即可。
上面这个方法是能够有效根治这个被检测的问题。
二、pyppeteer爬虫界新秀,设置仿被检测
由于Selenium启动的Chrome中,有几十个特征可以被识别,所以在爬虫界已经没有以前那么受欢迎了。模拟浏览器的新秀Puppeteer异军突起,逐渐受到了爬虫界的关注。Puppeteer需要使用JavaScript来控制,如果你是用Python,那么就需要使用Pyppeteer.
如果你使用模拟浏览器爬淘宝,你会发现,无论怎么修改参数,Selenium总是可以立刻被识别。但是如果你使用了本文的方法,用Pyppeteer抓取淘宝,你就会发现另外一个广阔的天地。
写这篇文章的时候(2019-08-15),Pyppeteer的最新版本为0.0.25
设置教程:
此时,你可以在PyCharm中,按住Command键(Windows、Linux用户按住Ctrl键),鼠标左键点击 frompyppeteerimportlaunch中的 launch,自动跳转到Pyppeteer源代码中的 launcher.py文件
把代码往上翻,在第61行左右,找到如下的代码:
1 | AUTOMATION_ARGS = [ |
将其改成:
1 | AUTOMATION_ARGS = [ |
当你修改的时候,pycharm工具会提示你是否修改源码,选择OK
即可,如果你想以后改回来也可以改回来,不过看官方的开源介绍,下一个版本0.0.26是支持通过传递参数来设置这些值的,所以让我们一起期待下一个版本呗!
先别走呗,这里有可能有你需要的同类型的文章:
python最好用的第三方库资源下载网址
详细讲解aiohttp异步请求及使用,高效率
CSS字体反爬实战,10分钟就能学会;
爬虫:js逆向目前遇到的知识点集合