Текст Python / Selenium в формате td без промежуточного текста - PullRequest
0 голосов
/ 12 января 2020

Код html будет

<td>
    <i class="fas fa-arrow-down arrow-green"></i>
    <span class="fs_buy">Strong Buy</span> 
    1.11
</td>

, если я воспользуюсь этим кодом

cccss ='//*[@id="fs_title_values"]/div[3]/table/tbody/tr[1]/td[5]'
about = driver.find_element_by_xpath(cccss)
RatingCurrentValue=about.text
print ('RatingCurrentValue', RatingCurrentValue)

Я получу весь текст: RatingCurrentValue Сильный Покупать 1.11

Моя цель это получить только 1.11 без текста в теге span.

Пожалуйста, помогите мне.

Ответы [ 3 ]

0 голосов
/ 12 января 2020

Вы можете удалить текст дочернего узла из полного текста, чтобы получить текст родительского узла.

cccss ='//*[@id="fs_title_values"]/div[3]/table/tbody/tr[1]/td[5]'


full_text = driver.find_element_by_xpath(cccss).text

child_text = driver.find_element_by_xpath(cccss + “//span”).text

parent_text = full_text.replace(child_text, '')
print(parent_text)
0 голосов
/ 12 января 2020

Извлечение текста 1.11 из элемента, который вы можете использовать с помощью следующего решения на основе :

print(driver.find_element_by_xpath("//td[//span[@class='fs_buy' and text()='Strong Buy']]").get_attribute("innerHTML").splitlines()[2])

В идеале вы должны вызывать WebDriverWait для visibility_of_element_located(), и вы можете использовать следующие XPATH основанные стратегии локатора :

print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//td[//span[@class='fs_buy' and text()='Strong Buy']]"))).get_attribute("innerHTML").splitlines()[2])

Примечание : Вы должны добавить следующий импорт:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
0 голосов
/ 12 января 2020

Чтобы получить значение 1.11 Используйте javascripts executor и получите lastChild элемента td.

Индуцировать WebDriverWait() и visibility_of_element_located()

element=WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH,'//*[@id="fs_title_values"]/div[3]/table/tbody/tr[1]/td[5]')))
print(driver.execute_script('return arguments[0].lastChild.textContent;', element))

Вам необходимо добавить следующие библиотеки.

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

ОБНОВЛЕНИЕ :

print(driver.execute_script('return arguments[0].lastChild.textContent;', driver.find_element_by_xpath('//*[@id="fs_title_values"]/div[3]/table/tbody/tr[1]/td[5]')))
...