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
問題トラッカーに制限を設けます。あまりにも長い間虐待され続けてきました。
何か良いニュースはありますか?
はい、Undetected-Discussions をオープンしました。これは長期的には私たちの改善に役立つと思います。
このパッケージはそうではありません。繰り返しますが、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' )
大型アップデート!コードが破損する可能性があるため注意してください。
変数を削除したり名前を変更したりするのではなく、検出防止メカニズムを書き直しました。変数を保持するだけで、最初から挿入されるのを防ぎます。これにより、少なくとも近い将来は検出から守られるでしょう。
ファイル名を書き換えて、 {randomstring}_chromedriver.exe が 1000 個になるのを防ぐため、代わりに undetected_chromedriver.exe という名前にしました。
クリーンアップで削除された compat、v2 ファイル、tests フォルダー
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 以降では違いがないようです。
no_sandbox を追加しました。デフォルトは True で、迷惑な「安全でないコマンド ラインを使用しています...」バーは表示されません。
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) を使用してください。
コンストラクターのexecutable_path
、 browser_executable_path
を優先して置き換えました。これは、カスタム Chrome インストール フォルダーを PATH 環境変数に追加できない、または多数の異なるブラウザ/バージョンを使用できない特殊なケース (そうです、あなたもそうです) でない限り、使用すべきではありません。自動検索では間違ったブラウザが返される
「v1」(?) はとりあえず _compat に移動しました。
依存関係のバージョンを修正
ChromeOptions のカスタム処理が削除されたため、 webdriver.chromium.options.ChromiumOptions
と互換性があります。
Chrome.get() fu を削除し、「ほぼ」元の状態に戻しました。
with
ステートメントはもう必要ありませんが、下位互換性のために引き続き機能します。現在までのテスト成功率: 100%
読むのが難しい人もいるから、それについては別の機会に言っておきますが、 headless はまだ作業中です。問題提起は不要
プロセス作成動作を完全に切り離されるように変更します
常に contextmanager を使用するように .get(url) メソッドを変更しました。
内部で cdp を使用するように .get(url) メソッドを変更しました。
... with
ステートメントはもう必要ありません ..
todo: 非同期化と Selenium 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 月: 現在、undetected-chromedriver 用の Selenium 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 をリッスンしてサブスクライブできるようになりました。私は最近、公式の chromedriver の将来のリリースも計画していることを知りました。ただし、今のところ私は自分のものを実装しました。自分で調査するために必要だったので。