Selenium
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
OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。
Manual Install Chrome Driver
pip install chromedriver-binary==101.0.4951.41