スクレイピング Seleniumの利用方法

前回、自動操作としてPythonのSeleniumの環境作成まで紹介しましたが、
今回は実際に自動操作する上で必要となるメソッドを紹介します。
全てを紹介することは出来ませんので、よく使われる部分をピックアップしています
その他のメソッドは、以下のサイトを参照してください

https://www.seleniumqref.com/api/webdriver_abc_python.html

ページの操作

ブラウザの自動操作の基本となる、ブラウザを開く、ページにアクセスする、ブラウザを終了するメソッドは以下の通りです。

ブラウザ起動: driver = webdriver.Chrome()
WEBページにアクセス:driver.get(‘https://www.google.com/’)
ブラウザ終了: driver.quit()

要素の取得

WEBページを開いた後は、そのコンテンツの要素を取得する必要があります。取得する方法はいろんなパターンがありますが、よく利用するものだけ以下に紹介しています。

id属性             driver.find_element_by_id(‘ID’)
class属性     driver.find_element_by_class_name(‘CLASS’)
name属性       driver.find_element_by_name(‘NAME’)
CSSセレクタ  driver.find_element_css_selector(‘CSSセレクタ’)
XPath             driver.find_element_by_xpath(‘XPATH’)

その中でもよく利用するのが、CSSセレクタです。使い方の基本はタブの構成と属性名とを組み合わせて特定の要素を取得します。
また、取得の方法は2種類有り、「find_element」は特定の1つの要素を返しますが、「find_elements」と最後にsがつくと、条件にあった複数の要素をLIST形式で返します。

例として、CSSセレクタで複数要素を取得して、その取得した要素のテキストを表示する場合は以下のように行います。

for element in driver.find_elements_by_css_selector('CSSセレクタ')
    print(element.text)

CSSセレクタの設定次第で柔軟に要素の取得が可能となります。以下のよく使う記述例を紹介します。その他いろいろありますので自分で探してみるのも楽しいと思います。

属性名を含む要素だけ              : タグ名[属性名=”値”] 絞込指定(半角スペース区切り) : タグ名 タグ名
子要素にのみ指定                     : タグ名 > タグ名
最初の要素のみ                         : ul li:first-child
n番目の要素のみ                       : ul li:nth-child(n)

要素の操作

要素を取得することが出来たら、今度はその要素を操作する方法を紹介します。

テキスト取得     element.text
属性値取得         element.get_attribute(“属性名”)
テキスト入力     element.send_keys(“入力する文字列”)
テキスト削除     element.clear()
クリック            element.click()
特殊キー入力     element.send_keys(Keys.ENTER)
エンター                Keys.ENTER
バックスペース     Keys.BACK_SPACE
エスケープ             Keys.ESCAPE
タブ                       Keys.TAB
SELECT要素の選択

Select(element).select_by_value(value値)
Select(element).select_by_index(インデックス)
Select(element).select_by_text(“文字列”)

SELECT要素の選択解除

Select(element).deselect_by_value(value値)
Select(element).deselect_by_index(インデックス)
Select(element).deselect_by_text(“文字列”)
全て選択解除    Select(element).deselect_all()

使えるテクニック

 

HTML要素が表示されるまで待つ方法(例:最長30秒)
selector = 'CSS'
element = WebDriverWait(driver, 30).until(
    EC.visibility_of_element_located((By.CSS_SELECTOR, selector))
)
要素のクリックが効かない場合

JavaScriptを実行させて、クリックをすると動作することがあります

driver.execute_script('arguments[0].click();', element)
ダイアログアラートが出現に対する応答
YESを押す: Alert(driver).accept()
NOを押す:  Alert(driver).dismiss()

https://touch-kun.net/2022/07/12/post-390/

コメントを残す

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


上の計算式の答えを入力してください

CAPTCHA