![](/img/trans.png)
[英]issue with selenium - find_elements_by_xpath or find_elements_by_tag
[英]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>& 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
匹配,但您可以根据需要进行更新)
这通过全文与您麻烦的对象和其他对象相匹配 - 我认为这就是您所追求的。
同样有用的是,您还可以向 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.