Selenium-webdriver가 반파충류 메커니즘을 돌리는 4가지 방법

앞서 미단의 배달 백스테이지에 올랐을 때 발생한 문제는 여러 가지 방식으로 인증 코드를 드래그하는 데 성공하지 못했다. 직접 드래그를 제어하고 인공 궤적을 모의하는 랜덤 드래그를 포함하여 모두 실패했다. 마지막에 크롬 드라이버로 페이지를 열면 수동으로 로그인해도 안 된다는 것을 발견하고 드라이버가 직접 식별된 것이 틀림없다고 추측했다.처음에useragent 등 방식을 바꾸려고 시도했지만 여전히 안 됩니다. 다른 프로젝트는 방치되어 있기 때문입니다.오늘 타오바오 사업 참모에게 또 이 문제가 생겼다. 바이두를 통해 원래chromedriver의 변수에 특징 코드가 있다는 것을 알게 되었다. 사이트는 특징 코드에 따라 직접 판단할 수 있다. 바이두를 통해 4가지 방법으로 해결할 수 있다는 것을 발견하고 자신이 한 시도를 기록한다.
1,mitproxy 차단 요청 ≠
본질적으로 응답에서mitproxy를 이용하여 포함된 웹driver의 JS의 키워드를 다른 문자로 바꾸는 것이다
1. 본 기기에 프록시 ip 127.0.1 포트 8001(모든 데이터를mitmproxy로 보내기 위해)을 설정하는 구체적인 방법은 바이두를 참조하십시오.
2.mitmproxy를 시작합니다.
windows:

mitmdump -p 8001
3. 크롬의 개발자 도구를 열고 각각을 찾아라.js 파일,driver 문자가 있는지 확인하고, 최종적으로 필요한 것을 찾습니다.js 파일.
4. 스크립트 방해

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', '')
5. 아까mitmproxy 상태를 종료하고 명령줄로mitmproxy를 다시 시작하여 스크립트가 8001 포트의 요청과 응답을 감청하는 것을 방해합니다.

mitmdump -s DriverPass.py -p 8001
2. 원본 수정×
js/call_ 수정function.js, 129줄.

 var doc = opt_doc || document;
 var key = '$cdc_asdjflasutopfhvcZLmcfl_';
 if (!(key in doc))
 doc[key] = new Cache();
 return doc[key];
}
C> 수정 후

function getPageCache(opt_doc) {
 var doc = opt_doc || document;
 var key = ‘$bobo_zhangyx_';
if (!(key in doc))
 doc[key] = new Cache();
 return doc[key];
 }
테스트를 통해 이미 효력을 잃은 것 같은데, 아마도 버전의 교체 문제 때문일 것이다.
3. 수동으로 달리기 프로그램을 켜기 ≠
cmd 실행 명령

chrome.exe --remote-debugging-port=9222 
브라우저를 열고py 코드에서

chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
4. V63 이전 크롬 및 드라이버 교체
(좋은 방법인 것 같은데 시도하지 않았다)
Selenium-webdriver가 반파충류 메커니즘을 우회하는 4가지 방법에 대한 상세한 설명은 여기 있습니다. 더 많은 Selenium webdriver 반파충류 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보시기 바랍니다. 앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기