首页 > 解决方案 > 如何在 Python 中使用 Selenium 获取 h1 标签

问题描述

我想从yahoo Finance自动获取给定股票名称的 h1 标签(Netflix 将作为示例)。这是我到目前为止得到的:

from selenium import webdriver
import time
 
driver = webdriver.Firefox() # Select the browser
driver.get('https://finance.yahoo.com/') # Open the website

time.sleep(2)

try:
    driver.find_element_by_name("agree").click() #Check for cookie alert
except:
    print("No cookies today!")

searchbar = driver.find_element_by_id("yfin-usr-qry") #Find searchbar
searchbar.send_keys("NFLX") #Send the stock name
time.sleep(2)
searchbutton = driver.find_element_by_id("search-buttons") #Enter the search
searchbutton.click()

#This is where I need help

title = driver.find_element_by_tag_name("h1")

print(str(title))

一切正常,直到我尝试通过.find_element_by_tag_name("h1")获取标题: Netflix, Inc. (NFLX ) 。html 源代码如下所示:

<div class="D(ib) " data-reactid="6">
    <h1 class="D(ib) Fz(18px)" data-reactid="7">Netflix, Inc. (NFLX)</h1>
</div>

如果我想要获取的元素有一个 id,那么通过 Selenium 访问它就没有问题。仅当我处理“奇怪”的类名或缺少 id 时才会出现问题。其他几个网站也有这个问题。提前致谢!

标签: pythonhtmlseleniumweb-crawlerfinance

解决方案


首先,您正在尝试这样做,str(title)但它只是试图将元素打印为 str 而不是打印元素的文本。

我会尝试使用 XPATH 而不是标签名称来获取它。

如:

from selenium.webdriver.support import expected_conditions as EC

title = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//h1/text()[contains(.,"NFLX")]/parent::*'))).text

print(title)

推荐阅读