この記事が役立つかもしれない状況
- スクレイピングのためにwebブラウザを自動で開きたい
- webページのクリック、テキスト入力、フォーム送信を自動化したい
使用するライブラリ
selenium (ver 4.1.2)
webdriver_manager (の、ChromeDriverManagerモジュール)
作業環境
MacBook Air (m1チップ)
os: Monterey ver.12.2.1
python 3.9.7
構文
インポート
- seleniumの中のwebdriverモジュールとwebdriver_managerの中のChromeDriverManagerをインポートする
- seleniumのver4以降ではserviceを使うように推奨される。(下のコードの2行目)
- webdriverはブラウザを操作する機能があり、webdriver_managerは操作するブラウザのバージョンに適したwebdriverをその都度ダウンロードする機能がある。
- webdrivr_managerにはChrome以外のブラウザを操作する用のモジュールもある
from selenium import webdriver
from selenium.webdriver.chrome import service
from webdriver_manager.chrome import ChromeDriverManager
ブラウザ立ち上げ
- executable_pathとserviceはそれぞれキーワード引数なので(用語の使い方あってますか?)別の文字列にすることはできない
- ChromeDriverManager().install()はインストールしてきたwebdriverのパスを返す。これをexecutable_pathに格納してserviceモジュールに渡し、返り値をchrome_serviceに代入してwebdriver.Chromeに渡す
chrome_service = service.Service(executable_path=ChromeDriverManager().install())
browser=webdriver.Chrome(service=chrome_service)
- 以下の例ではこのbrowserに対してさまざまな操作を行う
ページ読み込み
- 下の例ではqiitaのトップページに飛ぶ
browser.get("https://qiita.com/")
ページ内の要素(ボタンなど)をXpathで取得する
- あらかじめseleniumのByモジュールをインポートしておく
from selenium.webdriver.common.by import By
- 下の例ではelementにページ内の要素を代入している
element = browser.find_element(By.XPATH,"要素のフルXPATHをコピーしてきてここに貼り付ける")
クリック
- ボタンなどの要素をelementに代入しておいてクリックする
element.click()
実行時のコマンドがpythonなのかpython3なのかは、seleniumをどちらにインストールしているかによって変わることに注意。
※自分はここで3日間くらい詰まったので
その他知っておくと便利な関数
文字列の入力
- 下の例ではelementに代入した検索ボックスに、”hogehoge”と入力している
element = browser.find_element(By.XPATH,"検索ボックスのフルXPATHをコピーしてきてここに貼り付ける")
element.send_keys("hogehoge")
一時停止
自分の環境ではseleniumでブラウザ操作を行うと操作終了した瞬間に自動でブラウザが落ちてしまうので、動きが目で見てわかりにくいという問題がありました。そこで、終了する前に5秒間のポーズを設けることで操作が完了する様子を視覚的に確認していました。
from time import sleep
sleep(5)
参考
udemyのこちらのコースを参考にしています。実践例も交えて詳しく解説されていてわかりやすいのでおすすめです
https://www.udemy.com/course/python-kaizen/
↓ @yagaodekawasuさんによるこちらの記事を参考にさせていただきました