Open11

selenium調査ログ

Kumamoto-HamachiKumamoto-Hamachi

seleniumってなに

Selenium は Web ブラウザの操作を自動化するためのフレームワーク。

WebDriverとは

ブラウザを横断的なテストの自動化を実現するためのオープンソースツール(ブラウザを操作するための API を公開するモジュール)

Kumamoto-HamachiKumamoto-Hamachi

Remote WebDriver 1

Selenium lets you automate browsers on remote computers if there is a Selenium Grid running on them. The computer that executes the code is referred to as the client computer, and the computer with the browser and driver is referred to as the remote computer or sometimes as an end-node.

クライアントコンピューター:コードを動かしている側
リモートコンピューター/エンドノード:ブラウザとドライバーがいる側

https://www.selenium.dev/ja/documentation/webdriver/drivers/remote_webdriver/

例1

options = webdriver.ChromeOptions()
driver = webdriver.Remote(command_executor=server, options=options)

例2

from selenium import webdriver

# Chrome のオプションを設定する
options = webdriver.ChromeOptions()
options.add_argument('--headless')

# Selenium Server に接続する(ダメ:selenium v4から動かない)
# TypeError: WebDriver.__init__() got an unexpected keyword argument 'desired_capabilities
driver = webdriver.Remote(
    command_executor='http://localhost:4444/wd/hub',
    desired_capabilities=options.to_capabilities(),
    options=options,
)
# Selenium Server に接続する(OK)
driver = webdriver.Remote(
    command_executor='http://localhost:4444/wd/hub',
    options=options,
)

# Selenium 経由でブラウザを操作する
driver.get('https://qiita.com')
print(driver.current_url)

# ブラウザを終了する
driver.quit()

Kumamoto-HamachiKumamoto-Hamachi

下準備

$ docker run -d -p 4444:4444 -p 7900:7900 --shm-size="2g" selenium/standalone-chrome:latest

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# Chrome の起動オプションを設定する
options = webdriver.ChromeOptions()
# 一時的にhttp://localhost:7900/?autoconnect=1&resize=scale&password=secretで確認
# options.add_argument('--headless')
driver = webdriver.Remote(
    command_executor='http://localhost:4444/wd/hub',
    options=options,
)

#####################
処理はここに書く
#####################

# 5秒待って、ブラウザを終了する
time.sleep(5)
driver.quit()

2ページ目へ!

動かないコード

driver.find_element(By.XPATH, '//*[@id="items"]/div[2]/div[2]/div/nav/div[1]/div/button[2]').click()

selenium.common.exceptions.NoSuchElementException: Message: no such elementとエラーになる。ページの要素が完全にロードされる前に、Seleniumがその要素を探しているっぽい。

待ってやると...!

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, '//*[@id="items"]/div[2]/div[2]/div/nav/div[1]/div/button[2]'))
)
element.click()
Kumamoto-HamachiKumamoto-Hamachi

zennのrobots.txt

User-agent: Yahoo Pipes 1.0
Disallow: /

User-agent: 008
Disallow: /

User-agent: voltron
Disallow: /

User-agent: Bytespider
Disallow: /

User-agent: Livelapbot
Disallow: /

User-agent: Megalodon
Disallow: /

User-agent: ia_archiver
Disallow: /

Sitemap: https://zenn.dev/sitemaps/_index.xml