系統: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/')