https://github.com/ultrafunkamsterdam/unDetected-chromedriver
Distill Network / Imperva / DataDome / Botprotect.io와 같은 안티 봇 서비스를 실행하지 않는 최적화된 Selenium Chromedriver 패치는 자동으로 드라이버 바이너리를 다운로드하고 패치합니다.
pip install undetected-chromedriver
또는 모험을 즐기고 싶다면 github를 통해 직접 설치하세요.
pip install git+https://www.github.com/ultrafunkamsterdam/undetected-chromedriver@master # replace @master with @branchname for other branches
이슈 트래커에 제한을 두겠습니다. 너무 오랫동안 남용되었습니다.
좋은 소식 있어?
예, 장기적으로 더 나은 도움이 될 것이라고 생각하는 감지되지 않은 토론을 열었습니다.
이 패키지는 IP 주소를 숨기지 않으며, 다시 한번 말씀드리지만 데이터 센터(더 작은 규모라도)에서 실행하는 경우 통과하지 못할 가능성이 높습니다! 또한, 집에서 IP 평판이 낮다면 합격할 수 없습니다!
집과 데이터 센터에서 다음 코드를 실행합니다.
import undetected_chromedriver as uc
driver = uc . Chrome ( headless = True , use_subprocess = False )
driver . get ( 'https://nowsecure.nl' )
driver . save_screenshot ( 'nowsecure.png' )
대규모 업데이트! 잠재적으로 코드가 손상될 수 있으므로 주의하세요.
변수를 제거하고 이름을 바꾸는 대신 탐지 방지 메커니즘을 다시 작성하여 변수를 유지하지만 처음부터 주입되는 것을 방지합니다. 이를 통해 적어도 가까운 미래에는 탐지로부터 우리를 안전하게 보호할 수 있습니다.
1000개의 {randomstring}_chromedriver.exe로 끝나는 것을 방지하기 위해 파일 이름 지정을 다시 작성했습니다. 대신 unDetected_chromedriver.exe라고 합니다.
제거된 compat,v2 파일 및 테스트 폴더 정리
링크를 클릭한 후 감지될 경우 시도할 수 있는 WebElement.click_safe() 메서드를 추가했습니다. 이는 작동이 보장되지 않습니다.
하위 노드를 쉽게 가져오거나 찾을 수 있도록 WebElement.children(self, tag=None, recursive=False)을 추가했습니다. 예:
body = driver.find_element('tag name', 'body')
# get the 6th child (any tag) of body, and grab all img's within (recursive).
images = body.children()[6].children('img', True)
srcs = list(map(lambda _:_.attrs.get('src'), images))
어리석은 질문을 할 때 사람들을 가리킬 수 있는 example.py를 추가했습니다. (아니요, 실제로 꽤 멋지네요. 모두가 봐야 합니다.)
람다 플랫폼에 대한 지원 추가
x86_32에 대한 지원 추가
linux2로 시스템 보고에 대한 지원 추가
일부 리팩토링
use_subprocess의 기본값은 이제 True입니다. 너무 많은 사람들이 멀티프로세싱과 name == ' main 을 이해하지 못하고, 테스트한 후에도 Chrome 104+에서는 더 이상 차이가 없는 것 같습니다.
기본값은 True인 no_sandbox를 추가했는데, "보안되지 않은 명령줄을 사용하고 있습니다..."라는 성가신 표시줄이 없습니다.
Docker 이미지를 업데이트합니다. 이제 컨테이너에 vnc 또는 rdp를 연결하여 실제 브라우저 창을 볼 수 있습니다.
물론 "일반" 모드도 작동합니다
이 버전에서는 코드가 손상 might
업데이트하기 전에 테스트하세요!
새로운 탐지 방지 로직이 추가되었습니다!
v2가 기본 모듈이 되었기 때문에 더 이상 v2를 참조할 필요가 없습니다. 이는 이제 간단히 다음을 사용할 수 있음을 의미합니다.
import undetected_chromedriver as uc
driver = uc . Chrome ()
driver . get ( 'https://nowsecure.nl' )
이전 버전과의 호환성을 위해 v2는 제거되지 않지만 기본 모듈에 별칭이 지정됩니다.
Windows가 아닌 OS에서 발생하는 "환영 화면" 잔소리를 수정했습니다. 화면을 환영하고 Google에 더 많은 데이터를 제공하는 나그페티시스트라면 Chrome(suppress_welcome=False)을 사용하세요.
사용자 정의 크롬 설치 폴더를 PATH 환경 변수에 추가할 수 없거나 다양한 브라우저/버전을 보유하고 있는 극단적인 경우(예, 그렇습니다)가 아니면 사용하면 안되는 browser_executable_path
로 생성자의 executable_path
대체했습니다. 자동 조회가 잘못된 브라우저를 반환합니다.
"v1"(?)은 현재 _compat로 이동되었습니다.
고정 종속성 버전
ChromeOptions 맞춤 처리가 제거되어 webdriver.chromium.options.ChromiumOptions
와 호환됩니다.
Chrome.get() fu를 제거하고 "거의" 원본으로 다시 복원했습니다.
with
필요하지 않습니다. 하지만 이전 버전과의 호환성을 위해 여전히 작동할 것입니다.현재까지 테스트 성공률: 100%
어떤 사람들은 읽는 데 어려움을 겪기 때문에 나중에 다시 언급하겠습니다. 헤드리스는 여전히 WIP입니다. 문제 제기는 불필요하다
프로세스 생성 동작을 완전히 분리되도록 변경
항상 contextmanager를 사용하도록 .get(url) 메소드를 변경했습니다.
내부적으로 cdp를 사용하도록 .get(url) 메소드를 변경했습니다.
... with
문은 더 이상 필요하지 않습니다 ..
todo: 비동기화 및 셀레늄 4를 위한 작업
당황스러운 일을 만날 때마다
from session not created: This version of ChromeDriver only supports Chrome version 96 # or what ever version
해결책은 간단합니다.
import undetected_chromedriver as uc
driver = uc . Chrome ( version_main = 95 )
2021년 7월: 현재 감지되지 않은 크롬 드라이버에 대한 셀레늄 4 구현 중입니다.
속보: #255
불필요한 고민과 문제 제기를 방지하려면 이 문서 마지막 부분에 있는 중요한 참고 사항을 염두에 두시기 바랍니다.
말 그대로 이것이 당신이 해야 할 전부입니다. 설정이 포함되며 브라우저 실행 파일이 자동으로 발견됩니다. 이는 문제가 발생할 경우에 사용하도록 권장하는 스니펫이기도 합니다.
import undetected_chromedriver as uc
driver = uc . Chrome ()
driver . get ( 'https://nowsecure.nl' ) # my own test test site with max anti-bot protection
말 그대로 이것이 당신이 해야 할 전부입니다. 지정된 폴더가 없으면 새 프로필이 생성됩니다. 이와 같이 지정된 데이터 디렉토리는 종료 시 자동으로 제거되지 않습니다.
import undetected_chromedriver as uc
options = uc . ChromeOptions ()
# setting profile
options . user_data_dir = "c: \ temp \ profile"
# use specific (older) version
driver = uc . Chrome (
options = options , version_main = 94
) # version_main allows to specify your chrome version instead of following chrome global version
driver . get ( 'https://nowsecure.nl' ) # my own test test site with max anti-bot protection
말 그대로 이것이 당신이 해야 할 전부입니다. 이제 낮은 수준의 devtools-protocol을 듣고 구독할 수 있습니다. 최근에 공식 크롬드라이버의 향후 출시도 계획 중이라는 사실을 알게 되었습니다. 그러나 나는 지금은 내 자신을 구현했습니다. 조사를 위해 나 자신이 필요했기 때문입니다.