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()

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