Seleniumでサイト上の検索機能を使ってアイテムを表示する方法
Seleniumの導入
Seleniumのライブラリインストール、Chromedriverのダウンロードを行ってください。
詳しくはこちらの記事ご参照ください
検索ページを開く
今回はYahoo!のログインページでログインすることを実践してみたいと思います。
from selenium import webdriver
driver_pass = 'C:/Users/XXXXX/chromedriver.exe' #Chromedriverの保存先を指定
#v3系の場合
driver = webdriver.Chrome(executable_path = driver_path)
#v4以降の場合
service = Service(executable_path = driver_path)
driver = webdriver.Chrome(service = service)
url = 'https://www.amazon.co.jp/' #対象のURLを指定
res = driver.get(url)
検索ボックスと検索ボタンを探す
Chromeで対象ページを開きF12を押すとデベロッパーツールモードが起動します。
デベロッパーツールの左上の矢印アイコンをクリックすると、ページ内の要素を選択できるようになり、選択した要素がデベロッパーツール内のソースコードで選択されます。
今回値を入力したい検索ボックスの入力欄を選択し、デベロッパーツール上のソースコードを右クリック。
「コピー > 完全なXPathをコピー」を選択。
入力欄を選択する際は「<input ~~~」ボタンの場合は「<button ~」となるように要素そのものを選択するようにしましょう。要素のラッパーとなるdivなどを選択しないように注意。
検索ボックスのXPathは下記のようになり
/html/body/div[1]/header/div/div[1]/div[2]/div/form/div[3]/div[1]/input
同様にしてボタンのXPathも取得する
/html/body/div[1]/header/div/div[1]/div[2]/div/form/div[4]/div/span/input
値を入力、ボタンをクリックする
seleniumの仕様が変わり、バージョンが3系と4系で記述方法が変わります。
Seleniumのバージョンを確認する場合は「pip show」で表示されます
pip show selenium
# Name: selenium
# Version: 4.7.2
# Summary:
# Home-page: https://www.selenium.dev
バージョンが3系の場合は「.find_element_by_xpath(~~)」を、4系の場合は「.find_element(By.XPATH, ~~~)」を使います。
今回は4系のバージョンのため後者を利用しました。
Keyword = 'データ分析' #指定のキーワードを設定
#ver3系の場合
from selenium.webdriver.support.select import Select
elem_Keyword = brouser.find_element_by_xpath("/html/body/login-page/div/main/login/section/div/div/div/dl/dd[2]/input")
elem_Keyword.send_keys(login_pass)
driver.find_element_by_xpath("/html/body/div[1]/div[2]/div/div[2]/div[1]/div/div/fieldset/form/div/div[1]/div[4]/div/button").click()
#ver4系の場合
from selenium.webdriver.common.by import By
elem_Keyword = driver.find_element(By.XPATH, "/html/body/div[1]/div[2]/div/div[2]/div[1]/div/div/fieldset/form/div/div[1]/div[4]/dl/dd/input")
elem_Keyword.send_keys(login_id)
driver.find_element(By.XPATH, "/html/body/div[1]/div[2]/div/div[2]/div[1]/div/div/fieldset/form/div/div[1]/div[4]/div/button").click()
入力欄のXPathを「.find_element」でページ上の要素を選択し、その要素に対して「.send_keys(~~)」でキーワードを入力します。
同じくボタンのXPathを選択し、「.click()」でクリックの動作をします。
フルXPathが長いのでなんだかややこしそうな内容になっていますが単純化すると下記の通りで簡単な内容になります。
elem_Keyword = driver.find_element(By.XPATH, "input_XPath")
elem_Keyword.send_keys(login_id)
driver.find_element(By.XPATH, "button_XPath").click()
成功すると下記のように検索結果一覧ページに遷移します。