import re from mitmproxy import ctx def response(flow): if ‘/js/yoda.‘ in flow.request.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‘, ‘webdriver-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, flow.request.url )) flow.response.text = flow.response.text.replace(‘"{}"‘.format(webdriver_key), ‘"NO-SUCH-ATTR"‘) flow.response.text = flow.response.text.replace(‘t.webdriver‘, ‘false‘) flow.response.text = flow.response.text.replace(‘ChromeDriver‘, ‘‘)
这个方法说得其实也不错,有一部分是是通过低版本进行反编译后的chromedriver,就如Stackflow的答主一样,进行反编译低版本的chromdriver,然后配套对应版本的chrome。这两个版本都各有其中的特点,但是都没办法做到绕过所有的检测。即便开源的selenium,我们也没有足够精力去研究其打开页面进行操作后修改了哪些参数。
这里提供一下进行反编译后的chromedriver version: 版本 76.0.3809.100(正式版本) (64 位)
链接:https://pan.baidu.com/s/1a_rn6mdI4v_ndOwnVRxMHA
提取码:jkhy
chrome.exe --remote-debugging-port=9222
from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() options.add_experimental_option("debuggerAddress", "127.0.0.1:9222") driver = webdriver.Chrome(executable_path=‘D://chromedriver.exe‘, options=options) driver.get(‘https://login.taobao.com‘)
原文:https://www.cnblogs.com/triangle959/p/12015179.html