Как извлечь только номер из HTML? - PullRequest
1 голос
/ 20 июня 2019

Я пытаюсь извлечь число из этого HTML-элемента:

<td bgcolor="green">
    <font color="white">
        "49.8 "
        <small>dBmV</small>
    </font>
</td>

Как извлечь только 49,8 без получения bBmV?

Я могу использовать xpath для возврата всех 49.8 дБмв, но при поиске xpath только "49.8" я получаю ошибку

Ошибка:

invalid selector: The result of the xpath expression "/html/body/p[1]/table/tbody/tr/td/table[2]/tbody/tr[2]/td[4]/font/text()" is: [object Text]. It should be an element. 

Я пытался:

browser.find_element_by_xpath("/html/body/p[1]/table/tbody/tr/td/table[2]/tbody/tr[2]/td[4]/font").text

, который возвращает 49,8 дБмВ

А потом:

browser.find_element_by_xpath("/html/body/p[1]/table/tbody/tr/td/table[2]/tbody/tr[2]/td[4]/font/text()").text

возвращает исключение выше.

Я просто хочу число 49,8 (которое меняется явно). я знаю, что смогу извлечь номер позже, но я надеюсь, что я смогу использовать что-то, чтобы просто получить детали непосредственно из HTML, что-то более аккуратное

Ответы [ 4 ]

2 голосов
/ 20 июня 2019

Для извлечения текста 49,8 вы можете использовать следующую Стратегию локатора :

  • Использование xpath через execute_script() и textContent :

    print(driver.execute_script('return arguments[0].firstChild.textContent;', driver.find_element_by_xpath("//td[@bgcolor='green']/font[@color='white']")).strip())
    
  • Использование xpath через splitlines() и get_attribute():

    print(driver.find_element_by_xpath("//td[@bgcolor='green']/font[@color='white']").get_attribute("innerHTML").splitlines()[1])
    
1 голос
/ 20 июня 2019

Вы можете использовать первую строку и просто получить число, подобное этому:

text_num = browser.find_element_by_xpath("/html/body/p[1]/table/tbody/tr/td/table[2]/tbody/tr[2]/td[4]/font").text
print(float(text_num.split()[0]))

Надеюсь, это помогло!

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

Вы можете replace дополнительный текст, подобный этому:

first_text = browser.find_element_by_xpath("/html/body/p[1]/table/tbody/tr/td/table[2]/tbody/tr[2]/td[4]/font").text
second_text = browser.find_element_by_xpath("/html/body/p[1]/table/tbody/tr/td/table[2]/tbody/tr[2]/td[4]/font/small").text
only_first_text = first_text.replace(second_text, '')
0 голосов
/ 20 июня 2019

API find_element_by_xpath в Selenium поддерживает только возвращаемые элементы, поэтому даже если в XPath возможно указать выражение, которое будет возвращать только тот текст, который вы ищете, это будет невозможно в этом случае только с XPath.

...