详解selenium + chromedriver 被反爬的解决方法
(编辑:jimmy 日期: 2024/11/17 浏览:3 次 )
问题背景:这个问题是在爬取某夕夕商城遇到的问题,原本的方案是用selenium + chromedriver + mitmproxy开心的刷,但是几天之后,发现刷不出来了,会直接跳转到登陆界面(很明显,是遭遇反爬了)
讲实话,这还是第一次用硒被反爬的,于是进行大规模的测试对比。
同台机器,用铬浏览器正常访问是不用跳转到登陆界面的,所以不是IP的问题。再用提琴手抓包对比了一下两个请求头,请求头都是一样的,所以忽略标头的反爬。
最后通过分析,可能是硒被检测出来了。于是就去查资料。大概的查到是和webdriver的有关系的。因为这个在服务端是可以检测到的。于是通过fiddler抓包,全局搜索了一下webdriver,发现在js中果然是有判断的。导致selenium爬取的时候,被转到登陆界面。
解决方法:mitmproxy
因为mitmproxy可以拦截请求,所以在响应中,将包含的webdriver的JS中的关键字替换成其他的字符就可以了。
if "/_next/static/js/common_pdd" in flow.request.url: flow.response.text = flow.response.text.replace("webdriver", "userAgent")
我是这样替换的。这样js解析的参数就变了,问题花刃而解。可以正常爬取数据了。
另外国外网上也有很多方法,比如修改webdriver里的一些特定参数名称,我尝试了一下,没有生效。
下一篇:Python下使用Trackbar实现绘图板