この記事では、Linuxディストリビューション(Ubuntuなど)でSeleniumをセットアップする方法と、Selenium Python3ライブラリを使用して基本的なWeb自動化とWebスクレイピングを実行する方法について説明します。
前提条件
この記事で使用されているコマンドと例を試すには、次のものが必要です。
1)コンピューターにインストールされているLinuxディストリビューション(できればUbuntu)。
2)コンピューターにインストールされているPython3。
3)コンピューターにインストールされているPIP3。
4)コンピューターにインストールされているGoogleChromeまたはFirefoxWebブラウザー。
あなたはこれらのトピックに関する多くの記事を見つけることができます LinuxHint.com 。さらにサポートが必要な場合は、これらの記事を確認してください。
プロジェクト用のPython3仮想環境の準備
Python仮想環境は、分離されたPythonプロジェクトディレクトリを作成するために使用されます。 PIPを使用してインストールするPythonモジュールは、グローバルではなく、プロジェクトディレクトリにのみインストールされます。
Python virtualenv モジュールは、Python仮想環境を管理するために使用されます。
Pythonをインストールできます virtualenv 次のように、PIP3をグローバルに使用するモジュール:
$ sudo pip3 install virtualenvPIP3は、必要なすべてのモジュールをダウンロードしてグローバルにインストールします。
この時点で、Python virtualenv モジュールはグローバルにインストールする必要があります。
プロジェクトディレクトリを作成します python-selenium-basic / 次のように、現在の作業ディレクトリにあります。
$ mkdir -pv python-selenium-basic / drivers新しく作成したプロジェクトディレクトリに移動します python-selenium-basic / 、 次のように:
$CDpython-selenium-basic /次のコマンドを使用して、プロジェクトディレクトリにPython仮想環境を作成します。
$ virtualenv。envこれで、Python仮想環境がプロジェクトディレクトリに作成されます。」
次のコマンドを使用して、プロジェクトディレクトリでPython仮想環境をアクティブ化します。
$ソース。env/ bin / activateご覧のとおり、このプロジェクトディレクトリに対してPython仮想環境がアクティブ化されています。
SeleniumPythonライブラリのインストール
Selenium Pythonライブラリは、公式のPythonPyPIリポジトリで入手できます。
このライブラリは、次のようにPIP3を使用してインストールできます。
$ pip3インストールセレンこれで、SeleniumPythonライブラリがインストールされます。
Selenium Pythonライブラリがインストールされたので、次に行う必要があるのは、お気に入りのWebブラウザー用のWebドライバーをインストールすることです。この記事では、Selenium用のFirefoxおよびChromeWebドライバーをインストールする方法を紹介します。
FirefoxGeckoドライバーのインストール
Firefox Gecko Driverを使用すると、Seleniumを使用してFirefoxWebブラウザーを制御または自動化できます。
Firefox Geckoドライバーをダウンロードするには、次のWebサイトにアクセスしてください。 GitHubがmozilla / geckodriverのページをリリース Webブラウザから。
ご覧のとおり、v0.26.0は、この記事の執筆時点でのFirefoxGeckoドライバーの最新バージョンです。
Firefox Gecko Driverをダウンロードするには、オペレーティングシステムのアーキテクチャに応じて、少し下にスクロールしてLinux geckodrivertar.gzアーカイブをクリックします。
32ビットオペレーティングシステムを使用している場合は、 geckodriver-v0.26.0-linux32.tar.gz リンク。
64ビットオペレーティングシステムを使用している場合は、 geckodriver-v0.26.0-linuxx64.tar.gz リンク。
私の場合、FirefoxGeckoドライバーの64ビットバージョンをダウンロードします。
ブラウザで、アーカイブを保存するように求められます。選択する ファイルを保存 次にクリックします わかった 。
Firefox GeckoDriverアーカイブはにダウンロードする必要があります 〜/ダウンロード ディレクトリ。
を抽出します geckodriver-v0.26.0-linux64.tar.gz からのアーカイブ 〜/ダウンロード ディレクトリへの 運転手/ 次のコマンドを入力して、プロジェクトのディレクトリを作成します。
$タール -xzf〜/ダウンロード/geckodriver-v0.26.0-linux64.tar.gz-NS運転手/
Firefox Gecko Driverアーカイブが抽出されると、新しい geckoドライバー バイナリファイルはで作成する必要があります 運転手/ 以下のスクリーンショットでわかるように、プロジェクトのディレクトリ。
Selenium FirefoxGeckoドライバーのテスト
このセクションでは、FirefoxGeckoドライバーが機能しているかどうかをテストするための最初のSeleniumPythonスクリプトをセットアップする方法を示します。
まず、プロジェクトディレクトリを開きます python-selenium-basic / お気に入りのIDEまたはエディターを使用します。この記事では、Visual StudioCodeを使用します。
新しいPythonスクリプトを作成します ex01.py 、スクリプトに次の行を入力します。
からセレン輸入webdriverからセレン。webdriver。一般。キー 輸入キー
から 時間 輸入寝る
ブラウザ=webdriver。Firefox((実行可能パス='./drivers/geckodriver')。
ブラウザ。得る((「http://www.google.com」)。
寝る((5)。
ブラウザ。終了する(()。
完了したら、を保存します ex01.py Pythonスクリプト。
この記事の後のセクションでコードについて説明します。
次の行は、FirefoxGeckoドライバーを使用するようにSeleniumを構成します。 運転手/ プロジェクトのディレクトリ。
Firefox GeckoドライバーがSeleniumで動作しているかどうかをテストするには、次のコマンドを実行します ex01.py Pythonスクリプト:
$ python3ex01。pyFirefox Webブラウザは自動的にGoogle.comにアクセスし、5秒後に自動的に閉じます。これが発生した場合は、Selenium FirefoxGeckoドライバーが正しく機能しています。
ChromeWebドライバーのインストール
Chrome Web Driverを使用すると、Seleniumを使用してGoogle ChromeWebブラウザーを制御または自動化できます。
Google ChromeWebブラウザと同じバージョンのChromeWebDriverをダウンロードする必要があります。
Google Chrome Webブラウザーのバージョン番号を見つけるには、次のWebサイトにアクセスしてください。 chrome:// settings / help GoogleChromeで。バージョン番号はにある必要があります Chromeについて 下のスクリーンショットでわかるように、セクション。
私の場合、バージョン番号は 83.0.4103.116 。バージョン番号の最初の3つの部分( 83.0.4103 、私の場合)は、Chrome WebDriverのバージョン番号の最初の3つの部分と一致する必要があります。
Chrome Web Driverをダウンロードするには、 Chromeドライバーの公式ダウンロードページ 。
の中に 現在のリリース 以下のスクリーンショットに示されているように、セクションでは、Google ChromeWebブラウザーの最新リリース用のChromeWebドライバーが利用可能になります。
使用しているGoogleChromeのバージョンが 現在のリリース セクションを少し下にスクロールすると、目的のバージョンが見つかります。
正しいChromeWeb Driverのバージョンをクリックすると、次のページに移動します。クリックしてください chromedriver_linux64.zip 以下のスクリーンショットに記載されているリンク。
Chrome WebDriverアーカイブがダウンロードされます。
Chrome WebDriverアーカイブがダウンロードされます。 〜/ダウンロード ディレクトリ。
あなたは抽出することができます chromedriver-linux64.zip からのアーカイブ 〜/ダウンロード ディレクトリへの 運転手/ 次のコマンドを使用して、プロジェクトのディレクトリを作成します。
$解凍〜/ Downloads / chromedriver_linux64。ジップ-dドライバー/
Chrome Web Driverアーカイブが抽出されると、新しい chromedriver バイナリファイルはで作成する必要があります 運転手/ 以下のスクリーンショットでわかるように、プロジェクトのディレクトリ。
Selenium ChromeWebドライバーのテスト
このセクションでは、ChromeWebドライバーが機能しているかどうかをテストするための最初のSeleniumPythonスクリプトを設定する方法を示します。
まず、新しいPythonスクリプトを作成します ex02.py 、スクリプトに次のコード行を入力します。
からセレン輸入webdriverからセレン。webdriver。一般。キー 輸入キー
から 時間 輸入寝る
ブラウザ=webdriver。クロム((実行可能パス='./drivers/chromedriver')。
ブラウザ。得る((「http://www.google.com」)。
寝る((5)。
ブラウザ。終了する(()。
完了したら、を保存します ex02.py Pythonスクリプト。
この記事の後のセクションでコードについて説明します。
次の行は、SeleniumがChrome WebDriverを使用するように構成します。 運転手/ プロジェクトのディレクトリ。
Chrome Web DriverがSeleniumで動作しているかどうかをテストするには、 ex02.py 次のようなPythonスクリプト:
$ python3ex01。pyGoogle Chrome Webブラウザは自動的にGoogle.comにアクセスし、5秒後に自動的に閉じます。これが発生した場合は、Selenium FirefoxGeckoドライバーが正しく機能しています。
Seleniumを使用したWebスクレイピングの基本
これからはFirefoxのWebブラウザを使用します。必要に応じて、Chromeを使用することもできます。
基本的なSeleniumPythonスクリプトは、以下のスクリーンショットに示されているスクリプトのようになります。
まず、Seleniumをインポートします webdriver から セレン モジュール。
次に、をインポートします キー から selenium.webdriver.common.keys 。これは、Seleniumから自動化するブラウザーにキーボードのキー押下を送信するのに役立ちます。
次の行は、 ブラウザ Firefox Gecko Driver(Webdriver)を使用するFirefoxWebブラウザーのオブジェクト。このオブジェクトを使用して、Firefoxブラウザのアクションを制御できます。
ウェブサイトまたはURLをロードするには(ウェブサイトをロードします https://www.duckduckgo.com )、 得る() の方法 ブラウザ Firefoxブラウザ上のオブジェクト。
Seleniumを使用すると、テストを記述し、Webスクレイピングを実行し、最後に、 終了する() の方法 ブラウザ 物体。
上記は、SeleniumPythonスクリプトの基本的なレイアウトです。これらの行は、すべてのSeleniumPythonスクリプトで記述します。
例1:Webページのタイトルを印刷する
これは、Seleniumを使用して説明する最も簡単な例です。この例では、アクセスするWebページのタイトルを印刷します。
新しいファイルを作成します ex04.py 次のコード行を入力します。
からセレン輸入webdriverからセレン。webdriver。一般。キー 輸入キー
ブラウザ=webdriver。Firefox((実行可能パス='./drivers/geckodriver')。
ブラウザ。得る((「https://www.duckduckgo.com」)。
印刷((「タイトル:%s」%ブラウザ。題名)。
ブラウザ。終了する(()。
完了したら、ファイルを保存します。
ここでは、 browser.title 訪問したウェブページのタイトルにアクセスするために使用され、 print() 関数は、コンソールでタイトルを印刷するために使用されます。
実行後 ex04.py スクリプト、それはすべきです:
1)Firefoxを開きます
2)目的のWebページをロードします
3)ページのタイトルを取得します
4)コンソールにタイトルを印刷します
5)そして最後にブラウザを閉じます
ご覧のとおり、 ex04.py スクリプトは、コンソールにWebページのタイトルをうまく印刷しました。
$ python3ex04。py例2:複数のWebページのタイトルを印刷する
前の例と同様に、同じ方法を使用して、Pythonループを使用して複数のWebページのタイトルを印刷できます。
これがどのように機能するかを理解するには、新しいPythonスクリプトを作成します ex05.py スクリプトに次のコード行を入力します。
からセレン輸入webdriverからセレン。webdriver。一般。キー 輸入キー
ブラウザ=webdriver。Firefox((実行可能パス='./drivers/geckodriver')。
URL= [「https://www.duckduckgo.com」、 「https://linuxhint.com」、 「https://yahoo.com」]
にとってURLのURL:
ブラウザ。得る((URL)。
印刷((「タイトル:%s」%ブラウザ。題名)。
ブラウザ。終了する(()。
完了したら、Pythonスクリプトを保存します ex05.py 。
ここでは、 URL listは、各WebページのURLを保持します。
に にとって ループは、を反復処理するために使用されます URL リストアイテム。
各反復で、Seleniumはブラウザにアクセスするように指示します URL Webページのタイトルを取得します。 SeleniumがWebページのタイトルを抽出すると、コンソールに印刷されます。
Pythonスクリプトを実行する ex05.py 、および各Webページのタイトルが URL リスト。
$ python3ex05。pyこれは、Seleniumが複数のWebページまたはWebサイトで同じタスクを実行する方法の例です。
例3:Webページからのデータの抽出
この例では、Seleniumを使用してWebページからデータを抽出するための基本を示します。これは、Webスクレイピングとも呼ばれます。
まず、 Random.org Firefoxからのリンク。以下のスクリーンショットにあるように、ページはランダムな文字列を生成するはずです。
Seleniumを使用してランダムな文字列データを抽出するには、データのHTML表現も知っている必要があります。
ランダム文字列データがHTMLでどのように表されるかを確認するには、ランダム文字列データを選択し、マウスの右ボタン(RMB)を押して、をクリックします。 要素の検査(Q) 、下のスクリーンショットに記載されているように。
データのHTML表現はに表示される必要があります インスペクター 下のスクリーンショットでわかるように、タブ。
をクリックすることもできます 検査アイコン( )。 ページからデータを検査します。
検査アイコン()をクリックし、抽出するランダムな文字列データにカーソルを合わせます。データのHTML表現は以前と同じように表示されます。
ご覧のとおり、ランダムな文字列データはHTMLでラップされています にとって タグを付け、クラスを含みます データ 。
抽出するデータのHTML表現がわかったので、Seleniumを使用してデータを抽出するPythonスクリプトを作成します。
新しいPythonスクリプトを作成します ex06.py スクリプトに次のコード行を入力します
からセレン輸入webdriverからセレン。webdriver。一般。キー 輸入キー
ブラウザ=webdriver。Firefox((実行可能パス='./drivers/geckodriver')。
ブラウザ。得る(('https://www.random.org/strings/?num=1&len=20&digits
= on&upperalpha = on&loweralpha = on&unique = on&format = html&rnd = new ')。
dataElement=ブラウザ。find_element_by_css_selector(('pre.data')。
印刷((dataElement。文章)。
ブラウザ。終了する(()。
完了したら、を保存します ex06.py Pythonスクリプト。
ここでは、 browser.get() メソッドは、FirefoxブラウザにWebページをロードします。
NS browser.find_element_by_css_selector() メソッドは、ページのHTMLコードで特定の要素を検索し、それを返します。
この場合、要素は次のようになります。 pre.data 、 NS にとって クラス名を持つタグ データ 。
以下、 pre.data 要素はに保存されています dataElement 変数。
次に、スクリプトは選択されたテキストコンテンツを出力します pre.data エレメント。
あなたが実行する場合 ex06.py Pythonスクリプト。下のスクリーンショットに示すように、Webページからランダムな文字列データを抽出する必要があります。
$ python3ex06。pyご覧のとおり、実行するたびに ex06.py Pythonスクリプトは、Webページから別のランダムな文字列データを抽出します。
例4:Webページからデータのリストを抽出する
前の例では、Seleniumを使用してWebページから単一のデータ要素を抽出する方法を示しました。この例では、Seleniumを使用してWebページからデータのリストを抽出する方法を示します。
まず、 random-name-generator.info FirefoxWebブラウザから。以下のスクリーンショットに示すように、このWebサイトでは、ページをリロードするたびに10個のランダムな名前が生成されます。私たちの目標は、Seleniumを使用してこれらのランダムな名前を抽出することです。
名前リストを詳しく調べると、順序付きリストであることがわかります( 死ぬ 鬼ごっこ)。 NS 死ぬ タグにはクラス名も含まれます nameList 。各ランダム名はリストアイテムとして表されます( で タグ)内部 死ぬ 鬼ごっこ。
これらのランダムな名前を抽出するには、新しいPythonスクリプトを作成します ex07.py スクリプトに次のコード行を入力します。
からセレン輸入webdriverからセレン。webdriver。一般。キー 輸入キー
ブラウザ=webdriver。Firefox((実行可能パス='./drivers/geckodriver')。
ブラウザ。得る(('http://random-name-generator.info/')。
nameList=ブラウザ。find_elements_by_css_selector(('ol.nameList li')。
にとって名前のnameList:
印刷((名前。文章)。
ブラウザ。終了する(()。
完了したら、を保存します ex07.py Pythonスクリプト。
ここでは、 browser.get() メソッドは、Firefoxブラウザにランダムな名前ジェネレータのWebページをロードします。
NS browser.find_elements_by_css_selector() メソッドはCSSセレクターを使用します ol.nameList li すべてを見つけるために で 内部の要素 死ぬ クラス名を持つタグ nameList 。選択したものをすべて保存しました で の要素 nameList 変数。
に にとって ループは、を反復処理するために使用されます nameList のリスト で 要素。各反復で、 で 要素はコンソールに印刷されます。
あなたが実行する場合 ex07.py Pythonスクリプト。下のスクリーンショットに示すように、Webページからすべてのランダムな名前を取得して画面に出力します。
$ python3ex07。pyスクリプトを2回実行すると、下のスクリーンショットに示すように、ランダムなユーザー名の新しいリストが返されます。
例5:フォームの送信–DuckDuckGoでの検索
この例は、最初の例と同じくらい単純です。この例では、DuckDuckGo検索エンジンにアクセスして用語を検索します セレン本社 Seleniumを使用します。
まず、訪問 DuckDuckGo検索エンジン FirefoxWebブラウザから。
検索入力フィールドを調べる場合は、IDが必要です。 search_form_input_homepage 、下のスクリーンショットでわかるように。
次に、新しいPythonスクリプトを作成します ex08.py スクリプトに次のコード行を入力します。
からセレン輸入webdriverからセレン。webdriver。一般。キー 輸入キー
ブラウザ=webdriver。Firefox((実行可能パス='./drivers/geckodriver')。
ブラウザ。得る((「https://duckduckgo.com/」)。
searchInput=ブラウザ。find_element_by_id(('search_form_input_homepage')。
searchInput。send_keys((「セレン本社」+キー。入力)。
完了したら、を保存します ex08.py Pythonスクリプト。
ここでは、 browser.get() メソッドは、FirefoxWebブラウザーにDuckDuckGo検索エンジンのホームページをロードします。
NS browser.find_element_by_id() メソッドは、IDを持つ入力要素を選択します search_form_input_homepage に保存します searchInput 変数。
NS searchInput.send_keys() メソッドは、キー押下データを入力フィールドに送信するために使用されます。この例では、文字列を送信します セレン本社 、を使用してEnterキーを押します。 Keys.ENTER 絶え間ない。
DuckDuckGo検索エンジンがEnterキーを受け取るとすぐに( Keys.ENTER )、結果を検索して表示します。
を実行します ex08.py 次のようなPythonスクリプト:
$ python3ex08。pyご覧のとおり、FirefoxWebブラウザーはDuckDuckGo検索エンジンにアクセスしました。
自動的に入力しました セレン本社 検索テキストボックスに入力します。
ブラウザがEnterキーを受け取ったらすぐに( Keys.ENTER )、検索結果を表示しました。
例6:W3Schools.comでフォームを送信する
例5では、DuckDuckGo検索エンジンのフォーム送信は簡単でした。あなたがしなければならなかったのはEnterキーを押すことだけでした。ただし、これはすべてのフォーム送信に当てはまるわけではありません。この例では、より複雑なフォーム処理を示します。
まず、 W3Schools.comのHTMLフォームページ FirefoxWebブラウザから。ページが読み込まれると、サンプルフォームが表示されます。これは、この例で送信するフォームです。
フォームを調べると、 ファーストネーム 入力フィールドにはIDが必要です fname 、 NS 苗字 入力フィールドにはIDが必要です lname 、 そしてその 送信ボタン 持っている必要があります タイプ 参加する 、下のスクリーンショットでわかるように。
Seleniumを使用してこのフォームを送信するには、新しいPythonスクリプトを作成します ex09.py スクリプトに次のコード行を入力します。
からセレン輸入webdriverからセレン。webdriver。一般。キー 輸入キー
ブラウザ=webdriver。Firefox((実行可能パス='./drivers/geckodriver')。
ブラウザ。得る((「https://www.w3schools.com/html/html_forms.asp」)。
fname=ブラウザ。find_element_by_id(('fname')。
fname。クリア(()。
fname。send_keys((「Shahriar」)。
lname=ブラウザ。find_element_by_id(('lname')。
lname。クリア(()。
lname。send_keys((「ショボン」)。
submitButton=ブラウザ。find_element_by_css_selector(('input [type =' submit ']')。
submitButton。send_keys((キー。入力)。
完了したら、を保存します ex09.py Pythonスクリプト。
ここでは、 browser.get() メソッドは、FirefoxWebブラウザーでW3schoolsHTMLフォームページを開きます。
NS browser.find_element_by_id() メソッドは、IDによって入力フィールドを検索します fname と lname そしてそれはそれらをに保存します fname と lname それぞれ変数。
NS fname.clear() と lname.clear() メソッドはデフォルトの名をクリアします(John) fname 値と姓(Doe) lname 入力フィールドからの値。
NS fname.send_keys() と lname.send_keys() メソッドタイプ Shahriar と ショボン の中に ファーストネーム と 苗字 それぞれ入力フィールド。
NS browser.find_element_by_css_selector() メソッドはを選択します 送信ボタン フォームのとそれをに保存します submitButton 変数。
NS submitButton.send_keys() メソッドはEnterキーを押します( Keys.ENTER )に 送信ボタン フォームの。このアクションはフォームを送信します。
を実行します ex09.py 次のようなPythonスクリプト:
$ python3ex09。pyご覧のとおり、フォームは正しい入力で自動的に送信されています。
結論
この記事は、Python 3でのSeleniumブラウザーのテスト、Web自動化、およびWebスクレイピングライブラリーの使用を開始するのに役立ちます。詳細については、 公式のSeleniumPythonドキュメント 。