プログラム関係の備忘録。技術系記事1000記事以上を目指すブログ

Pythonでスクレイピング~Selenium編~

  • 2021年4月18日
  • 2021年4月18日
  • python
  • 181view
  • 0件

はじめに

前回までの記事で、urllib編、BeautifulSoup編、requests編と行ってきましたが、今回はブラウザを使った操作が可能なライブラリSeleniumについてメモしていきます。
このSeleniumを使えば、スクレイピングも然り、GUI部分のテストなんかも自動化が可能になるのでぜひ使えるようになっておきたいライブラリとなります。

実務で使うことを考えるとLinux環境で作ったほうがいいかもしれませんが、ここではWindows10でのSelenium+Pythonの方法をやっていきます。

Seleniumのインストール

pip install selenium

インストール後の一覧を確認

pip freeze -l

ブラウザのドライバインストール

この記事ではChromeを使いますが、他のブラウザで行いたい場合は他のドライバを入れることになります。
https://sites.google.com/a/chromium.org/chromedriver/

1.実装

本ブログ「tech1000+」とGoogleで検索し、検索結果のページをのスクショを撮るプログラム

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

driver = webdriver.Chrome("F:\python_prd\chromedriver\chromedriver.exe")
driver.get("https://google.co.jp")
text = driver.find_element_by_name("q")
text.send_keys("tech1000+")
text.submit()
driver.save_screenshot("save.png")
driver.quit()

結果

解説

seleniumをインポート

from selenium import webdriver

Seleniumに対しドライバのパスを教えてあげる

driver = webdriver.Chrome("*******\chromedriver.exe")

googleにアクセス。
フォーム部分を取得し、「tech1000+」を入力
送信。

driver.get("https://google.co.jp")
text = driver.find_element_by_name("q")
text.send_keys("tech1000+")
text.submit()

スクリーンショットを保存
ブラウザを閉じる。

driver.save_screenshot("save.png")
driver.quit()

上記プログラムを実行すると、ブラウザが動き無事に「save.png」でスクリーンショットが保存されているのが確認できました。

では次は上記と全く同じことをブラウザが開かないように(ヘッドレスモード)でやってみます。

2.ヘッドレスモードでSeleniumを使う

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--headless')

driver = webdriver.Chrome(chrome_options=options,  executable_path="F:\python_prd\chromedriver\chromedriver.exe")
driver.get("https://google.co.jp")
text = driver.find_element_by_name("q")
text.send_keys("tech1000+")
text.submit()
driver.save_screenshot("save.png")
driver.quit()

解説(差分のみ)

オプションを指定し、オプションの引数に「–headless」を追加。
ドライバを読み込む際の引数にオプションを追加する。

from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--headless')

driver = webdriver.Chrome(chrome_options=options,  executable_path="F:\python_prd\chromedriver\chromedriver.exe")

1でやったことと同じことをブラウザを開かずに行うことができました。

さいごに

GUIのテストをコードで作っておけば、テスト作成の工数は若干増えたとしてもリグレッションテストのときなんかに有能さを発揮できそうですね。

他にも、クーロンを設定し任意の情報を定期的に収集したり、自動でツイートしたり、いろいろ思いつきます。

Seleniumで使うことができるメソッドがいろいろあるので、やりたいことと合わせて調べてみるのがオススメです。