【问题标题】:Selenium Python extract text between SpanSelenium Python 在 Span 之间提取文本
【发布时间】:2021-05-27 17:59:57
【问题描述】:

我正在尝试使用 Selenium 通过 Python 从下面的 HTML 中提取文本“Margaret Osbon”。但是我在打印时不断得到空白值。我试过 get_attribute 打印时仍然得到空白值

<div class="author-info hidden-md">
                By (author)&nbsp;

                    <span itemprop="author" itemtype="http://schema.org/Person" itemscope="Margareta Osborn">
                        <a href="/author/Margareta-Osborn" itemprop="url">
                            <span itemprop="name">
                                Margareta Osborn</span>
                        </a>
                    </span>
                </div>

下面是我的 Python 代码

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time"

PATH = "C:\Program Files (x86)\chromedriver.exe"
driver = webdriver.Chrome(PATH)

driver.get("https://www.bookdepository.com/")

keyword = "9781925324402"

Search = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, '//*[@id="book-search-form"]/div[1]/input[1]'))
        )
Search.clear()
Search.send_keys(keyword)
Search.send_keys(Keys.RETURN)

try:
    authors = driver.find_element_by_xpath("//div[@class='author-info hidden-md']/span/a/span").text
    print(authors)
    driver.quit()

except:
    authors = "Not Available"
    print(authors)
    driver.quit()

【问题讨论】:

    标签: python html selenium


    【解决方案1】:

    您需要调用 Selenium Python 绑定中的 .text 方法。

    .text 存在于web element

    authors = driver.find_element_by_xpath("//div[@class='author-info hidden-md']/span/a/span").text
    print(authors)
    

    authors = driver.find_element_by_xpath("//a[contains(@href,'/author/Margareta-Osborn')]").get_attribute('innerHTML')
    print(authors)
    

    更新 1:

    driver.maximize_window()
    wait = WebDriverWait(driver, 30)
    driver.get("https://www.bookdepository.com/Rose-River-Margareta-Osborn/9781925324402")
    authors = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.author-info.hidden-md span[itemprop='author'] span"))).text
    print(authors)
    

    【讨论】:

    • 我试过那个巡航,但它仍然显示为空白
    • 网址是公开的吗?您可以尝试第二种解决方案吗?
    • 我尝试了第二种解决方案,但仍然没有给我文本。这是网址 - bookdepository.com/Rose-River-Margareta-Osborn/9781925324402
    • ` Margareta Osborn` 这在 UI 中出现了 5 次。你要提取哪一个?
    • 做到了。多谢了。所以只需要增加更多的等待时间吗?并通过 CSS 而不是 XPATH 搜索元素?
    【解决方案2】:

    您缺少“.text”来获取价值,也许正因为如此,您获得了一些垃圾价值。我认为您收到的只是一个参考 ID。

    使用 .text -

    #Get Element using Xpath
    element = //span[@itemprop='name']
    
    #Fetch using the driver findElement
    author = driver.find_element_by_xpath(element).text
    
    #Print the text
    print(author)
    

    使用 JavaScriptExecutor -

    driver.execute_script('return arguments[0].innerText;', element)
    

    使用获取属性 -

    driver.find_element_by_xpath(element).get_attribute('innerText')
    

    【讨论】:

      【解决方案3】:

      从 span 中获取值。使用WebDriverWait() 并等待visibility_of_element_located() 并关注css selector

      并使用.text.get_attribute("textContent"))

      driver.get('https://www.bookdepository.com/Rose-River-Margareta-Osborn/9781925324402')
      print(WebDriverWait(driver,5).until(EC.visibility_of_element_located((By.CSS_SELECTOR, '.author-info.hidden-md [ itemprop="author"]'))).text)
      print(WebDriverWait(driver,5).until(EC.visibility_of_element_located((By.CSS_SELECTOR, '.author-info.hidden-md [ itemprop="author"]'))).get_attribute("textContent"))
      

      您需要导入以下库。

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

      【讨论】:

        猜你喜欢
        • 2018-09-04
        • 2023-03-16
        • 1970-01-01
        • 2015-08-16
        • 1970-01-01
        • 2014-07-17
        • 2022-01-12
        • 2019-05-20
        • 2020-01-29
        相关资源
        最近更新 更多