必知必会:selenuim/pyppeteer模拟登陆防检测,能够屏蔽一小部分简单的检测

前言

对于使用模拟登陆等操作来爬虫的手段,已经很容易被检测了,网上很多教程是说在网站所有js代码执行之前来执行下面几个js代码来到达效果:

js1 = '''() =>{Object.defineProperties(navigator,{ webdriver:{ get: () => false}})}'''
js2 = '''() => {alert(window.navigator.webdriver)}'''
js3 = '''() => {window.navigator.chrome = {runtime: {}, }; }'''
js4 = '''() =>{Object.defineProperty(navigator, 'languages', {get: () => ['en-US', 'en']});}'''
js5 = '''() =>{Object.defineProperty(navigator, 'plugins', {get: () => [1, 2, 3, 4, 5,6],});}'''

确实修改成功了。这种写法就万无一失了吗?并不是这样的,如果此时你在模拟浏览器中通过点击链接、输入网址进入另一个页面,或者开启新的窗口,你会发现,window.navigator.webdriver这个对象又变成true了,所以这样并非根治。

最近看到两篇文章,说可以解除使用selenuim/pyppeteer模拟登录的检测,设置之后,网站压根检测不到是使用自动化工具操作的把柄,下来买介绍一下,这两个设置神方法。
一、selenuim设置仿被检测

原理大概如下:在启动Chromedriver之前,为Chrome开启实验性功能参数 excludeSwitches,它的值为 [‘enable-automation’]

from selenium.webdriver import Chrome, ChromeOptions

option = ChromeOptions()
option.add_experimental_option("excludeSwitches", ["enable-automation"])
driver = Chrome(options=option)

然后设置这个参数之后,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行左右,找到如下的代码:

AUTOMATION_ARGS = [
    '--enable-automation',
    '--password-store=basic',
    '--use-mock-keychain',
]

将其改成:

AUTOMATION_ARGS = [
    # '--enable-automation',  # 注释掉可以设置window.nagivator.webdriver为undefined
    '--password-store=basic',
    '--use-mock-keychain',
]

当你修改的时候,pycharm工具会提示你是否修改源码,选择OK即可,如果你想以后改回来也可以改回来,不过看官方的开源介绍,下一个版本0.0.26是支持通过传递参数来设置这些值的,所以让我们一起期待下一个版本呗!

先别走呗,这里有可能有你需要的同类型的文章:

python最好用的第三方库资源下载网址
详细讲解aiohttp异步请求及使用,高效率
CSS字体反爬实战,10分钟就能学会;
爬虫:js逆向目前遇到的知识点集合

你可能感兴趣的:(pyhton爬虫,selenium,自动化测试)