1

我有一些使用 selenium 来抓取的 HTML,我想抓取小标签内的文本。我不能像其他示例一样使用 XPath,XPath 发生了变化。这是 HTML:

<h3 class="price">
    $28.04
<small>ex</small><br> <small>$30.84 <small>inc</small></small></h3>

我知道你可以使用price = driver.find_elements_by_class_name("price")和使用price[1].text来获取文本,但我最终得到了一个 selenium webdriver 元素:

<selenium.webdriver.remote.webelement.WebElement (session="a95cede569123a83f5b043cd5e138c7c", element="a3cabc71-e3cf-4faa-8281-875f9e47d6a4")>

有没有办法刮掉 30.84 文本?

4

1 回答 1

1

文本30.84在文本节点内。因此,要打印文本,您必须诱导WebDriverWait并且visibility_of_element_located()您可以使用以下任一Locator Strategies

  • 使用XPATHchildNodes

    print(driver.execute_script('return arguments[0].firstChild.textContent;', WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//h3[@class='price']//small[.//small[text()='inc']]")))).strip())
    
  • 使用XPATHsplitlines()

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//h3[@class='price']//small[.//small[text()='inc']]"))).get_attribute("innerHTML").splitlines()[1])
    
  • 注意:您必须添加以下导入:

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

参考

您可以在以下位置找到详细的相关讨论:

于 2020-09-22T09:45:10.973 回答