PythonでSeleniumする

はじめに

PythonとSeleniumを使いながらちょっぱやでブラウザ操作の自動化をしてみます。Seleniumを使うとログインしたりスクショを撮ったり等の操作を自動化出来るので便利です。

準備

PythonとかChromeブラウザはインストールされている前提です。

SeleniumとChromeブラウザをプログラムから操作するためのChromeDriverをインストールします。

$ pip install selenium
$ pip install chromedriver-binary

Seleniumをする

基本的にスクレイピングは要素を取得してから入力をしたり、クリックアクションを実行したりします。要素の取得方法にはIDやクラス名、属性など色々な方法があります。ここが一番腕の見せ所です。

今回は一番手っ取り早い方法であるXPathでの指定をしています。XPathはディベロッパツールの検証から、取得したい要素の上で右クリックを押して「Copy」→「Copy XPath」とするとクリップボードにコピーされます。

取得したXPathはそのまま下のコードのfind_element_by_xpath()の引数に貼り付ければ使える筈です。

from selenium import webdriver
driver = webdriver.Chrome("/usr/local/bin/chromedriver")

# Login
driver.get("[ログインページURL]")
username = driver.find_element_by_xpath("[usernameフォームのXPath]")
username.send_keys("[アカウント名]")
password = driver.find_element_by_xpath("[passwordフォームのXPath]")
password.send_keys("[パスワード]")
login_button = driver.find_element_by_xpath("[ログインボタンのXPath]")
login_button.click()

# 後続の処理を記述していく

driver.close()

上記のPythonコードを実行するとChromeブラウザが立ち上がり勝手にログインをしてくれた後にブラウザを閉じて終了します。ちなみにGUI操作は通常よりリソースを食うのでdriver.close()は可能な限りした方が良いです。

ログインした後はスクリーンショットを撮ったり、別のボタンを押したりプログラムしたいブラウザ操作を自由に記述して下さい。

諸注意

JavaScriptで動的にページを生成しているサイトなどは、Seleniumが処理を追い越してしまい上手くスクレイピング出来ないことがあります。その時は待機時間を設定する必要があります。

レスポンシブなサイトについてもウィンドウサイズによって生成されるDOMが変化することがあるので、要素が取得出来ない時はウィンドウサイズの調整をする事も考慮に入れると良いです。

またヘッドレスブラウザを使用する場合の注意ですが、JavaScriptによる動的なDOM生成が行われず静的なHTMLを取得してしまうことがあるので特殊な対応が必要になることもあります。

終わりに

ヘッドレスブラウザでのスクレイピングが出来るとかなり便利です。Lambdaから呼べるのでバックグラウンドジョブとして定期実行やSNSとの連携が可能になります。ただしヘッドレスブラウザでのスクレイピングはサイトによっては結構難しいです。

またPythonコードであってもシェルスクリプトであっても拡張子.app付けておけばAlfredからfuzzy検索して楽に実行出来ておすすめです。詳細はこちらをご参考下さい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA