Selenium

Python

seleniumとwebdriverのインストール

pip install --upgrade selenium
pip install chromedriver-binary==126.0.6478.126.0
pip install webdriver_manager # webdriverを自動更新したい場合はインストールすること

webdriverを自動更新したい場合(webdriver_mangerを使用)

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(ChromeDriverManager().install())

Open Page

driver.get('https://xxx')

Find Element

driver.find_element(By.ID, 'enter')
driver.find_element(By.CLASS_NAME, 'enter')
driver.find_element(By.TAG_NAME, 'iframe')
driver.find_element(By.XPath, '//input')

xxx = driver.find_element(By.ID, 'xxx')
yyy = xxx.find_element(By.ID, 'yyy')

Find Elements

ps = driver.find_elements(By.TAG_NAME, 'p')
for p in ps:
  honbun += p.text

Find Elements 2

ps = driver.find_elements(By.TAG_NAME, 'p')
for i in range(len(ps)):
  ps[i].click()

If not Elements

xxx = driver.find_element(By.XPATH, 'xxx')
if len(xxx) > 0:
  print('要素がありません')

Get Text

driver.find_element(By.ID, 'xxx').text

Click

driver.find_element(By.CLASS_NAME, 'xxx'),click()

Time.sleep

time.sleep(10)はあまりよくない。確実に10秒待つ羽目になるから。

WebDriverWaitならば必要な分しか待たないので便利

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
driver.get('https://noc.syosetu.com/')
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "myDynamicElement")))

Screenshot

driver.get_screenshot_as_file('/screenshot/xxx.png')

Drag & Drop

from selenium.webdriver.common.action_chains import ActionChains

source = driver.find_element(By.ID, 'source')
target = driver.find_element(By.ID, 'target')

ActionChains(driver).drag_and_drop(element, target).perform()

エラー 1

ターミナル上で次の文言が出てそれ以降動かなくなった
Created TensorFlow Lite XNNPACK delegate for CPU.
X delegate for CPUとは「XがCPUの代わりに権利をもらったよ」という意味
XNNPACKというライブラリを利用してTensorFlow Liteという機械学習モデルを実行することで、CPU上で高速化処理を行う仕組みがある
このエラーで動かなくなったら手動でブラウザをページ遷移させると動くようになる

エラー 2

ターミナル上で次の文言が何回も出て それから↑のError1につながる
page_load_metrics_update_dispatcher.cc(179)] Invalid first_paint 秒数 for first_image_paint
これはChromeのバージョンとChromeDriverのバージョンが合っていないと起きる警告文
ChromeDriverをマニュアルインストールしてSeleniumをアップデートしたら表示されなくなった

エラー3

解決策(https://ja.stackoverflow.com/questions/99819/python-chromedriver-%E3%81%8C%E6%98%A8%E6%97%A5%E3%81%BE%E3%81%A7%E6%AD%A3%E5%B8%B8%E3%81%AB%E5%8B%95%E4%BD%9C%E3%81%97%E3%81%A6%E3%81%84%E3%81%9F%E3%81%8C-%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E5%87%BA%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F

OSError: [WinError 193] %1 は有効な Win32  アプリケーションではありません。

Manual Install Chrome Driver

pip install chromedriver-binary==101.0.4951.41
BACK