Python: перестала работать прокрутка веб-драйвера вниз по странице - PullRequest
0 голосов
/ 07 января 2020

Я использовал следующую функцию для прокрутки вниз страницы более 2 лет, и 31 декабря 2019 года она просто перестала работать, без ошибок, просто перестала прокручиваться вниз.

Я использую Chrome версия Версия 79.0.3945.88 и ChromeDriver 2.36.540470. Любые идеи или помощь приветствуются.

def scrollToEndOfPage(self, driver):
    try:
        time.sleep(1)

        # Get scroll height
        last_height = driver.execute_script("return document.body.scrollHeight;")

        while True:
            # Scroll down to bottom
            driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

            # Wait to load page
            time.sleep(randint(2,4))

            # Calculate new scroll height and compare with last scroll height
            new_height = driver.execute_script("return document.body.scrollHeight;")
            if new_height == last_height:
                break
            last_height = new_height
    except Exception as e:
        print(str(e))

Обновление: 1

Я запустил document.body.scrollHeight; на соответствующем веб-сайте (внутренний сайт), и это отображает высоту страницы, но когда я пытаюсь выполнить driver.execute_script("return document.body.scrollHeight;") через скрипт, он зависает на этом запросе и ничего не возвращает и ошибок нет.

1 Ответ

0 голосов
/ 07 января 2020

Вы можете попытаться дождаться полной загрузки страницы перед прокруткой. Для этого вы можете использовать приведенный ниже код, чтобы дождаться окончания JavaScript до конца sh:

from selenium.webdriver.support.ui import WebDriverWait

# ...

WebDriverWait(browser, 30).until(lambda d: d.execute_script(
         'return (document.readyState == "complete" || document.readyState == "interactive")'))

Или использовать WebDriverWait и дождаться видимости / кликабельности для указанных c элементов / элементов, как показано ниже:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)

wait.until(EC.visibility_of_all_elements_located((By.XPATH, "some elements on locator")))
# or
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "some clickable element locator")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...