<gh_stars>0
"""
get_driver_managerにより、シングルトンのセレニウムインスタンスを取得する。
クローラの並列起動をしたい場合は、ワーカーを多重起動する。（未検証）
"""

import logging
import os

from selenium import webdriver
from selenium.webdriver import DesiredCapabilities
from selenium.webdriver import Remote as WebDriver

logger = logging.getLogger(__name__)


def create_driver():
    connector = ""
    chrome_option = webdriver.ChromeOptions()
    # chrome_option.add_argument("--blink-settings=imagesEnabled=false")

    is_debug = bool(os.environ.get("IS_SELENIUM_DEBUG", False))
    is_debug = True

    if is_debug:
        connector = "http://localhost:4444/wd/hub"
    else:
        connector = "http://selenium:4444/wd/hub"

    driver = webdriver.Remote(
        command_executor=connector,
        desired_capabilities=DesiredCapabilities.CHROME.copy(),
        options=chrome_option,
        keep_alive=True,
    )

    return driver


def get_driver() -> webdriver.Remote:
    try:
        driver = create_driver()
        yield driver
    finally:
        driver.quit()


def cleanup_driver(self):
    """
    インスタンスを使い回す場合は以下のように実装する
    """
    driver = self.driver

    for handle in driver.window_handles:
        driver.switch_to.window(handle)
        if len(driver.window_handles) != 1:
            driver.close()

    driver.get("about:blank")
    logger.info("browser was cleaned up.")

"""
get_driver_managerにより、シングルトンのセレニウムインスタンスを取得する。
クローラの並列起動をしたい場合は、ワーカーを多重起動する。（未検証）
"""

import logging
import os

from selenium import webdriver
from selenium.webdriver import DesiredCapabilities
from selenium.webdriver import Remote as WebDriver

logger = logging.getLogger(__name__)


def create_driver():
    connector = ""
    chrome_option = webdriver.ChromeOptions()
    # chrome_option.add_argument("--blink-settings=imagesEnabled=false")

    is_debug = bool(os.environ.get("IS_SELENIUM_DEBUG", False))
    is_debug = True

    if is_debug:
        connector = "http://localhost:4444/wd/hub"
    else:
        connector = "http://selenium:4444/wd/hub"

    driver = webdriver.Remote(
        command_executor=connector,
        desired_capabilities=DesiredCapabilities.CHROME.copy(),
        options=chrome_option,
        keep_alive=True,
    )

    return driver


def get_driver() -> webdriver.Remote:
    try:
        driver = create_driver()
        yield driver
    finally:
        driver.quit()


def cleanup_driver(self):
    """
    インスタンスを使い回す場合は以下のように実装する
    """
    driver = self.driver

    for handle in driver.window_handles:
        driver.switch_to.window(handle)
        if len(driver.window_handles) != 1:
            driver.close()

    driver.get("about:blank")
    logger.info("browser was cleaned up.")
get_driver_managerにより、シングルトンのセレニウムインスタンスを取得する。 クローラの並列起動をしたい場合は、ワーカーを多重起動する。（未検証） # chrome_option.add_argument("--blink-settings=imagesEnabled=false") インスタンスを使い回す場合は以下のように実装する