Posted at

PythonでSeleniumを使うならWebDriverのラッパーを定義すると見通しがよくなる

PythonからSeleniumを扱う場合、書きがちなコードは次の通り。


sample.py

import chromedriver_binary

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

try:
opt = Options()

# optの初期化コード

driver = webdriver.Chrome(options=opt)

# スクレイピング

finally:
driver.quit()


この書き方だとスクレイピングの処理が長くなった時に見通しが悪くなりがち。

改良版がこちら。


sample2.py

from webdriver_wrapper import WebdriverWrapper

with WebdriverWrapper():
# スクレイピング



webdriver_wrapper.py

import chromedriver_binary

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

class WebdriverWrapper:
def __init__(self):
self._opt = Options()
self._driver = None
# optの初期化コード

def __enter__(self):
self._driver = webdriver.Chrome(options=self._opt)
return self._driver

def __exit__(self):
self._driver.quit()


コード量は増えたがモジュール毎に役割が明確になったので処理の見通しはよくなった。