Как скрести текст внутри сильного тега и обычного текста - PullRequest
1 голос
/ 25 сентября 2019

У меня есть список тегов li, и в каждом теге li есть текст с сильным тегом и обычным текстом Xpath для // * [@ id = "main"] / li [1] / strong. Как получить обычный текст,если я возьму xpath тега li, то он будет очищать весь текст, есть ли способ получить отдельный текст

<li>
<strong>Heading</strong>
: Sample paragraph to get the text from here.
</li>

Ответы [ 4 ]

0 голосов
/ 25 сентября 2019

Чтобы очистить обычный текст, вам нужно вызвать WebDriverWait для visibility_of_element_located(), а так как желаемый узел - текстовый узел , вы можете использовать метод execute_script() вместе со следующим Стратегия локатора :

  • xpath 1 :

    print(driver.execute_script('return arguments[0].lastChild.textContent;', WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//li[./strong[text()='Heading']]")))))
    
  • xpath 2:

    print(driver.execute_script('return arguments[0].lastChild.textContent;', WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//li/strong[text()='Heading']/..")))))
    
0 голосов
/ 25 сентября 2019

Если вы используете селен Induce JavaScript Executor и получите lastChild узла.

print(driver.execute_script('return arguments[0].lastChild.textContent;', driver.find_element_by_xpath('//*[@id="main"]/li[1]')))
0 голосов
/ 25 сентября 2019

Вы можете получить текст <li> и удалить из него текст <strong>

element = driver.find_element_by_xpath('//*[@id="main"]/li[1]')
all_text = element.text
element = element.find_element_by_xpath('./strong')
text = all_text.replace(element.text, '')
0 голосов
/ 25 сентября 2019

Попробуйте это:

//*[@id="main"]/li[1]/strong/following-sibling::text()[1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...