【发布时间】:2021-02-27 08:21:56
【问题描述】:
我正在尝试抓取网站上以无限滚动的网格格式显示的每个项目。但是,我什至坚持使用 xpath 获取第二个项目,因为它说:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//div[@class='el-card advertisement card is-always-shadow'][2]"}
x = 1
while x < 5:
time.sleep(5)
target = driver.find_element_by_xpath(f"//div[@class='el-card advertisement card is-always-shadow'][{x}]")
target.click()
wait.until(EC.visibility_of_element_located((By.ID, "details")))
print(driver.current_url)
time.sleep(5)
driver.back()
time.sleep(5)
WebDriverWait(driver, 3).until(EC.title_contains("Just Sold"))
time.sleep(5)
x += 1
使用我的 f-string xpath,它能够找到该类的第一个 div 并打印 URL,但是当它完成 while 循环的一次迭代时,它无法找到该类的第二个 div(所以@987654321 @)。
我一直尝试使用 time.sleep() 来监控它,以查看它失败的确切位置,因为我认为它可能在页面加载之前运行,因此无法找到它,但我给了它足够的时间完成每个页面的加载,但我找不到问题。
这是该页面上 HTML 的结构: 在每个 div 中都有一个具有该名称的类(以及我也尝试过使用的“el-card__body”),一个用于显示的每个项目。 (这是每个 div 的样子)
提前感谢您的帮助!
(免责声明:这是一篇研究论文,我不打算出售/受益于所收集的信息)
【问题讨论】:
-
您可以尝试
targets = driver.find_elements_by_xpath("//div[@class='el-card advertisement card is-always-shadow']"(注意复数并删除[{x}])一次找到所有元素,看看有多少。 -
最好将 html 作为文本发布。我的搜索功能不适用于图片。
-
刚刚尝试过,可以确认它制作了一个长度为 10 的列表,因为它应该(每次滚动超过页面限制时添加 10 个项目)
-
我不知道为什么您的方法不起作用,但似乎答案是使用该命令将它们全部获取并循环遍历结果。
-
来自哪个网站
标签: python selenium selenium-webdriver xpath web-scraping