在第一个元素后使用 Selenium 返回空值

Posted

技术标签:

【中文标题】在第一个元素后使用 Selenium 返回空值【英文标题】:Scraping with Selenium returning empty values after first elements 【发布时间】:2021-03-07 05:31:44 【问题描述】:

我正在抓取一个网页,由于某种原因,它正确返回了前 12 个元素,而不是剩余的 24 个,页面中总共显示了 36 个。

search_names = driver.find_elements_by_class_name('offerList-item-description-title')
names = []
for name in search_names:
    names.append(name.text)

search_names 的长度为 36,但它返回以下(示例):

[1 , 2, 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , '', '', ... , '']

知道为什么会发生这种情况吗?

这是源代码的 sn-p:

【问题讨论】:

请注明网页链接 idealo.es/cat/8694/perfumes-de-hombre.html?q=lalique 【参考方案1】:

要使用Selenium 和python 从具有class 作为offerList-item-description-title 的所有元素中提取文本,您必须诱导@987654323 @ 代表visibility_of_all_elements_located(),您可以使用以下任一Locator Strategies:

使用CLASS_NAME

print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "offerList-item-description-title")))])

使用CSS_SELECTOR:

print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div.offerList-item-description-title")))])

使用XPATH

print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@class='offerList-item-description-title']")))])

注意:您必须添加以下导入:

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

【讨论】:

感谢您的帮助,但我收到此错误:Traceback(最近一次调用最后一次):print([my_elem.get_attribute("innerHTML") for my_elem in WebDriverWait(driver, 20)。直到(EC.visibility_of_all_elements_located((By.CLASS_NAME, "offerList-item-description-title")))]) 文件 "D:\Programas\Python\lib\site-packages\selenium\webdriver\support\wait.py" ,第 80 行,直到 raise TimeoutException(message, screen, stacktrace) selenium.common.exceptions.TimeoutException: Message: 我已将get_attribute("innerHTML") 更改为.text。请用 xpath 和 css 重新测试,让我知道状态。 让它工作 DebanjanB。太感谢了!您是否建议始终使用此方法将元素存储在列表中?或者只是在不可见元素的情况下? @FoxWox 理想情况下,您必须保持 webdriver 实例和浏览器实例始终同步才能使用 Selenium 执行活动。因此,您需要诱导正确类型的WebDriverWait

以上是关于在第一个元素后使用 Selenium 返回空值的主要内容,如果未能解决你的问题,请参考以下文章

全局变量在不同视图控制器中使用时返回空值

selenium05-等待web元素的出现

关闭窗口后页面无法点击

selenium java maven 自动化测试 页面元素获取与操作

如何在第一列中只有最小元素的矩阵中查找行?

Selenium webdriver在页面更改后获取元素