Python Selen + Geckodriver в Docker-контейнере с безголовым режимом не может прокрутить страницу - PullRequest
1 голос
/ 24 марта 2019

Я пытаюсь запустить селен с помощью geckodriver в режиме без головы в док-контейнере Ubuntu 18.04.Это мой код:

    while True:
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

        time.sleep(2)
        newHeight = driver.execute_script("return document.body.scrollHeight")
        print('scrolling..')
        if newHeight == lastHeight:
            print(f'scrolling done..')
            list_of_images = driver.find_elements_by_css_selector('._2eea a')
            print(f'collecting: {fp_url}')
            images = []
            for image in list_of_images:
                url = image.get_attribute('href')
                if 'type=3' in str(url):
                    print(f'append: {url}')
                    images.append(url)
                    # clear_memory()
            print(f'total: {len(images)} memes')
            count = 1
        else:
            lastHeight = newHeight

Я не получил ошибку, когда попробовал на своем локальном компьютере, но когда я попробовал в контейнере докера, кажется, что страница не прокручивается.И это моя настройка драйвера:

    options = webdriver.FirefoxOptions()
    options.add_argument('--hide-scrollbars')
    options.add_argument('--disable-gpu')
    options.add_argument('-headless')
    driver = webdriver.Firefox(firefox_options=options, executable_path=os.path.join(os.getcwd(), "geckodriver"))

1 Ответ

0 голосов
/ 24 марта 2019

Предполагается, что ваш драйвер Chrome полностью обновлен, но стоит проверить

https://sites.google.com/a/chromium.org/chromedriver/downloads

Возможно, попытка нескольких различных способов прокрутки может дать некоторые лучшие результаты:)

Использование цепочек действий - https://selenium -python.readthedocs.io / api.html

from selenium.webdriver.common.action_chains import ActionChains as AC

ele = driver.find_element_by_id("myID")

actions = AC(driver)
actions.move_to_element(ele).perform()

Передача идентификатора элемента в качестве аргумента в scrollintoview ()

driver.execute_script("arguments[0].scrollIntoView();", ele)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...