使⽤selenium框架的Python爬⾍被检测到的解决⽅法
本⼈之前在做X宝,X评,X团的爬⾍项⽬时,均遇到了获取cookies这个重要的问题,⽽获取cookies的前提是实现⽤户登录,登陆的过程就不赘述了,相信⼤家都遇到了滑块,滚动条等反爬⼿段,(本⼈⽤webdriver破解),可⼤⼚的技术团队还是给了我们⼀个更难解决的问题,就是通过js给webdriver请求响应错误信息。那我们的思考路线就是如何让这个js⽂件功能作废,本⼈使⽤的⽅法是通过 mitmproxy 蔽掉识别webdriver 标识符的 js ⽂件。⾸先下载mitproxy,pip安装⽅法:
pip install mitmproxy
基本使⽤⽅法:
给本机设置代理ip 127.0.0.1端⼝8001(为了让所有流量⾛mitmproxy)具体⽅法请百度。
selenium怎么使用
2. 启动mitmproxy。
windows:
mitmdump -p 8001
Linux:
mitmproxy -p 8001
3. 打开chrome的开发者⼯具,到⽬标⽹站是通过哪个js⽂件控制webdriver相应的,如:
4. 开始写⼲扰脚本(DriverPass.py):
import re
from mitmproxy import ctx
def response(flow):
if '/js/yoda.' quest.url:
for webdriver_key in ['webdriver', '__driver_evaluate', '__webdriver_evaluate', '__selenium_evaluate', '__fxdriver_evaluate',
'__driver_unwrapped', '__webdriver_unwrapped', '__selenium_unwrapped', '__fxdriver_unwrapped', '_Selenium_IDE_Recorder',
'_selenium', 'calledSelenium', '_WEBDRIVER_ELEM_CACHE', 'ChromeDriverw', 'driver-evaluate', 'w
ebdriver-evaluate', 'selenium-evaluate', 'webdriverCommand', 'webdriver-evaluate-response', '__webdriverFunc', '__webdriver_script_fn', '__$webdriverAsyncExecutor', '__lastWatirAlert', '__lastWatirConfirm', '__lastWatirPrompt', '$chrome_asyncScriptInfo', '$cdc_asdjflasutopfhvcZLmcfl_' ]:
ctx.log.info('Remove "{}" from {}.'.format(
webdriver_key, quest.url
))
< = eplace('"{}"'.format(webdriver_key), '"NO-SUCH-ATTR"')
< = eplace('t.webdriver', 'false')
< = eplace('ChromeDriver', '')
5. 退出刚才的mitmproxy状态,重新⽤命令⾏启动mitmproxy⼲扰脚本监听8001端⼝的请求与响应。
mitmdump -s DriverPass.py -p 8001
6. 现在别管mitmproxy,启动webdriver 顺利获得cookies。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。