Python Selenium - Настройте pause_time для прокрутки вниз на бесконечной странице - PullRequest
0 голосов
/ 23 сентября 2018

Я пытаюсь очистить все ссылки, доступные на бесконечной странице, прокручивая вниз и получая новые доступные ссылки.Однако time.sleep () не позволяет приостановить драйвер на разумное время, прежде чем прокручивать снова и снова.

Есть ли способ настроить код, который вы можете найти внизу, чтобы уменьшить количество спящих во время первых итераций (когда страница все еще быстро загружает новый контент) и подождать необходимое время дляследующие итерации (когда страница будет загружать новый контент медленно)?

Использование простого

for i in range(1,20):
    time.sleep(i)

не заставит меня сэкономить время во время первых итераций и не отрегулирует time.sleep() эффективно после многих итераций.

Вот код, который я использую из предложения, найденного в " Как я могу прокрутить веб-страницу с помощью веб-драйвера selenium в python? ":

from selenium import webdriver

scroll_pause_time = 5
scraped_links = []

driver = webdriver.Chrome(executable_path=driver_path)
driver.get(url)
links = driver.find_elements_by_xpath(links_filepath)
for link in links:
    if link not in scraped_links:
        scraped_links.append(link)
        print(link)
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(scroll_pause_time)
    new_height = driver.execute_script("return document.body.scrollHeight")
    if new_height == last_height:
        break
    last_height = new_height
    links = driver.find_elements_by_xpath(links_filepath)
    for link in links:
        if link not in scraped_links:
            scraped_links.append(link)
            print(link)

После 20-30 итераций код прерывается, потому что time.sleep () слишком низок по сравнению со скоростью обновления веб-страницы.

1 Ответ

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

Если вы не хотите каждый раз угадывать, сколько времени потребуется, чтобы загрузить страницу и установить несколько случайных секунд в спящий режим, вы можете использовать Явные ожидания .Пример:

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

driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
try:
    element = WebDriverWait(browser, 10).until(
                                    EC.presence_of_element_located((By.ID, "myDynamicElement"))
                                )
except common.exceptions.TimeoutException:
    print('TimeoutException')
finally:
    driver.quit()

# do what you want after necessary elements are loaded

Это решит проблему, когда time.sleep () станет слишком низким по сравнению со скоростью обновления веб-страницы.

...