在第一个元素后使用 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 返回空值的主要内容,如果未能解决你的问题,请参考以下文章