ブログ管理者のP.Hです!
今回はPythonとSeleniumでスクレイピング(ブラウザ操作を自動化する方法)する方法を紹介したいと思います。Seleniumは、Webアプリの自動テストで使われていましたが、現在ではWebページの情報を自動収集したり、作業を自動化する時によく使われます。今回はWindowsでChromeを操作する方法を紹介します。
それでは、PythonとSeleniumでChromeを自動操作してみましょう。
※下記の操作はWindowsで行っています。
動作環境の準備
Seleniumのインストール
コマンドプロンプトで下記コマンドを実行します。これでseleniumのインストールは完了です。
> pip install selenium
Chromeのバージョン確認
下記の写真の通りにボタンをクリックして、バージョンを確認します。WebDriverのインストール時に必要な情報になります。
WebDriverのインストール
seleniumでブラウザを自動操作するには、WebDriverというモジュールが必要になります。下記のWebページからWebDriverをダウンロードしてください。解凍したchromedriver.exeがWebDriverになります。
ダウンロードするときに、注意する点が2つあります。
注意事項
- 上記で確認したChromeのバージョンと同じバージョンのWebDriverをダウンロードしてください。
- Path(環境変数)を設定する必要があります。任意の場所にchromedriver.exeを格納する場合は、環境変数を設定してください。よくわからない場合は、C:\Windows\System32\にchromedriver.exeをコピーしてください。
Seleniumの基本
Seleniumは、Web上の要素(ボタンやテキストボックス等)を指定して操作をします。要素を指定する方法は、主に以下の3つです。
- ID名 ⇒ 同じid名を複数の要素に設定することはできません。id名で指定すれば、要素はかならず特定されます。id名で指定する方法がもっとも確実です。
- Class名 ⇒ 複数の要素が同じクラス名である可能性があります。
- Xpath ⇒ かならず1つの要素に決まりますが、Webのデザイン(構成)が変わった場合は、Xpathが変わる可能性があります。Webデザインの構成が変わる可能性があるときは、注意が必要です。
これ以外にもありますが、今回はこの3つを紹介します。ID名、Class名、Xpathの調べ方については下記で説明します。
サンプルコード
下記がサンプルコードになります。下記の動作をします。
- 青丸のテキストをID指定で取得
- 緑丸のテキストをClass名指定で取得
- 黄丸のテキストをXpath指定で取得
- 桃丸の入力ボックスに"text"と入力して、Enterキーを押す
コード内にコメントを記載しましたので、参考にしながら見てください。
from selenium import webdriver from selenium.webdriver.common.keys import Keys import time # WebDriverの読み込み driver = webdriver.Chrome() # 指定している要素が表示されるまでの待ち時間(秒) # ページの切り替わり等で要素が表示されるまで自動的に待ってくれる driver.implicitly_wait(10) # get(url) urlのページを表示 driver.get('https://www.google.com/') # 現在ページのurlを取得 print('URL: ', driver.current_url) # 現在ページのタイトル print('Title: ', driver.title) # IDで指定した要素の文字列取得 val = driver.find_element_by_id('hptl').text print('Element ID: ', val) # クラス名で指定した要素の文字列取得 val = driver.find_element_by_class_name('gb_g').text print('Element Class: ',val) # Xpathで指定した要素の文字列取得 # Xpathはlist型に格納されるようで、[0]が必要 val = driver.find_elements_by_xpath("//*[@id='gbw']/div/div/div[1]/div[2]/a")[0].text print('Element Xpath: ',val) # Xpathで指定した要素(検索入力ボックス)を取得 element = driver.find_elements_by_xpath("//*[@id='tsf']/div[2]/div[1]/div[1]/div/div[2]/input")[0] time.sleep(1) # 要素に"test"というテキストを入力 element.send_keys("test") # Enterキーを押す element.send_keys(Keys.ENTER) # Chrome閉じる driver.close() driver.quit()
要素の調べ方
上記で要素を取得するために、ID、Class名、Xpathを使用しています。これを調べる方法を説明したいと思います。
自分の操作したい要素(青丸)を右クリックし、検証ボタン(緑丸)を押します。Chromeのデベロッパーツールが開きます。
デベロッパーツールのElementsタブで、要素のIDやClass名が確認できます。これを使用して、Seleniumで要素を操作します。
Xpathを調べたい場合は、デベロッパーツールで調べたい要素の部分で右クリックし、Copy ⇒ Copy XPathをクリックします。クリップボードにXPathがコピーされますので、エディタに貼り付けるとXpathを知ることができます。
# XPathをPythonコードで使用する時は、ダブルクォーテーションをシングルクォーテーションに変えて使用してください。 //*[@id="tsf"]/div[2]/div[1]/div[1]/div/div[2]/input ↓ //*[@id='tsf']/div[2]/div[1]/div[1]/div/div[2]/input
Seleniumの使い方を紹介しました。今回の説明はSeleniumの機能のごく一部ですが、基本がわかってしまえば後は応用できます。pythonで書いているので、pythonでエクセルの値を読み込んで、Webに入力することもできます。Webページのソースを取得するなんてこともできます。Seleniumを使えば、Webのほとんどの操作を自動化できますので、使ってみてはいかがでしょうか。
最後にSeleniumの使い方で参考になったページを紹介しておきます。
Selenium webdriverよく使う操作メソッドまとめ - Qiita
http:// https://kurozumi.github.io/selenium-python/api.html
以上でSeleniumの説明を終わります。