Соскоб в Интернете с помощью Python: как прокрутить изображение в пикселях? - PullRequest
0 голосов
/ 04 марта 2019

Я использую Python и Selenium.Я хочу прокрутить представление по пикселям , а не по элементам.Дело в том, чтобы зацикливаться, пока я не прокручиваю до конца списка.В качестве тренинга я пытался прокрутить весь список людей, которым понравился этот пост в Instagram: https://www.instagram.com/p/BuT_u-UAKn1/.Я знаю, как прокручивать по элементам:

elements = driver.find_elements_by_xpath("//*[@id]/div/a")
driver.execute_script("return arguments[0].scrollIntoView();", elements[-1])

Но я бы хотел прокрутить по пикселям.Я пытался сделать следующее:

driver.execute_script("return arguments[0].scrollIntoView(true);", elements)
driver.execute_script("window.scrollBy(0,200);")

При этом возникает эта ошибка:

JavascriptException: Message: TypeError: arguments[0].scrollIntoView is not a function

Кто-нибудь знает, как прокрутить представление в пикселях?Спасибо

1 Ответ

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

Ниже сработало для меня.

#first move to the element
self.driver.execute_script("return arguments[0].scrollIntoView(true);", element)
#then scroll by x, y values, in this case 10 pixels up
self.driver.execute_script("window.scrollBy(0, -10);")

Когда вы говорите, прокрутите (0,200).Положительное число означает прокрутку вниз.Если вы хотите прокрутить вверх, используйте отрицательный -200

. См. Также документацию здесь: https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollBy

Если вы используете браузер, который не поддерживает scrollToOptions, тогда переключитесь на более совершенныйподдерживаемый браузер.

Другим возможным решением является реализация webDriverWait для определенного элемента, который будет отображаться в HTML DOM

element = WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "element_css")))
self.driver.execute_script("return arguments[0].scrollIntoView(true);", element)

Также вы можете попробовать использовать ActionChains

element = driver.find_element_by_id("id") # the element you want to scroll to 
ActionChains(driver).move_to_element(element).perform()

ПослеВы переходите к элементу, затем можете использовать код прокрутки

Вы также можете попробовать добавить смещение.Некоторые веб-страницы не будут загружать новый контент, если вы прокрутите до самого конца.Некоторые веб-страницы загружают новый контент только по достижении конца страницы.

document.documentElement.scrollHeight-10

Менее обычным способом было бы выполнить JavaScript в вашем коде.Также попробуйте максимизировать ваше окно с селеном.Иногда размер окна влияет на работу Selenium

driver.maximize_window()

findThis = driver.find_element_by_css_selector("CSS SELECTOR HERE")

jsScript = """
        function move_up(element) {
            element.scrollTop = element.scrollTop - 1000;
        }

        function move_down(element) {
            console.log('Position before: ' + element.scrollTop);
            element.scrollTop = element.scrollTop + 1000;
            console.log('Position after: ' + element.scrollTop);
        }

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