selenium——mitmproxy過檢測


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM