Как медленно прокрутить до конца страницы, используя селен, чтобы я мог получать динамически загружаемый контент - PullRequest
0 голосов
/ 02 мая 2020

В личном проекте, над которым я работаю, я нахожусь в ситуации, когда мне нужно почистить названия предметов с динамического сайта c, используя селен.

Для того, чтобы получить все данные, необходимо прокрутить до конца.

Однако становится сложнее, если вы прокрутите вниз, чтобы быстро получить только названия предметов внизу. Не имеет значения, как долго вы ждете, вы все еще получаете предметы в прицеле.

Так что я решил, что смогу медленно прокрутить до дна, но это не похоже на работу.

Вот мой демонстрационный код для иллюстрации проблемы

url='https://shopzetu.com/search?type=product,article,page&q=dress'
driver.get(url)

#driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") # this works but you get items at bottom only
#this scrolls slowly to end
driver.execute_script("function pageScroll() {window.scrollBy(0,50);scrolldelay = setTimeout('pageScroll()',1000);}pageScroll()")
time.sleep(2)
products =driver.find_elements_by_class_name("grid-product__content")
for product in products:
    name=product.find_element_by_class_name("grid-product__title").text
    print(name)

Есть идеи?

Дополнительно (импорт и конфигурация)

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

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--window-size=1420,1080')
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome(chrome_options=chrome_options)

1 Ответ

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

Решение

 page = driver.find_element_by_tag_name("html")
 page.send_keys(Keys.END)

Как его применять в данной ситуации

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--window-size=1420,1080')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome(chrome_options=chrome_options)

url = 'https://shopzetu.com/search?type=product,article,page&q=dress'
driver.get(url)

WebDriverWait(driver, 10).until(ec.element_to_be_clickable((By.XPATH, "//button[text()='No thanks']"))).click()
page = driver.find_element_by_tag_name("html")
page.send_keys(Keys.END)
products = driver.find_elements_by_class_name("grid-product__content")
for product in products:
    name = product.find_element_by_class_name("grid-product__title").text
    print(name)
page.send_keys(Keys.END)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...