我想在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
? - 使用正则表达式?如果那么,怎么样?
答案 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")
如果这回答你的问题,请告诉我。