Selenium после нажатия загрузить больше я не могу получить недавно загруженный контент - PullRequest
1 голос
/ 23 апреля 2020

Я работаю над проектом, в котором требуется получать данные с сайта, используя селен.

На сайте есть load more кликабельный div.

мне удалось заставить селен щелкнуть div, и он работает, вы можете увидеть, как он выполняет щелчок при его запуске на none --headless mode

Однако, когда я пытаюсь получить все элементы, которые я не получаю после загрузки.

Вот мой фрагмент кода

driver.get('https://jamboshop.com/search/tv')
i=1
maximum=4
while i<maximum:
    try:
        i += 1
        el=driver.find_element_by_css_selector("div.showMoreLoaderPanel")
        action=ActionChains(driver)
        action.move_to_element(el).click().perform()
        driver.implicitly_wait(3)
    except:
        break

products =driver.find_elements_by_css_selector("div.col-xs-6.col-sm-4.col-md-4.col-lg-3")
for product in products:
   print({"item_name":product.find_element_by_css_selector("h6.prd-title").text})

Это печатает только items которые присутствовали до кликов ... как мне получить все элементы на странице, включая те, которые были загружены после нажатия load more?

extra

# My imports and chrome settings

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
from selenium.webdriver.common.action_chains import ActionChains

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 голос
/ 23 апреля 2020

Я думаю, что это приложение с отложенной загрузкой. Так что, когда go внизу страницы, кажется, что он потерял предыдущие элементы, которые он захватил, и поэтому вы можете видеть только текущие доступные элементы на странице.

Есть альтернативный способ справиться с этим, сверяясь со списком, а затем захватывая эти данные, повторяя при этом l oop.

Код :

import time
driver.get('https://jamboshop.com/search/tv')
i=1
maximum=4
itemlist=[]
while i<maximum:
    try:
        products = driver.find_elements_by_css_selector("div.col-xs-6.col-sm-4.col-md-4.col-lg-3")
        for product in products:
            if product.find_element_by_css_selector("h6.prd-title").text in itemlist:
                continue
            else:
                itemlist.append(product.find_element_by_css_selector("h6.prd-title").text)
        i += 1
        el=driver.find_element_by_css_selector("div.showMoreLoaderPanel")
        action=ActionChains(driver)
        action.move_to_element(el).click().perform()
        time.sleep(3)

    except:
        break

print(len(itemlist))
print(itemlist)

Дайте мне знать, если это работает для вас. Сайт не доступен на моем конце.

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