【问题标题】:How to get the value of a span inside a li using Python Selenium webdriver?如何使用 Python Selenium webdriver 获取 li 内的 span 值?
【发布时间】:2019-06-12 08:26:13
【问题描述】:

我正在尝试从我的 HTML 页面中获取 SCN 的值,该页面采用这种格式 -

<html>
    <body>
        <div class="hs-customerdata hs-customerdata-pvalues">
            <ul>
                <li class="hs-attribute">
                    <map-hs-label-value map-hs-lv-label="ACCOUNTINFO.SCN" map-hs-lv-value="89862530">
                    <span class="hs-attribute-label" hs-context-data="" translate="" hs-channel="abcd" hs-device="desktop">SCN:</span>
                    <span ng-bind-html="value | noValue | translate : params" class="hs-attribute-value" context-data="" map-v-key="89862530" map-v-params="" hs-channel="abcd" hs-device="desktop">
                    89862530</span>
                    </map-hs-label-value>
                </li>
            </ul>
        </div>
    </body>
</html>

到目前为止,我尝试了不同的方法,但无法达到跨度并获取 SCN 值。

我试过了-

scn = self.driver.find_elements_by_xpath(".//span[@class = 'hs-attribute-value']") 

这给出了 ElementNotFound 错误。我最接近的是-

div_element = self.driver.find_element_by_xpath('//div[@class="hs-customerdata hs-customerdata-personal"]/ul/li[@class="hs-attribute"]')

然后当我这样做时 -

print(div_element.get_attribute('innerHTML')) 

我明白了-

<map-hs-label-value map-hs-lv-label="ACCOUNTINFO.SCN" map-hs-lv-value="{{::customerData.details.scn}}"></map-hs-label-value>

但我无法超越这一点。我是使用 Webdriver 的新手,无法弄清楚这一点。任何帮助将不胜感激。

【问题讨论】:

    标签: python selenium-webdriver xpath webdriverwait xpath-1.0


    【解决方案1】:

    SCN 的值,即 89862530 反映在 3 个不同的地方,您可以从任何一个地方提取它,为visibility_of_element_located() 诱导 WebDriverWait 和您可以使用以下任一Locator Strategies

    • &lt;map-hs-label-value&gt; 带有map-hs-lv-value 属性的标签:

      print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located()((By.XPATH, "//div[@class='hs-customerdata hs-customerdata-pvalues']/ul/li/map-hs-label-value"))).get_attribute("map-hs-lv-value"))
      
    • &lt;span&gt; 带有map-v-key 属性的标签:

      print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located()((By.XPATH, "//div[@class='hs-customerdata hs-customerdata-pvalues']/ul/li/map-hs-label-value//span[@class='hs-attribute-value']"))).get_attribute("map-v-key"))
      
    • &lt;span&gt; 标记,文本为89862530:

      print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located()((By.XPATH, "//div[@class='hs-customerdata hs-customerdata-pvalues']/ul/li/map-hs-label-value//span[@class='hs-attribute-value']"))).get_attribute("innerHTML"))
      

    【讨论】:

    • 很好的答案和很好的解释!它就像一个魅力......接受它。
    【解决方案2】:
    1. 您可以将带有文本SCN:span 元素定位为//span[text()='SCN:']
    2. 文本为89862530 的元素将是第1 点元素的following-sibling
    3. 把所有东西放在一起:

      driver.find_element_by_xpath("//span[text()='SCN:']/following-sibling::span").text
      

      演示:

    参考资料:

    【讨论】:

    • 我仍然得到 ElementNotFound 这个。我认为这里需要 WebDriverWait。这解决了这个问题。感谢您提供文档链接。
    猜你喜欢
    • 2020-01-17
    • 1970-01-01
    • 2019-05-20
    • 2015-04-05
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2021-09-09
    • 2018-03-03
    相关资源
    最近更新 更多