在使用 python 检索 selenium webdriver 元素文本时需要帮助

Posted

技术标签:

【中文标题】在使用 python 检索 selenium webdriver 元素文本时需要帮助【英文标题】:Need help in retrieving a selenium webdriver element text using python 【发布时间】:2019-11-23 06:51:07 【问题描述】:

我正在尝试使用 python、Selenium 和 Chrome 阅读网页,但似乎无法检索搜索到的元素的内容。 任何帮助和指示都会很有用。

这是我编写的代码的摘录


    thElements = header.find_elements(By.XPATH, "th")

    iPos = 1
    headArray = ['Risk Category']

    for thElement in thElements:
        iPos = iPos + 1
        print(thElement.text)
        print(thElement.get_attribute('innerhtml'))
        headArray.append(thElement.text.strip())

innerHTML 被打印为(我只显示检索到的 7 个元素中的 5 个。它总共检索 7 个。)

<div class="dataTables_sizing" style="height:0;overflow:hidden;">
    <a href="javascript:void(0);" onclick="docmentView('TSK6277482')">28-Dec-2016</a>
</div>
<div class="dataTables_sizing" style="height:0;overflow:hidden;">
    <a href="javascript:void(0);" onclick="docmentView('TSK6526019')">15-Jun-2017</a>
</div>
<div class="dataTables_sizing" style="height:0;overflow:hidden;">
    <a href="javascript:void(0);" onclick="docmentView('TSK7087944')">19-Oct-2017</a>
</div>
<div class="dataTables_sizing" style="height:0;overflow:hidden;">
    <a href="javascript:void(0);" onclick="docmentView('TSK7537802')">25-May-2018</a>
</div>
<div class="dataTables_sizing" style="height:0;overflow:hidden;">
    <a href="http://xxx.comp.org/project/secure/sap/forms/isr?stage=IMP&amp;projId=P127866" target="_new">31-Jan-2019</a>
</div>

print(thElement.text) 没有给我任何东西。我希望我在打印 thElement.text 时得到 &lt;a&gt; 标签内的日期

感谢您对此的任何指示。

【问题讨论】:

进一步的搜索让我了解到 thElement 所在的 div 元素是隐藏的(样式属性是这样说的。)。可以使用 thElement.get_attribute('textContent') 而不是 thElement.text 访问隐藏元素的文本。请参阅yizeng.me/2014/04/08/… 了解更多信息。 【参考方案1】:

进一步的搜索让我了解到 thElement 所在的 div 元素是隐藏的(样式属性是这样说的。)。可以使用 thElement.get_attribute('textContent') 而不是 thElement.text 访问隐藏元素的文本。

感谢 yizeng.me/2014/04/08/... 提供信息。请访问相同的更多示例。

完整性所需的代码是:

    thElements = header.find_elements(By.XPATH, "th")

    iPos = 1
    headArray = ['Risk Category']

    for thElement in thElements:
        iPos = iPos + 1
        print(thElement.get_attribute('textContent'))
        print(thElement.get_attribute('innerHTML'))
        headArray.append(thElement.text.strip())

【讨论】:

【参考方案2】:

据我所见,与其坚持使用th 元素,不如定位a 元素,其中onclick attribute 包含docmentView 文本(最好获取innerText 属性值),相关代码将是这样的:

links = driver.find_elements_by_xpath("//a[contains(@onclick, 'docmentView')]")

for link in links:
    print(link.get_attribute("innerText"))

如果您需要元素定位器仅匹配 th 子元素,您可以选择 descendant 轴:

//th/descendant::a[contains(@onclick, 'docmentView')]

更多信息:

XPath Tutorial XPath Axes XPath Operators & Functions

【讨论】:

以上是关于在使用 python 检索 selenium webdriver 元素文本时需要帮助的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Selenium 和 Python 从文本节点中检索部分文本

滑块按钮单击selenium python

如何从动态网站python selenium中检索表

Python Selenium 无法从 mpob 网站检索标签内容

Selenium Python - 获取网络响应正文

Selenium二次封装-Python版本