1

我想使用 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()和类似的。但是,我更愿意继续寻找整个搜索词而不将其拆分为组件。

非常感谢任何帮助!提前非常感谢!

4

2 回答 2

2

你所拥有的看起来不错,我希望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↵&amp; Analysis- “讨论”和“&”之间没有空格 - 添加这个空格可以增加与其余部分的一致性文件。

节点文本


[更新]

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

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

看这里

于 2020-08-24T15:13:24.187 回答
-1

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

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")

这应该做的工作!

于 2020-08-24T12:49:06.443 回答