最近遇上一些反Selenium爬虫
的情况,爬虫都会碰到某些网站刚刚打开页面就被判定为:非人类行为
。
因为不少大网站有对selenium的js监测机制。比如navigator.webdriver
,navigator.languages
,navigator.plugins.length
,
美团,大众,淘宝这些大站点都有这种技术能力。正常情况下 window.navigator.webdriver
的值为undefined
。
而当我们使用selenium
的时候-window.navigator.webdriver
的值为True
。 如下图
——-那么如何解决呢?
第一种:使用mitmproxy用中间人的方式截取服务器发送来的js,修改js里面函数的参值方式发送给服务器。相当于在browser和server之间做一层中介的拦截。不过此方法要对js非常熟悉的人才好实施。
第二种方法依旧通过selenium,不过是在服务器在第一次发送js并在本地验证的时候,做好‘第一次’的伪装,从而实现‘第一次登陆’有效。。方法简单,适合小白。
pyppeteer 加 asyncio 绕过selenium检测,实现鼠标滑动后自动登陆(代码很简单。主要熟悉异步模块及pyppeteer模块。pyppeteer模块看不懂就去看puppeteer文档,pyppeteer只是在puppeteer之上稍微包装了下而已 )。
代码如下 main.py
import asyncio
import time,random
from pyppeteer.launcher import launch # 控制模拟浏览器用
from retrying import retry #设置重试次数用的
async def main(username, pwd, url):# 定义main协程函数&#x