こんにちは、ミナピピン(@python_mllover)です!
今回は案件でseleniumを使ったスクレイピングコードを作成する際によく使用するメソッドなどを自分用にまとめておきます。
Contents
Webページ上のaタグ内のリンクURLを取得(属性取得)
HTMLタグの中にあるhref属性のリンクURLテキストなどの属性情報attributeはget_attribute()で取得できます。
例:
.get_attribute("href")
またタグ内にstyleが埋め込んである場合はhrefをstyleに変更するだけです。
.get_attribute("style")
タグ内のテキストデータを取得
Seleniumで指定した要素の中にあるテキスト情報を取得したい場合は.textを使う。
※古いSeleniumのバージョンだとこのメソッドはget_text()で、混同して使用するとNonetype ~~~みたいなエラーになります
関連記事:【Python】Seleniumの.textで要素のテキスト内容が取得できない原因
表示中のページのHTMLデータを取得する
seleniumで表示中のページのHTMLを取得する時には.page_sourceを使う
# 現在のURLを取得する url = driver.page_source print(url) # 'https://xxxxx.com'
これで soup = BeautifulSoup(driver.page_source, ‘html.parser’) とすることでseleniumで表示させているページのhtmlをそのまま取得しjavascriptなどで動的に表示されるコンテンツなどもスクレイピングすることが可能になります。
表示中のページのURLを取得
表示中のページのURLを取得は.current_urlで行えます。
driver.current_url
Webdriverの更新を自動化する
Seleniumの欠点としては普段使いのPCなどで使用するとクロームのバージョンが自動でアップデートされてドライバーのバージョンと合致しなくなりSessionID errorなどが起こりがちなので、ドライバーの更新を自動化しておくのがオススメです
関連記事:【Python】Seleniumで使用するWebDriverの更新を自動化してコードの挙動を安定させる
表示中のページの更新(リロード)
driver.refresh()
ブラウザのサイズを最大化する
#ブラウザのサイズを最大化する driver.maximize_window()
ブラウザサイズ指定
# ブラウザを1200×1000で固定 driver.set_window_size('1200','1000')
フレキシブルなサイトだとブラウザサイズでHTMLの配置が換わることがあるためブラウザサイズは固定したほうがコードの安定性が高くなります。
ページのスクロール
スクロールする方法は色々ありますが、Seleniumからjavascriptを利用してスクロールするのが一番安定性が高い手法だと思われます
# ブラウザをスクロールする driver.execute_script("window.scrollBy(0, 1000);")
追記:効かない場合は下記記事参照
関連記事:Seleniumでページスクロール(window.scrollTo)が効かない時の代替方法
フレームの切り替え
# frameを切り替える(frame名はページ内のframeタグのname属性を指定) driver.switch_to.frame('フレーム名')
古いバージョンだとswitch_to_frame
というメソッドになっているのでそれで実行すると以下のようなエラーになってしまうので注意です。
Message='WebDriver' object has no attribute 'switch_to_frame'
またフレームが複数あって切り替える場合はフレーム内から別のフレームへの移動はno such a element になってしまうので、以下のメソッドでデフォルトの要素に戻る必要があります。
# デフォルトのフレームに戻る driver.switch_to.default_content()
要素をクリックする
Seleniumを介してWebページ上のボタンやチェックボックスやリンクへのクリックは以下のようにその要素を指定した状態で、click()
を実行することで実装できます。
#ボタンをクリックする button = driver.find_element_by_xpath("/html/body/~~/input") button.click()
参考:【2021年版】Python+Seleniumでツイッターに自動でログインしてツイートする
フォームに文字を入力する
フォームへの文字や数値の入力は.send_keys('送信したい情報')
で実装できます。
texts = driver.find_element_by_xpath("/html/body/~~/input") texts.send_keys('テスト')
またフォームの入力欄を元の何も入力されていないクリアな状態にしたい場合は以下のように記述します。
texts = driver.find_element_by_xpath("/html/body/~~/input") texts.clear()
参考:【2021年版】Python+Seleniumでツイッターに自動でログインしてツイートする
セレクトボックスから要素を選択する
from selenium.webdriver.support.select import Select # セレクトボックス dropdown = driver.find_element_by_xpath("/html/body/form/~~/select") select = Select(dropdown) # セレクトボックス2番目の要素を選択 select.select_by_index(1)
参考:https://yuki.world/selenium-select/
ブラウザのスクリーンショットを取得
driver.save_screenshot('result.png')
終わり~参考書籍紹介
コメント
[…] 関連記事:【Python】Seleniumでスクレイピングする際によく使うメソッドのまとめ […]
[…] 関連記事:【Python】Seleniumでのスクレイピングでよく使うサンプルコードまとめ […]
[…] 関連記事:【Python】Seleniumでのスクレイピングでよく使うサンプルコードまとめ […]
[…] 関連記事:【Python】Seleniumでのスクレイピングでよく使うサンプルコードまとめ […]