Как получить значение span внутри li с помощью веб-драйвера Python Selenium? - PullRequest
1 голос
/ 12 июня 2019

Я пытаюсь получить значение SCN из моей HTML-страницы в этом формате -

<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 и не могу понять это. Любая помощь будет высоко ценится.

Ответы [ 2 ]

1 голос
/ 12 июня 2019

Значение SCN, т. Е. 89862530 отражается в 3 разных местах, и вы можете извлечь его из любого из мест, вызывающих WebDriverWait для visibility_of_element_located(), и вы можете использоватьлюбой из следующих стратегий локатора :

  • <map-hs-label-value> тег с атрибутом 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"))
    
  • <span> тег с атрибутом 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"))
    
  • <span> тег с текстом 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"))
    
0 голосов
/ 12 июня 2019
  1. Вы можете найти элемент span с текстом SCN: как //span[text()='SCN:']
  2. Элемент с текстом 89862530 будет following-sibling элемента из точки 1
  3. Собираем все вместе:

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

    Демо-версия:

    enter image description here

Ссылки:

...