Web ページをクローリングする過程では、HTML コードを解析するだけでは取得したいデータが得られないことがよくありますが、これらのデータは AJAX の非同期読み込みや JS レンダリングによってページ上に表示されます。
Selenuim は、複数のブラウザをサポートする自動テスト ツールです。クローラーでは、これを使用してブラウザーのページ閲覧をシミュレートし、それによって JavaScript レンダリングの問題を解決できます。
1. 使用例
2. 詳細な紹介
2.1 ブラウザオブジェクトの宣言
つまり、どのブラウザを使用して操作するかをプログラムに指示します。
2.2 ページへのアクセス
2.3 要素の検索
Web ページに正常にアクセスした後、検索ボックスを見つけてキーワードを入力して Enter キーを押すなど、いくつかの操作を実行する必要がある場合があります。したがって、セレン内の元素を見つける必要があります。
2.3.1 単一要素
Selenium には要素を見つける方法が 2 つあります。1 つ目は、CSS に従って選択するか、xpath に従って検索するかを指定するなど、要素の検索に使用する方法を指定することです。
詳しい要素検索方法は以下の通りです
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
2 番目の方法は、find_element() を直接使用する方法で、渡される最初のパラメータは、使用する必要がある要素検索メソッドです。
2.3.2 複数の要素
複数の要素を検索する方法は、基本的に単一の要素を検索する方法と同じです (単一の要素を検索する関数に s を追加するだけです)。複数の要素を検索するとリストが返されます。
2.4 要素の相互作用
要素の相互作用では、まず要素を取得し、次に取得した要素に対して相互作用メソッドを呼び出します。たとえば、検索ボックスにテキストを入力します。
2.5 インタラクティブなアクション
インタラクションとは、アクションをインタラクション チェーンにアタッチし、それらをシリアルに実行することです。これには、ActionChains を使用する必要があります。
2.6 JavaScriptの実行
たとえば、ドラッグアンドドロップ
2.7 要素情報の取得
要素検索を通じて要素を取得した後、この要素の属性とテキストも取得する必要がある場合があります。
2.7.1 属性の取得
2.8 フレーム
親フレームを見つけても子フレームの情報は見つからないため、子フレームに切り替えて再度検索する必要があります。同様に、子フレームでは親フレームの情報を見つけることができません。
2.9 待機中
Web ページをリクエストするときに、AJAX 非同期ロードが発生する場合があります。Selenium はメイン Web ページのみをロードし、AJAX は考慮しません。したがって、続行する前に、Web ページが完全に読み込まれるまでしばらく待つ必要があります。
2.9.1 暗黙的な待機
暗黙的待機を使用する場合、Webdriver が指定された要素を見つけられない場合、Webdriver は待機を続けます。指定した時間を超えても、指定した要素が見つからない場合は、要素が見つからない例外がスローされます。デフォルトの待ち時間は 0 です。
暗黙的な待機はページ全体を待機します。
暗黙的待機はドライバー サイクル全体で機能するため、設定する必要があるのは 1 回だけであることに注意してください。
2.9.2 明示的な待機
表示待ちには、待ち条件と待ち時間が含まれます。
まず待機条件が成立しているかどうかを判定し、成立していればそのままリターンし、条件が成立していない場合は最長待機時間を待機時間とし、待機時間を過ぎても待機条件が成立しない場合は例外をスローします。
明示的な待機は、指定された要素を待機します。
2.10 ブラウザの進む/戻る
back は前のページに戻ることを実現し、forward は次のページに進むことを実現します
2.11 Cookieの操作
2.12 タブ管理
タブ管理とはブラウザのタブのことです。場合によっては、ブラウザーで新しいタブを追加したり、タブを削除したりする必要があります。これを実現するには Selenium を使用します。