pythonクローラー用のSeleniumビジュアルクローラー

前の記事のレビュー###

[ 1つの記事でPythonクローラー(1)を理解する-基本原則の概要](https://blog.csdn.net/qq_35866846/article/details/107800878)[1つの記事でPythonクローラー(2)を理解する-4つの一般的な基礎クローラーメソッドの紹介](https://blog.csdn.net/qq_35866846/article/details/107801812)

セレンクローラーがビジュアルクローラーと呼ばれる理由

主に上記のWebページ解析のクロール方法と比較して

セレンクローラーは主に人のクリック操作をシミュレートします

セレンがブラウザを駆動して操作するプロセスを観察できます

これは、他の誰かがあなたのコンピューターを操作するのを手伝ってくれるのを見るのと似ています。

もちろん、セレンにはインターフェースモードもありません

クイックスタート#

セレンの基本的な紹介:

Seleniumは、完全なWebアプリケーションテストシステムです。

テスト記録(selenium IDE)、書き込みおよび実行(Selenium Remote Control)が含まれています
テストを伴う並列処理(Seleniumグリッド)。

Selenium CoreはJsUnitに基づいており、
完全にJavaScriptで記述されているため、JavaScriptをサポートするすべてのブラウザーで使用できます。
Seleniumは、実際のブラウザー、自動テストツールをシミュレートでき、複数のブラウザーをサポートします。

クローラーは主にJavaScriptレンダリングの問題を解決するために使用されます。

pythonでクローラーを作成するとき、私は主にSeleniumのWebdriverを使用します。

# セレンライブラリをインストールする
pip install selenium
# 対応するブラウザドライバをインストールします
# 最初に次の方法でSeleniumを見ることができます.Webdriverはどのブラウザをサポートしていますか
from selenium import webdriver
print(help(webdriver))
該当するブラウザ:
PACKAGE CONTENTS
 android(package)blackberry(package)chrome(package)common(package)edge(package)firefox(package)ie(package)opera(package)phantomjs(package)remote(package)safari(package)support(package)webkitgtk(package)
# ここで、より重要なPhantomJSについて説明します,
# PhantomJSは、WebKitに基づくサーバー側のJavaScriptAPIです。,
# ブラウザをサポートせずにWebをサポートします。
# 高速で、Dom処理、CSSセレクター、JSONなどのさまざまなWeb標準をネイティブにサポートします。
# PhantomJSは、ページの自動化、ネットワークモニタリング、Webページのスクリーンショット、およびインターフェイスレステストに使用できます。

[ Google Chromeドライバーのダウンロードアドレス](http://npm.taobao.org/mirrors/chromedriver/)
対応するバージョン番号に注意して、Chromeアドレスバーにchrome:// version /と入力して、Chromeバージョンを表示します
anacondaを使用してダウンロードし、anaconda3 \ Scriptsフォルダーにドロップします。
pycharm、VScodeなどの他のアイデアであるが、anacondaの統合されたpythonがロードされている場合でも、これを行うことができます。

簡単なテスト

from selenium import webdriver
# # ブラウザオブジェクトを宣言します
browser1 = webdriver.Chrome()
browser2 = webdriver.Firefox()
# # ページにアクセス
browser1.get("http://www.baidu.com")print(browser1.page_source)
# 現在のウィンドウを閉じる
browser1.close()

要素の配置#

ページを操作するには、最初にページ要素を選択します。
8つの一般的な要素の配置方法は次のとおりです

1つの要素を見つける 複数の要素を配置する 配置方法の説明
find_element_by_id find_elements_by_id 要素IDで検索
find_element_by_name find_elements_by_name 要素名で検索
find_element_by_xpath find_elements_by_xpath xpathパスで検索
find_element_by_link_text find_elements_by_link_text 完全なハイパーリンクテキストで検索
find_element_by_partial_link_text find_elements_by_partial_link_text 部分的なハイパーリンクテキストを検索する
find_element_by_tag_name find_elements_by_tag_name タグ名で検索
find_element_by_class_name find_elements_by_class_name クラス名で検索
find_element_by_css_selector find_elements_by_css_selector cssセレクターで検索

より詳細な位置決め方法については、以下を参照してください。["史上最も完全な!セレニウム要素を見つける30の方法》](https://blog.csdn.net/qq_32897143/article/details/80383502)

ページ操作#

  1. フォーム入力
# ユーザー名を見つけて、ユーザー名を入力します
user = drive.find_element_by_name("LoginForm[username]")
user.send_keys(username)
# パスワードを見つけて入力します
pwd=drive.find_element_by_id("LoginForm_password")
pwd.send_keys(password)
# ログインボタンをクリックしてログインします
drive.find_element_by_class_name("login_btn").click()
  1. ウィンドウハンドル

簡単に言えば、ハンドルはブラウザの上の各ウィンドウバーの一意の識別子です

# 現在のウィンドウのすべてのハンドルを取得します
handles = drive.window_handles
# ハンドルから2番目のタブに切り替えます
drive.switch_to.window(handles[2])"""操作が完了しました"""
# 現在のウィンドウを閉じる
driver.close() 
# ハンドルから最初のタブに切り替えます
drive.switch_to.window(handles[0])
time.sleep(random.uniform(2,3))
  1. urlをロードして取得する
# URLの読み込み
drive.get(url)
# 現在のページのURLを取得してアサートします
currentPageUrl = driver.current_url
  1. クッキーの取り扱い
drive.get("http://www.baidu.com")
cookie ={'name':'foo','value':'bar'}
drive.add_cookie(cookie)
drive.get_cookies()

待機方法#

現在、多くのWebサイトでAjaxテクノロジーが使用されています
ページ要素をいつ完全にロードできるかを判断できません
したがって、Webページ要素の選択はより困難です
このとき、待機(ページが読み込まれるのを待つ)を設定する必要があります

セレニウムには2つの待機方法があります。

1. 明示的な待機
明示的な待機は、条件によってトリガーされる待機です
特定の条件が満たされるまで続行されません
タイムアウトを設定できます。タイムアウト後に要素がロードされない場合、例外がスローされます。

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
drive = webdriver.Chrome()
url ='http://www.baidu.com/'
drive.get(url)try:WebDriverWait(self.driver,10).until(EC.presence_of_element_located(By.ID,"LoginForm[username]"))  #待っているショー
except:print('%sページが見つかりません要素'% loc)

上記のコードは「http://www.baidu.com/」ページをロードします
そして、IDが「LoginForm [username]」の要素を見つけます
タイムアウト時間を10秒に設定すると、webDriverWaitは要素がデフォルトで500ms以内に存在するかどうかをチェックします

Seleniumは、待機を表示するためのいくつかの組み込みメソッドを提供します。
expected_conditionsクラスにあります。詳細については、以下の表を参照してください。

組み込みメソッド 機能
title_is 現在のページのタイトルが期待されるコンテンツと等しいかどうかを判断します
title_contains 現在のページのタイトルに期待される文字列が含まれているかどうかを判断します
present_of_element_located 要素がdomツリーに追加されたかどうかを判断しても、その要素が表示されている必要があるという意味ではありません
present_of_all_element_located 少なくとも1つの要素がdomツリーに存在するかどうかを判断します
可視性_of_element_located 要素が表示されているかどうかを判断します
sibility_of 要素が表示されているかどうかを確認します
invisibility_of_element_located 要素がdomツリーに存在しないか、表示されないかを判別します
text_to_be_present_in_element 要素内のテキストに期待される文字列が含まれているかどうかを判断します
text_to_be_present_in_element_value 要素のvalue属性に期待される文字が含まれているかどうかを判別します
frame_to_be_available_and_switch_to_it フレームを切り替えることができるかどうかを判断します。可能な場合はTrueを返し、切り替えます。そうでない場合はFalseを返します
element_to_be_clickable 要素が表示され有効になっているかどうかの判断
staleness_of 要素がdomツリーから削除されるのを待ちます
element_to_be_selected 要素が選択されているかどうかを判断します。通常、ドロップダウンリストに使用されます
element_located_to_be_selected 要素が選択されているかどうかを判断します。通常、ドロップダウンリストに使用されます
element_selection_state_to_be 要素の選択された状態が期待を満たしているかどうかを判断します
element_located_selection_state_to_be 要素の選択された状態が期待を満たしているかどうかを判断します
alert_is_present ページにアラートボックスがあるかどうかを確認します

2. 暗黙の待機

暗黙的な待機とは、要素を見つけようとするときです。すぐに見つからない場合は、一定の時間待機します。
ソケットタイムアウトと同様に、デフォルト設定は0秒です。これは、最長の待機時間に相当します。

ブラウザインターフェイスの直感的な感覚は次のとおりです。
Webページが読み込まれるまで待って(アドレスバーの場所が×にならない)、実行を続行し、
ページの読み込みが設定された待機時間を超えてから、エラーが報告されます

指示

from selenium import webdriver
drive = webdriver.Chrome()
url ='http://www.baidu.com/'
# 最大待機時間を10秒に設定します
drive.implicitly_wait(10)
drive.get(url)
user = drive.find_element_by_name("LoginForm[username]")

3. スレッドスリープ
time.sleep(time)は、より一般的に使用されるスレッドスリープモードです
リスクを避けるために、私は個人的にランダムな睡眠を好みます
time.sleep(random.uniform(4,5))

拡張機能の読み込み#

# アプリケーション拡張機能を設定する
chrome_options.add_extension(extension_path)
# ダウンロードパスを追加
# download.default_ディレクトリ:ダウンロードパスプロファイルを設定します.default_content_settings.ポップアップ:ポップアップウィンドウを禁止するには0に設定します
prefs ={'profile.default_content_settings.popups':0,'download.default_directory':tmp_path}
chrome_options.add_experimental_option('prefs', prefs)

Recommended Posts

pythonクローラー用のSeleniumビジュアルクローラー
Python3クローラーlearning.md
14. MysSQL for Python3
Python Webクローラー(練習)
python_クローラーの基本的な学習
Pythonクローラーgerapyクローラー管理
Pythonはクローラーとアンチクローラーを知っています
Python3クローラーデータクリーニング分析
PythonクローラーのJSの分析
Pythonは詳細な開発のためにC / C ++を組み込んでいます
Pythonクローラー|コグニティブクローラーのリクエストとレスポンス
Pythonクローラーの基本的な知識ポイントの仕上げ
pythonselenium操作cookieの実装
Pythonクローラーのスクレイピーシミュレーションログイン
pythonクローラーのMongodbとpythonの相互作用
pythonはデータマイニングに適していますか
パイソンクローラー開発の学習パス
Pythonセレンクロームオプションパラメータの抜粋
pythonクローラーは簡単に習得できますか
Pythonは視覚的な線図を描きます