系统:ubuntu 16.04
安装:
sudo pip3 install mitmproxy
配置:
配置代理:
过检测脚本:
import mitmproxy.http t1 = """ // 改写 `languages` Object.defineProperty(navigator, "languages", { get: function() { return ["en", "es"]; } }); //改写 `plugins` Object.defineProperty(navigator, "plugins", { get: () => new Array(Math.floor(Math.random() * 6) + 1), }); // 改写`webdriver` Object.defineProperty(navigator, "webdriver", { get: () => false, }); """ class Tb(object): def response(slef,flow: mitmproxy.http.HTTPFlow): if 'http://bj.gsxt.gov.cn/index.html' == flow.request.url: flow.response.text = "<script>"+t1+"</script>" + flow.response.text print('注入成功') addons = [ Tb() ]
启动脚本:
mitmdump -s mitm.py
selenium启动:
from selenium import webdriver driver = webdriver.Chrome(executable_path='./chromedriver') url = 'http://bj.gsxt.gov.cn/index.html' driver.get(url) contant = driver.page_source input("........!!!") driver.close()
结果:
总结:搞这个selenium过检测搞了好久,原本的目的是想破解这个网站的验证码问题的,结果用selenium打开网页返回的是一个空白页面,且空白页面中包含了一堆使用Obfuscator工具混淆的js代码(这段代码其实就是生成一个cookie字段的,可以看一下我之前写的cookie反爬那篇文章,不过已经失效了,用那个代码返回的就是这个混淆后的js代码),后来使劲浑身解数去网上找各种反混淆方案,查到crack.js可以反混淆,反混淆的结果其实也是一脸的懵逼啊,最后看到这么个东西
if (window["call" + "Phan" + "tom"] || window["_pha" + "ntom"] || window["Head" + "less"] || window["navi" + "gato" + "r"]["webd" + "rive" + "r"] || window["navi" + "gato" + "r"]["__dr" + "iver" + "_eva" + "luat" + "e"] || window["navi" + "gato" + "r"]["__we" + "bdri" + "ver_" + "eval" + "uate"]) { return !![];
最后我给手动拼接了一下:
callPhantom _phantom Headless navigator.webdriver navigator.__driver_evaluate navigator.__webdriver_evaluate
这明显是检测phantomjs和selenium的,沃日,然后就研究这个selenium过检测问题,搞了好久才搞定了,到这里过检测就完成了,想着接下来就可以搞验证码了,
最后发现过检测后都不需要验证码验证了。。。。。。。
存留的问题:有时候访问会出现站点验证码出现的问题,手动输入验证码后,过验证码后会出现"疑似夹带攻击行为的页面出现"。我怀疑是请求太过频繁的缘故,找了写跟换代理的带码先放这了
import random from selenium import webdriver proxy_list = [ '127.0.0.1:proxy:80', '127.0.0.2:proxy:80'] PROXY = '--proxy-server={0}'.format(random.choice(proxy_list)) print(PROXY) chrome_options = webdriver.ChromeOptions() desired_capabilities = chrome_options.to_capabilities() desired_capabilities['proxy'] = { "httpProxy":PROXY, "noProxy":None, "proxyType":"MANUAL", "class":"org.openqa.selenium.Proxy", "autodetect":False } driver = webdriver.Chrome(desired_capabilities=desired_capabilities) driver.get('https://www.2345.com/')