Selenium Headless chrome работает намного медленнее - PullRequest
0 голосов
/ 14 июля 2020

У меня есть класс для парсера Selenium:

class DynamicParser(Parser):
    """Selenium Parser with processing JS"""
    driver: Chrome = None

    def __init__(self, driver_path='./chromedriver', headless=True):
        chrome_options = Options()
        if headless:
            chrome_options.add_argument("--headless")
            chrome_options.add_argument("window-size=1920,1080")

        # bypass OS security
        chrome_options.add_argument('--no-sandbox')
        # overcome limited resources
        chrome_options.add_argument('--disable-dev-shm-usage')
        # don't tell chrome that it is automated
        chrome_options.add_experimental_option(
            "excludeSwitches", ["enable-automation"])
        chrome_options.add_experimental_option('useAutomationExtension', False)
        # disable images
        prefs = {"profile.managed_default_content_settings.images": 2}
        chrome_options.add_experimental_option("prefs", prefs)

        # Setting Capabilities
        capabilities = DesiredCapabilities.CHROME.copy()
        capabilities['acceptSslCerts'] = True
        capabilities['acceptInsecureCerts'] = True

        self.driver = Chrome(chrome_options=chrome_options,
                             executable_path=driver_path, desired_capabilities=capabilities)

    def goto(self, url: str):
        """Goes to specified URL"""
        self.driver.get(url)

    def get_seller_name(self) -> str:
        """Returns seller's name"""
        offer_actions_tag = self.driver.find_element_by_class_name(
            'offer-user__actions')
        profile_link_tag = offer_actions_tag.find_element_by_tag_name('a')
        return profile_link_tag.text.strip()

Также у меня есть тестовый скрипт, который создает DynamicParser, переходит на какую-то страницу и вызывает .get_seller_name().

I заметил, что когда я запускаю Chromedriver без головы, он работает намного медленнее, поэтому я протестировал его, используя time python3 test.py.

Вывод для безголового chrome:

python3 test.py  2,98s user 0,94s system 3% cpu 2:04,65 total

Вывод для безголового chrome:

python3 test.py  1,48s user 0,33s system 47% cpu 3,790 total

Как мы видим, безголовый chrome работает почти в 33 раза медленнее!

Chrome версия: 83.0.4103.116

Версия с хромированным драйвером: 83.0.4103.39

Не очень понимаю, в чем проблема. Когда я разрабатывал свое предыдущее приложение, headless chrome работал достаточно быстро.

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

При запуске безголового драйвера вы также можете использовать эти настройки для повышения производительности.

browser_options = webdriver.ChromeOptions()
browser_options.headless = True
image_preferences = {"profile.managed_default_content_settings.images": 2}
browser_options.add_experimental_option("prefs", image_preferences)
0 голосов
/ 14 июля 2020

Только что нашел проблему. Это было

chrome_options.add_argument('--disable-dev-shm-usage')

Я предполагал, что у него должны быть неограниченные chrome ресурсы, но в данном случае это определенно не работает.

...