首页 > 解决方案 > 使用 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。

感谢您提前提供任何帮助。

标签: pythonseleniumweb-scraping

解决方案


问题出在 xpath 上。当我们试图在另一个元素中找到一个元素时,它应该在 xpath 的开头有一个句点。这会将您的搜索限制为 WebElement 的子项。代替

name = name.find_elements_by_xpath('//div[@class="item"]')

你应该使用

name = name.find_elements_by_xpath('.//div[@class="item"]')

祝你好运。


推荐阅读