Как получить один текстовый узел между Span и до Br Selenium WebDriver - PullRequest
0 голосов
/ 29 сентября 2019

Я хочу извлечь текст между тегами span и br.В HTML ниже моя цель - получить Orange текст:

<td role="grid cell">
<span class="ui-column-title">Fruits</span>
<span id="all fruits">
"Orange"

<br>
23

</span>
</td>

Ответы [ 3 ]

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

Вы можете получить это с помощью xpath, но также и с простым javascript:

fruit = driver.execute_script("""
  return document.querySelector('[id="all fruits"]').firstChild.textContent
""")
0 голосов
/ 30 сентября 2019

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

  • Использование Java :

    System.out.println(((JavascriptExecutor)driver).executeScript('return arguments[0].firstChild.textContent;', new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("//td[@role='grid cell']//span[@id='all fruits']")))).toString());
    
  • Использование Python :

    print(driver.execute_script('return arguments[0].firstChild.textContent;', WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//td[@role='grid cell']//span[@id='all fruits']")))).strip())
    
  • Примечание (для Python): Вы должны добавить следующие импорты:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
0 голосов
/ 29 сентября 2019

Основным решением является разделение по символу новой строки (язык Python):

all_fruits = driver.find_element_by_css_selector("[id='all fruits']").text
first_fruit = all_fruits.split("\n")[0].replace('"','').strip()

Вы можете использовать регулярное выражение для получения слов:

import re

all_fruits = driver.find_element_by_css_selector("[id='all fruits']").text
fruit_name = re.search("\w+", all_fruits, re.MULTILINE).group()

Если вам нужны отдельные числа иИмена фруктов, вы можете использовать регулярное выражение, код ниже возвращает два списка, первый со всеми названиями фруктов и вторыми числами (язык Python):

import re

all_fruits = driver.find_element_by_css_selector("[id='all fruits']").text
fruit_names = re.findall("[a-zA-Z]+", all_fruits, re.MULTILINE)
fruit_numbers = re.findall("[0-9]+", all_fruits, re.MULTILINE)
...