selenium 无法在页面中找到所有需要的元素

问题描述 投票:0回答:2

我用python和Edge浏览器
我需要得到 60 个“[data-sqe='name']”,但控制台只输出 30 个项目。
即使我为加载时间添加了 15 秒的睡眠,webdriver 加载的页面似乎也无法完全加载。
我尝试了一些方法,但页面甚至没有显示滚动条(第一张图片)。
请帮我找到我需要的所有物品。

Name= [my_elem.text for my_elem in driver.find_elements(By.CSS_SELECTOR,"div.row.shopee-search-item-result__items > div > a div[data-sqe='name'] +div")]

在现场:
https://shopee.vn/search?keyword=iphone&page=0&sortBy=sales

python selenium-webdriver element microsoft-edge
2个回答
0
投票
    As per my assumption, you can write the Refresh() Method post landing on the page or you can write the for loop and if condition and this loop will polling every 5 seconds.
    
    1- Method
    driver.navigate().Refresh();
    
    2- Method
    int RetryforRefresh=10;
    for(int i=1;i<=RetryforRefresh.size();i++)
    {
    //here gave the XPath of the element which appears after some time.
    if(driver.findelement(By.xpath(""))).isDisplayed()==true)
    {
    //print page loaded successfully
    Break;
    }
    else
    {
    driver.navigate().Refresh();
    }
    }
3- For finding all the elements from the page, probably you can use the cssSelector for that.

Webelement allElement=driver.findelement(By.CssSelector("*"));

String allElemt=allElement.getText();

0
投票

似乎由于延迟加载而无法加载所有元素。所以你可以尝试使用 webdriver 的 execute_script 方法向下滚动页面。例如:

for i in range(5):
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(2)

name_elements = driver.find_elements(By.CSS_SELECTOR,"div.row.shopee-search-item-result__items > div > a div[data-sqe='name'] +div")
© www.soinside.com 2019 - 2024. All rights reserved.