selenium調査ログ
seleniumってなに
Selenium は Web ブラウザの操作を自動化するためのフレームワーク。
WebDriverとは
ブラウザを横断的なテストの自動化を実現するためのオープンソースツール(ブラウザを操作するための API を公開するモジュール)
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.
クライアントコンピューター:コードを動かしている側
リモートコンピューター/エンドノード:ブラウザとドライバーがいる側
例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()
Remote WebDriver 2
アップロード/ダウンロード
Selenium Gridとは...?
Selenium version4.x対応
下記のとおりにやってみる
(1)Qiita の Chanmoro のプロフィールページにアクセスする
Qiita
(2)「最近の記事」に表示されている記事一覧の 2 ページ目に移動する
(3)2 ページ目の一番最初に表示されている記事のタイトルを URL を取得して表示する
下準備
$ 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()
安全に閉じよう
from selenium import webdriver
try:
with webdriver.Chrome() as driver:
driver.get("http://not-exists.selenium.dev")
except Exception as e:
print(e)
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