Python Selenium スクレイピング プログラミング

【Python】Seleniumでスクレイピングする際によく使うメソッドのまとめ

この記事は約5分で読めます。

 

こんにちは、ミナピピン(@python_mllover)です!

 

今回は案件でseleniumを使ったスクレイピングコードを作成する際によく使用するメソッドなどを自分用にまとめておきます。

 

Webページ上のリンクの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を使う

 

driver.page_source

 

これで 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()

 

フレームの切り替え

 

# 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/

 

終わり~参考書籍紹介

 

 

 

 

コメント

タイトルとURLをコピーしました