在Angular网站上,使用Selenium&amp; amp;获取<div>标签内的确切文本。蟒蛇?

时间:2017-07-24 11:25:39

标签: python selenium

我想在selenium和python中获取标签内的确切文本。

当我检查元素时,我可以在浏览器上看到下面的html。

<div class="value ng-binding" ng-bind="currentEarning">£8.8</div> == $0

我用selenium编写了python代码,以便获得如下文本。

currentEaring = Ladbrokes.find_element_by_xpath('//div[@ng-bind="currentEarning"]').text

当我多次运行此脚本时,我偶尔会得到0的结果 - 这不是真的。

我很少能得到£8.8 - 这是真的。

我想我偶尔会因为0而获得== $0,但不确定。

如何将文字设为£8.8? - 使用正则表达式?如果那么,怎么样?

2 个答案:

答案 0 :(得分:1)

它的发生可能是因为,在页面加载后填充文本需要一些时间,而且看起来你还没有等待。

您可以使用显式等待,直到元素包含某些文本。

对于您的情况,以下示例可能有效。

wait = WebDriverWait(driver, 30)
wait.until(EC.text_to_be_present_in_element((By.XPATH, "//div[@ng-bind='currentEarning']"), "£"))

答案 1 :(得分:1)

以下是您的问题的答案:

获得不正确结果的原因之一可能是由于JavaScript和AJAX调用的存在导致HTML DOM的异步呈现。由于您仅获取了ng-bind属性的帮助,因此我们的预期节点可能不是HTML DOM中的唯一/第一个匹配项。因此,我们会将xpath细化为更细粒度的&amp;通过添加class属性和ng-bind属性来获取唯一身份,并获取get_attribute方法的帮助,以获取文字£8.8,如下所示:

currentEaring = Ladbrokes.find_element_by_xpath('//div[@class="value ng-binding" and @ng-bind="currentEarning"]').get_attribute("innerHTML")

如果这回答你的问题,请告诉我。