【问题标题】:Pull text from webpage using selenium not working使用硒从网页中提取文本不起作用
【发布时间】:2014-08-05 19:43:07
【问题描述】:

我正在尝试从网页中提取一些文本。我要从中提取数据的页面来源是:

<tbody>
    <tr class="drx_dotted">
        <td class="drx_first">
            <span name="pharmacy"
                  longitude="-82.531457"
                  latitude="42.617612"
                  pharmacyname="CVS Pharmacy #"
                  address="1025 St Clair River Dr"
                  city="Algonac"
                  state="MI"
                  zip="48001"
                  phone="8107944941">
            </span>
            <p>
                <strong>CVS Pharmacy #</strong><br />
                1025 St Clair River Dr<br />
                Algonac, MI 48001<br />
                1-810-794-4941
            </p>
            <p>
                <a class=""
                   data-ajax="true"
                   data-ajax-method="post"
                   data-ajax-success="UpdateSearchPharmacyList"
                   href="/pfdn/SharedPharmacy/AddNetworkPharmacy?pharmacyNABP=2352324&amp;language=English">Add Pharmacy
                    <span class='HiddenText'> CVS Pharmacy #</span>
                </a>
            </p>
        </td>
        <td>
            <p>
                Retail
            </p>
        </td>
        <td>
            <p>
                Not applicable
            </p>
        </td>
    </tr>

我想在 HTML 代码底部附近拉出“不适用”。它是 HTML 源代码中第三个“td”中的“p”。还有一堆这些,所以我想一次将所有这些标签拉到一个python列表中。

这是我用来查找 HTML 的 selenium 代码:​​

x = driver.find_elements_by_xpath(
    '//[@id="divSearchResultContainer"]/div[2]/div[2]/table/tbody/tr/td[3]/p')

当我输入 print(x) 时,它会打印出这个:

[<selenium.webdriver.remote.webelement.WebElement object at 0x101f98210>,
 <selenium.webdriver.remote.webelement.WebElement object at 0x101f98250>,
 <selenium.webdriver.remote.webelement.WebElement object at 0x101f98290>]

所以 selenium 已经找到并提取了三个实例(这是正确的,它应该找到三个)。但是,当我尝试使用拉取文本时;

print x[0].text

输出是:

None

我尝试了很多变体,甚至尝试单独查找每个元素,但仍然无法正常工作。有人遇到过这个问题吗?我该如何解决?

谢谢

【问题讨论】:

  • 您希望print x[0].text 的文本输出是什么?
  • 我对 selenium 了解不多,但是打印dir(x) 看看什么是有效的
  • 哇,对不起,我弄错了。 print x[0].text 的输出是“None”,但应该是“Not applicable” 感谢您指出这一点,Richard。

标签: python html selenium


【解决方案1】:

问题是你有多个tr 标签,找一个合适的。使用 find_element_by_xpath() 查找单个元素而不是列表,并使用以下 xpath:

'//[@id="divSearchResultContainer"]/div[2]/div[2]/table/tbody/tr[1]/td[3]/p

python代码:

element = driver.find_elements_by_xpath(
'//[@id="divSearchResultContainer"]/div[2]/div[2]/table/tbody/tr[1]/td[3]/p')

注意tr 后面的[1]。这就是我们所说的仅查看第一个 tr 标记的方式。


还请注意,您拥有的 xpath 看起来很脆弱 - 这是因为使用了索引:在这个 div 中给我第二个 div,然后在那个中给我第二个 div 等等。发布完整内容带有divSearchResultContainer id 的元素将有助于为您提供更好的解决方案。

【讨论】:

    【解决方案2】:

    对 xpath 试试这个,我还没有测试过,但是 xpath 有 last() 运算符,这是你想要的。

    "//tbody//tr//td[last()]/p[last()]/text()"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-17
      相关资源
      最近更新 更多