不管怎么对 selenium 的 webdriver 标识进行防御,selenium 爬取还是被识别了。。原因是 selenium 唤起浏览器需要通过 chromedriver.exe / geckodriver.exe 来唤起 谷歌 / 火狐,恰恰就是这些驱动导致 selenium 被识别,好家伙,反爬直接给你釜底抽薪了。网上也有去掉 webdriver 标识并反编译的 chromedriver.exe,但对于拿来党来说,系统环境、版本限制太大了,又不想花时间去搞这个反编译,就去找哪个能代替 selenium。福音来了~ puppeteer 简直就是为 chrome 浏览器自动化测试量身打造啊~~ pyppeteer 就是 python 版的 puppeteer。
安装和部署 pyppeteer 的教程网上有,这里不多说。
废话不多说,直接上 pyppeteer 的 scrapy 应用吧~
import pyppeteer
import asyncio
import logging
import random
import json
pyppeteer_level = logging.WARNING
logging.getLogger('pyppeteer').setLevel(pyppeteer_level)
logging.getLogger('websockets.protocol').setLevel(pyppeteer_level)
pyppeteer_logger = logging.getLogger('pyppeteer')
pyppeteer_logger.setLevel(logging.WARNING)
# 以上 代码作用是除了WARNING报错,浏览器操作就不显示在控制台了,控制台清爽多了~~
pyppeteer.DEBUG = False
# 一定一定要加下面代码,否则还是会反爬被识别出是自动化测试的
pyppeteer.launcher.AUTOMATION_ARGS.remove("--enable-automation")
class ProxyMiddleware(object):
def random_region(self, start, end):
return int(random.uniform(start, end) * 1000)
a