python - Selenium 使用 xpath 在已获取的 WebElement 中查找子元素始终返回整个页面上的第一个匹配项
问题描述
我正在使用 selenium 和 python 来测试一个网站,我正在尝试获取网站上文件的链接,如下所示:divs = find_elements_by_css_selector("div.answer")
用于获取页面上的帖子,这很好。divs[i].find_element_by_xpath("//figure/a[1]").get_attribute("href)
在最后一次提取的每个结果元素上使用。我正在处理的网站具有以下结构:
<html>
<div class="answer">
<blockquote class="message">
<figure class="thumb">
<a href="cdn.xyz.net/img1.jpg">
<img class="file-data" src="cdn.xyz.net/img1.jpg">
</a>
</figure>
</blockquote>
</div>
...... More identical divs with different thumbnails
</html>
这里的问题是,在divs[i].find_element_by_xpath("//figure/a[1]").get_attribute("href")
循环的每次迭代中,该行总是返回站点上所有 div 的第一个 url,在这种情况下cdn.xyz.net/img1.jpg
,这不是我想要做的事情,因为我想获得链接每个 div。我重现此问题的代码是这样的:
try:
elements = driver.find_elements_by_css_selector('div.answer')
for el in elements: #For every reply
embedLink = el.find_element_by_xpath("//figure[1]/a[1]")
print("Found embed link: " + embedLink.get_attribute("href")) #this returns the first link every time
except:
print("error")
我在这里做错了什么?
解决方案
xapth
正在从根元素搜索,除非您告诉它从当前上下文开始使用.//
el.find_element_by_xpath('.//figure[1]/a[1]')
您还可以使用完整xpath
来定位元素
elements = driver.find_elements_by_xpath('//div[@class="answer"]//figure[1]/a[1]')
for el in elements: #For every reply
print('Found embed link: ' + el.get_attribute('href'))
推荐阅读
- python - 如何将图像从本地系统传递到我的 python 程序的 ec2 实例?
- javascript - moment js 函数以人类可读的格式显示持续时间,例如(5 小时 10 分钟)从秒数
- android - 从华为应用程序库下载时未加载华为地图
- .net-core - 将示例值添加到参数的招摇 UI
- javascript - 将新项目推入其中后,如何使用 JS 数组的内容更新 div 的 innerHTML?
- python - 如何获取模型中所有属性的列表 - Django Rest Framework
- azure-devops - Azure 板中的订单列
- tomcat - Tomcat 连接池 MBean 并不总是出现在扫描中
- floating-point - 浮点数的逻辑运算(使用 C 和 python)
- html - 如何将 bootstrap 5 默认菜单更改为画布外菜单?