J'ai une liste de balises li et dans chaque balise li il y a du texte avec une balise forte et du texte normal Xpath pour // * [@ id = "main"] / li [1] / strong Comment puis-je obtenir du texte normal, si je prends xpath de la balise li alors il grattera tout le texte, y a-t-il un moyen d'obtenir du texte séparé
<li> <strong>Heading</strong> : Sample paragraph to get the text from here. </li>
3 Réponses :
Si vous utilisez le sélénium Induce JavaScript
Executor et obtenez le lastChild
du nœud.
print(driver.execute_script('return arguments[0].lastChild.textContent;', driver.find_element_by_xpath('//*[@id="main"]/li[1]')))
Vous pouvez obtenir le texte
et en supprimer le
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, '')
Pour gratter le texte normal, vous devez induire WebDriverWait pour le visibilité_of_element_located ()
et comme le nœud souhaité est un nœud de texte , vous pouvez utilisez la méthode execute_script ()
avec la Stratégie de localisation :
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']]")))))
Êtes-vous prêt à utiliser BeautifulSoup? Ou faut-il que ce soit XPath?
essayez votre_browser.find_element_by_xpath ("// * [@ id =" main "] / li [1]"). texte