Прокрутка вниз на Python Selenium - PullRequest
0 голосов
/ 06 мая 2020

В настоящее время я пытаюсь очистить папку DropBox с помощью Selenium на Python. Очевидно, если я попытаюсь выбрать все гиперссылки (или все элементы, содержащие гиперссылки), я получу только первые 20 или около того результатов. Чтобы дать минимальный рабочий пример:

from selenium import webdriver
browser = webdriver.Chrome()
page = www.dropbox.com/FolderName
browser.get(page)

elementlist = browser.find_elements_by_class_name('brws-file-name-cell-filename')
#or alternatively, you can simply use the 'by_tag_name('a') method, which yields similar results)
elength = len(elementlist)

Обычно elength находится в порядке от 20 до 30 элементов, который увеличивается до 30-40 Я добавляю команду для прокрутки вниз до нижней части страницы . Я точно знаю, что в папке, которую я пытаюсь очистить, более 200 элементов. Таким образом, мой вопрос: есть ли способ прокручивать страницу вниз постепенно , вместо того, чтобы сразу идти до конца? Я видел, что многие вопросы, задаваемые в одном и том же topi c, сосредоточены на страницах с бесконечной загрузкой, таких как Facebook или другие социальные сети. Моя страница, с другой стороны, имеет фиксированную длину. Есть ли способ прокрутки вниз шаг за шагом, а не все сразу?

ОБНОВЛЕНИЕ

Я попытался последовать совету, данному мне сообществом, и ответом, который вы можете найти здесь . К сожалению, я все еще изо всех сил пытаюсь перебрать высоту, которая является моей интересующей переменной и которая, кажется, застряла в строке. Это была моя лучшая попытка создать l oop по высоте, и, разумеется, она все равно не сработала.

# Get current height
height =  browser.execute_script("return document.body.scrollHeight")

while True:
    # Scroll down
    browser.execute_script('window.scrollTo(0, window.scroll'+str(height)+' + 200)')

    # Wait to load page
    time.sleep(SCROLL_PAUSE_TIME)

    # Calculate new scroll height and compare with last scroll height
    new_height = browser.execute_script("return document.body.scrollHeight")
    if new_height == height:
        break
    else:
        height = new_height

ОБНОВЛЕНИЕ 2

Я думаю, что нашел проблему. Dropbox в основном имеет структуру «страница внутри страницы». Мне видна вся страница, но есть внутренний архив, по которому мне нужно перемещаться. Есть идеи, как это сделать?

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Вы можете попробовать этот ответ. Вместо того, чтобы идти вниз, вы можете создать for l oop с фиксированной высотой и выполнять итерацию, пока не достигнете нижней части.

0 голосов
/ 08 мая 2020

browser.execute_script('window.scrollTo(0, window.scroll'+str(height)+' + 200)')

Второй аргумент внутри метода Javascript кажется мне странным. Предположим, ваша переменная высоты составляет 800 пикселей, поэтому мы получаем эту функцию javascript для выполнения внутри execute_script (execute_script - это метод селена, который позволяет вам кодировать javascript).

window.scrollTo(0, window.scroll800 + 200), и я предполагаю, что это вызовет ошибка и остановите выполнение. Я думаю, вам следует изменить свой код на это.

browser.execute_script('window.scrollTo(0,'+str(height)+' + 200)')

Этот код будет прокручивать ваше окно до нижней части страницы (один совет: вы можете просто go в инструменты разработчика вашего браузера, откройте консоль и попробуйте там код javascript. Если он работает, вы можете вернуться к selenium). На этом этапе вы должны перевести экземпляр драйвера в спящий режим. После загрузки страницы (убедитесь, что у нее достаточно времени для загрузки), вы должны присвоить новое значение высоты новой переменной. Если на странице загружено больше элементов внизу страницы, первое и новое значения высоты должны отличаться, и для этого потребуется еще одна прокрутка вниз. Но перед прокруткой вы должны изменить первое значение высоты и присвоить ему новое значение высоты, поэтому в следующем l oop ваша первая высота будет второй высотой из предыдущего l oop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...