webdriverは、現在利用しているブラウザとバージョンを合わせる必要がある。
仮にこの記事ではc:\binフォルダを作成し
環境変数のPATHで上記のパスを追加した。
簡単なサンプルコードを示す
test_base.pyとして保存
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# ヘッドレスモードのオプションを設定
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu') # GPUハードウェアアクセラレーションを無効化
# ChromeドライバーのパスをServiceオブジェクトとして指定
service = Service('c:\\bin\\chromedriver.exe')
# Serviceオブジェクトを使用してChromeドライバーのインスタンスを作成
# driver = webdriver.Chrome(service=service)
driver = webdriver.Chrome(service=service, options=options)
# ウェブサイトにアクセス
driver.get('https://www.yahoo.co.jp/')
search_box = driver.find_element(By.NAME, 'p')
search_box.send_keys('Python')
search_box.send_keys(Keys.RETURN)
# 検索結果ページの特定の要素(例えば、特定のクラス名を持つ要素)が表示されるまで待機
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, 'sw-CardBase')) # Yahoo Japan検索結果ページの特定のクラス名
)
# ページの高さを取得
total_height = driver.execute_script("return document.body.parentNode.scrollHeight")
# ウィンドウサイズをページの高さに合わせる
driver.set_window_size(1920, total_height)
# スクリーンショットの取得と保存
driver.save_screenshot('screenshot.png')
# ウェブページのタイトルを取得して表示
print(driver.title)
# ブラウザを閉じる
driver.quit()
test_yahoo_search.py
import unittest
import os
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
class TestBase(unittest.TestCase):
def setUp(self):
# ヘッドレスモードでChromeを起動するためのオプションを設定
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
service = Service('c:\\bin\\chromedriver.exe')
self.driver = webdriver.Chrome(service=service, options=options)
def take_screenshot(self, test_method_name):
# 現在の時刻を取得してタイムスタンプを作成
timestamp = time.strftime("%Y%m%d-%H%M%S")
# スクリーンショットの保存ディレクトリを作成(存在しない場合)
directory = f'screenshots/{test_method_name}'
if not os.path.exists(directory):
os.makedirs(directory)
# スクリーンショットのファイル名を設定して保存
screenshot_file = f'{directory}/screenshot-{timestamp}.png'
self.driver.save_screenshot(screenshot_file)
def take_screenshot_defaultsize(self, test_method_name):
# ウィンドウサイズを合わせる
driver.set_window_size(1920, 1080)
self.driver.save_screenshot(screenshot_file)
def take_screenshot_allheight(self, test_method_name):
# ページの高さを取得
total_height = driver.execute_script("return document.body.parentNode.scrollHeight")
# ウィンドウサイズをページの高さに合わせる
driver.set_window_size(1920, total_height)
take_screenshot(self, test_method_name)
def tearDown(self):
# ブラウザを閉じる
self.driver.quit()
from test_base import TestBase
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class YahooSearchTest(TestBase):
def test_search_in_yahoo_japan(self):
# Yahoo Japanのページにアクセス
self.driver.get('https://www.yahoo.co.jp/')
# 検索ボックスを見つけて、キーワードを入力して検索を実行
search_box = self.driver.find_element(By.NAME, 'p')
search_box.send_keys('Python')
search_box.send_keys(Keys.RETURN)
# 検索結果が表示されるのを待機
WebDriverWait(self.driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, 'sw-CardBase'))
)
# スクリーンショットを取得して保存
self.take_screenshot_allheight(self.__class__.__name__ + '.' + self._testMethodName)
# その他のテストコード...
# その他のテストケース...
pythonをgitbashで使うと、windowsの場合は文字化けしていが、修正方法がある。しかし、よくネットで出てくる修正方法が古く、今時点での修正方法はコントロールパネルの地域からβ版扱いのオプションにチェックを入れる必要がある。