Selenium Python (3). Pythonを使用したSelenium検出の回避方法:ユーザーエージェントとバックグラウンド実行
Python、ユーザー エージェント、バックグラウンド実行を使用して、自動ブラウジング検出を回避する方法を学びます。Web スクレイピングと自動化のスキルを高めます。
Webスクレイピングとブラウザオートメーションは、多くの企業と開発者にとって不可欠な技術となっています。しかし、多くのWebサイトは自動化されたブラウジングを検出してブロックするようになりました。この記事では、ユーザーエージェントを操作し、Seleniumをバックグラウンドで実行することで、Pythonを使用してSelenium検出をバイパスする方法を探ります。成功するWebスクレイピングを確保するための詳細なステップ、ツール、ベストプラクティスについて詳しく説明します。
Selenium検出の理解#
検出を回避する前に、その仕組みを理解しましょう。Web サイトは、特定の Web ドライバー フラグとプロパティの存在をチェックすることで、Selenium を検出できます。サイトがこれらのフラグを識別すると、アクセスをブロックしたり、誤解を招くデータを表示したりすることがあります。たとえば、標準の Chrome ブラウザを使用してサイトを開くと、期待どおりに応答します。ただし、同じサイトを Selenium を使用して開くと、Web サイトは自動化を検出してブロックできます。この検出が行われるのは、Selenium が Web サイトが検索できる特定のフラグを設定するためです。
WebDriver フラグの変更#
Selenium の検出を回避するための効果的な方法の 1 つは、WebDriver フラグを変更することです。
- Firefox設定:Firefoxの設定ページを開くには、アドレスバーに以下を入力します
about:configWebDriverに関連するフラグを探し、以下に設定しますfalse. - コードの実装:
from selenium import webdriver
# Set Firefox preferences
options = webdriver.FirefoxOptions()
options.set_preference("dom.webdriver.enabled", False)
options.set_preference('useAutomationExtension', False)
driver = webdriver.Firefox(options=options)
このスクリプトは WebDriver 検出フラグを無効にし、ブラウザを通常のユーザー駆動型インスタンスとして表示します。
ユーザーエージェント#
ユーザー エージェントは、ブラウザーが自身を識別するために Web サーバーに送信する文字列です。ユーザー エージェント文字列を変更すると、Selenium リクエストが通常のブラウザー リクエストと区別できなくなる可能性があります。
ユーザーエージェントを変更する手順:
- 共通のユーザーエージェント文字列を識別する: 例:
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" - Seleniumの変更を実装する:
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36")
driver = webdriver.Chrome(options=options)
カスタム ユーザー エージェントを設定することで、多くの基本的な検出を回避できます。
バックグラウンドでSeleniumを実行する#
ブラウザをバックグラウンドで実行することは、検出を回避するためのもう 1 つの重要な要素です。これは、ブラウザをヘッドレス モードで実行することで実現できます。
導入方法:
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("--headless")
driver = webdriver.Chrome(options=options)
ヘッドレス モードで実行すると、サーバー上で自動タスクを実行するために不可欠なグラフィカル インターフェイスが表示されなくなります。
ブラウザの通知とサウンドを無効にする#
自動ブラウジングでは、予期しないポップアップや通知の処理が必要になることがよくあります。これらを無効にすると、プロセスを効率化できます。
コード例:
from selenium import webdriver
options = webdriver.ChromeOptions()
prefs = {"profile.default_content_setting_values.notifications": 2}
options.add_experimental_option("prefs", prefs)
options.add_argument("--mute-audio")
driver = webdriver.Chrome(options=options)
このスクリプトは通知を無効にし、オーディオをミュートして、中断のない自動化を保証します。
データの解析例#
ランダムなユーザー名を生成するサイトからニックネームを解析する実用的な例を考えてみましょう。
ステップ:
- サイトを読み込み、要素を操作する:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
options = webdriver.ChromeOptions()
options.add_argument("--headless")
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36")
driver = webdriver.Chrome(options=options)
driver.get("https://example.com")
# Locate the username field and extract nicknames
usernames = []
for _ in range(10):
nickname = driver.find_element(By.ID, "nickname").text
usernames.append(nickname)
driver.find_element(By.ID, "generate").click()
print(usernames)
まとめ#
WebDriver フラグを操作し、ユーザー エージェントを変更し、Selenium をバックグラウンドで実行し、ブラウザー通知を無効にすることで、Selenium の検出を効果的に回避できます。これらのテクニックは、シームレスで検出されない Web スクレイピングと自動化に不可欠です。これらのメソッドを実装すると、自動化されたタスクが中断されずに効率的に実行されます。Web スクレイピングと自動化は常に倫理的に使用し、Web サイトの利用規約とデータ プライバシー法を遵守してください。より高度なテクニックと定期的な更新については、FineProxy.org のブログをご覧ください。下のコメントで、アイデアやフィードバックを自由に共有してください。この記事が気に入った場合は、チャンネルに登録して「いいね」を付けてください。スクレイピングをお楽しみください。
これらの手順を実装し、必要に応じて設定を調整することで、自動化プロジェクトがスムーズに実行され、検出されないようにすることができます。