python - 使用 selenium 循环通过 webelement 时获取文本时出错
问题描述
使用 selenium 我想提取文本,但是当在 xpath 中从元素切换到元素时,我在处理创建的列表 correclty 并且能够提取文本时遇到了麻烦。
我尝试在循环中使用 xpath 以及排除循环。
我当前的抓取代码如下:
driver.get(startURLpart1 + str(pageSelections[x]))
time.sleep(10)
name = driver.find_element_by_xpath('//div[@class="company-list"]')
name = name.find_elements_by_xpath('//div[@class="item"]')
for i in name:
companyname = i.find_element_by_xpath('p').text
print[companyname]
在我尝试以下同样不太成功的方法之前:
for x in range(len(pageSelections)):
driver.get(startURLpart1 + str(pageSelections[x]))
time.sleep(10)
name = driver.find_element_by_xpath('//div[@class="company-list"]')
name = name.find_elements_by_xpath('//div[@class="item"]')
name = name.find_element_by_xpath('p')
for i in name:
companyname = i.text
print[companyname]
我正在处理的网站的 html 如下所示:
<div class="company-list">
<div class="item">
<a href="/profiel/abc" class="title c-text">abc</a>
<p>DFE street, 1111 Dreamland</p>
</div><div class="item">
<a href="/profiel/sheep" class="title c-text">xyz</a>
<p>Wupsidupsiland, 2222 Hanutaland</p></div>
我期待或希望得到的结果是公司列表中每个项目的 p 行外的文本。(实际上,公司列表中有更多的项目行)。所以我的预期结果是:
DFE street, 1111 Dreamland
Wupsidupsiland, 2222 Hanutaland
然后我希望能够调整我的代码以使我的文本也超出 a 行,但首先我想修复 p。
感谢您提前提供任何帮助。
解决方案
问题出在 xpath 上。当我们试图在另一个元素中找到一个元素时,它应该在 xpath 的开头有一个句点。这会将您的搜索限制为 WebElement 的子项。代替
name = name.find_elements_by_xpath('//div[@class="item"]')
你应该使用
name = name.find_elements_by_xpath('.//div[@class="item"]')
祝你好运。
推荐阅读
- python - 如何使用 python 在另一个列表中找到一个列表?
- php - 流明如何将变量传递给通知
- python - 我无法在 aws 批处理作业中传递参数?
- javascript - 如何将文本解析为 html javascript
- java - Java swing JButton/JLabel:图标未按原始大小显示
- node.js - 如何在 Redis 缓存中存储相同键值对的多个对象?
- python - pip3.7 install mysqlclient==1.3.13 失败并出现 EnvironmentError: mysql_config not found
- python - python:如何访问一个字典中的元素,该元素也在另一个字典中
- python - 如何从 python 中的文本中删除“\\r”字符?
- angular - 在命令行中跳过赛普拉斯测试