Dodge ブラウザによるセレンの検出
ほとんどのウェブサイトは、ブラウザがselenium起動されているかどうかを判断するためにブラウザのパラメータを検出し、我々は特定のメソッドを実行するためにseleniumを使用している間に特定のパラメータを表示するようにしてもよい(navigator.webdriver、webdriverはheadなしでUAに表示)、だから私はできるだけサイトに検出されないようにこれをエッセイを書いています。
第一幕
参考 javascript - chromedriverでSeleniumを使用しているとき、ウェブサイトはそれを検知することができますか? この回答は非常に好感が持てます。
このサイトでは、特定のパラメータ $cdc_asdjflasutopfhvcZLmcfl を検出していますが、もちろんそれ以外にも多くのパラメータが存在します。
ウェブ上では、mitmproxy を使ってパラメータを変更するリクエストを傍受している人がたくさんいます。
コピーコード
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', '')
<イグ
これは、Stackflowの回答者が行ったように、chromedriverの下位バージョンを、対応するクロームのバージョンに合わせてデコンパイルすることが一部と言えます。どちらのバージョンにもそれぞれの特徴がありますが、すべての検出を回避する方法はありません。オープンソースのseleniumを使っても、操作のためにページを開いた後にどのパラメータが変更されるかを調べるだけのエネルギーはありません。
クロメドライバーのデコンパイル版はこちら:バージョン 76.0.3809.100 (公式) (64 ビット)
リンク: https://pan.baidu.com/s/1a_rn6mdI4v_ndOwnVRxMHA
抽出コード: jkhy
第二幕 これは、より多くの検出を回避する可能性があります
この方法の原理は、通常のブラウザの設定であるクロームの設定ファイルから継承されるクロームのデバッグモードを使用することです。
まずクロームブラウザを全て終了し(重要、以下を読んでから終了)、chrome.exeのあるディレクトリ(Windowsは一般的にC: \Program Files (x86)╱GoogleChromeApplication)にcmdで移動し実行します。
<テーブル
chrome.exe
-
-
remote
- -
debugging
-
port
=
9222
このコマンドは、ポート9222でクロームのデバッグモードを開きます。
そして、Webdriverを呼び出す際にdebuggerAddressを渡します。
コピーコード
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')
<イグ
第三幕
GoogleのChrome Devtools-Protocol(cdp)を使って、cdpコマンドを実行すると、検出を回避することができる
Page.addScriptToEvaluateOnNewDocument "各Frameが開かれたばかりで、そのFrameに対して何もスクリプトが実行されていない状態で、指定されたスクリプトを実行します。
cdpプロトコルはクロームに偏っているという利点がありますが、execute_scriptはseleniumパラメータを取るので、簡単に検出されます。
コピーコード
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""",
})
注意:クロームの低いバージョンはcdpプロトコルをサポートしていないので、クロームのバージョンを79以上に保つようにしてください。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例