繁体   English   中英

Python:Selenium 驱动程序 find_elements_by_xpath:问题

[英]Python: Selenium Driver find_elements_by_xpath: Issue

我想使用 selenium 驱动程序包从各种网页中提取元素 我使用find_elements_by_xpath通过文本识别目标元素。 虽然我认为我能够解决“空格”、“中断”等问题,但不幸的是,我的代码没有找到以下元素

这是我尝试使用其文本查找的元素

x = """<p align="left"><font face="Arial" color="#439539" size="5">Compensation
Discussion<br>&amp; Analysis</font></p>"""

这是相应网页的原始代码屏幕截图

在此处输入图片说明

这是我目前用于识别包含文本“薪酬讨论与分析”的元素的代码

searchterm = "Compensation Discussion & Analysis

driver.find_elements_by_xpath("//*[contains(normalize-space(translate(., '\u00A0', ' ')), '" + searchterm + "')]")

我知道可能有一些方法可以只包含我的搜索词的一部分,例如starts-with()等。 但是,我更愿意继续查找整个搜索词而不将其拆分为各个组件。

任何帮助表示高度赞赏! 非常感谢!

你所拥有的看起来不错,我希望normalize-space()能够工作 - 但是,很明显,中间的<br>是一个有趣的。

我可以告诉你的是br导致文本被分成 2 个节点。 你实际上有text()text()[2]

我只在 chrome 中尝试过这个,我还没有在 selenium 中尝试过,但是试试这个 xpath:

//font[contains(normalize-space(concat(text(), ' ', text()[2])),'Compensation Discussion & Analysis')]

(请注意,我将此与font匹配,但您可以根据需要进行更新)

这通过全文与您麻烦的对象和其他对象相匹配 - 我认为这就是您所追求的。

这是我的 devtools 的样子: 开发工具

同样有用的是,您还可以向 concat 添加其他项目,即使它们不存在,并且仍然保留匹配项:

//font[contains(normalize-space(concat(text(), ' ', text()[2], ' ', text[3])),'Compensation Discussion & Analysis')]

匹配更多

这可能意味着用一个标识符来匹配它们。


最后评论 - 你可以看到在中间我用空格连接了两个节点concat(text(), ' ', text()[2]) - 这是因为节点的文本是Compensation Discussion↵& Analysis - 那里在“讨论”和“&”之间没有空格 - 添加此空格会增加与文档其余部分的一致性。

节点文本


[更新]

综上所述(有效!)我再次想到了“最终评论”......

我又看了看, normalize-space确实有效-您的文本在&符号之前没有空格...

看这里

如果您要查找页面上的整个搜索词,请尝试此操作:

string=driver.find_element_by_xpath("//div[19]/table[1]/tbody[1]/tr[20]/td[1]/font[1]")
print(string.text)
OR
print(string.get_attribute("innerHTML")

这应该可以完成工作!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM