Selenium4の基本


# Selenium4の基本
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome import service as fs 
from time import sleep
 
DRIVER_PATH = 'lib\\chromedriver.exe'
 
# ドライバー指定でChromeブラウザを開く
chrome_service = fs.Service(executable_path=DRIVER_PATH)
driver = webdriver.Chrome(service=chrome_service)
 

driver.get('https://youtu.be/Gwkx8DIWxsc') # Webサイトのページにアクセス
print(driver.title) # 現在のページタイトルを取得する
print(driver.current_url) #現在ページのURLを取得する

sleep(5) #5秒スリープ 非推奨な方法 WebDriverWaitを使う方法が良いようだ。

search_box = driver.find_element(By.NAME, 'search_query') #検索テキストボックス要素を取得
search_box.send_keys("ナスのペットボトル実験")#検索テキストボックス要素にキーワードを入力
sleep(2)

search_btn = driver.find_element(By.ID, 'search-icon-legacy') # 検索ボタン要素を取得
search_btn.send_keys(Keys.RETURN) # 検索ボタン要素にてEnterキーボタンの押下イベントを発動

sleep(5)

# タグを指定して要素リストを取得する
textElms = driver.find_elements(By.TAG_NAME, 'yt-formatted-string')
for e in textElms:
    print(e.text) # 要素のテキストを取得(inner html)

print('Success!')

# ブラウザを閉じる
driver.quit()

	

Selenium4の基本2



WebDriverWait 待機の種類

implicitly_wait

暗黙的な待機時間。 要素が見つかるまでの最大待機時間。秒単位で指定する。最初のドライバ読込直後に設定すると良い。
driver.implicitly_wait(10) # 要素が見つかるまで最大10秒待機する

alert_is_present

Alertが表示されるまで待機
elm = WebDriverWait(driver, 15).until(EC.alert_is_present())
参考:Selenium4のalertダイアログ制御 | アラート待機、アラートテキスト取得

element_to_be_clickable

ボタン要素がクリック可能になるまで待機
未検証

visibility_of_element_located

指定要素が表示されるまで待機

invisibility_of_element_located

指定要素が非表示になるまで待機

text_to_be_present_in_element

指定要素のテキストが表示されるまで待機

presence_of_element_located

指定要素が存在するようになるまで待機

presence_of_all_elements_located

# ページ上のすべての要素が読み込まれるまで待機(15秒でタイムアウト判定)

Selenium3とSelenium4の違い

https://www.selenium.dev/documentation/webdriver/getting_started/upgrade_to_selenium_4/

ブラウザバック、 ブラウザの次へボタン、ブラウザのリロード



from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome import service as fs 
from time import sleep

from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

def document_initialised(driver):
    return driver.execute_script("return initialised")
 
DRIVER_PATH = 'lib\\chromedriver.exe'
 
chrome_service = fs.Service(executable_path=DRIVER_PATH)
driver = webdriver.Chrome(service=chrome_service)

driver.implicitly_wait(10) # 暗黙的待機時間(秒)。要素が見つかるまでの最大待機時間
wait = WebDriverWait(driver, 10)
 
driver.get('https://youtu.be/Gwkx8DIWxsc') # Webサイトのページにアクセス


driver.back() # ブラウザバック
driver.forward() # ブラウザの次へボタン
driver.refresh() # ブラウザを更新(ブラウザのリロード)


Selenium4のalertダイアログ制御 | アラート待機、アラートテキスト取得

alertダイアログが表示されるページからスクレイピング。
alertの待機、alertダイアログのボタン押下、alertダイアログのテキストを取得。

サンプルWEBサイト。4秒後にalertダイアログが表示される。
https://amaraimusi.sakura.ne.jp/selenium_scraping_demo/a001/alert_is_present/demo.html

GitHub
https://github.com/amaraimusi/selenium_scraping_demo/blob/main/a001/alert_is_present/demo4.py

ソースコード


# Selenium4のalertダイアログ制御 | アラート待機、アラートテキスト取得
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome import service as fs 
from time import sleep
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
 
DRIVER_PATH = 'C:¥¥Users¥¥user¥¥git¥¥selenium_scraping_demo¥¥lib¥¥chromedriver.exe'
 
# ドライバー指定でChromeブラウザを開く
chrome_service = fs.Service(executable_path=DRIVER_PATH)
driver = webdriver.Chrome(service=chrome_service)
driver.implicitly_wait(10) # 暗黙的待機時間(秒)。要素が見つかるまでの最大待機時間

driver.get('https://amaraimusi.sakura.ne.jp/selenium_scraping_demo/a001/alert_is_present/demo.html') # Webサイトのページにアクセス

elm1 = driver.find_element(By.ID, 'test1')
print(elm1.text)

alert = WebDriverWait(driver, 15).until(EC.alert_is_present()) # アラートが表示されるまで待機(この例では最大15秒まで待機)
alert_text = alert.text # alertのテキストを取得
print(alert_text)
alert.accept() # alertのボタンをクリック
sleep(1) # alert_is_presentだけでは不十分。1秒だけスリープする必要がある。

elm1 = driver.find_element(By.ID, 'test1')
print(elm1.text)

elm1 = driver.find_element(By.ID, 'test2')
print(elm1.get_attribute('src'))

print('Success!')

driver.quit() # ブラウザを閉じる

	

要素の属性を取得 | get_attribute


elm = driver.find_element(By.ID, 'neko_id')
src = elm.get_attribute('src')
href = elm.get_attribute('href')
value = elm.get_attribute('value')