如何在 Python 中使用 Selenium 获取 h1 标签
How can I grab a h1 tag with Selenium in Python
我想自动从 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))
在我尝试获取 header 之前一切正常:Netflix, Inc. (NFLX) 通过 .find_element_by_tag_name( “h1”)。 html 源代码如下所示:
<div class="D(ib) " data-reactid="6">
<h1 class="D(ib) Fz(18px)" data-reactid="7">Netflix, Inc. (NFLX)</h1>
</div>
如果我要获取的元素有id,那么通过Selenium访问是没有问题的。只有当我处理“奇怪的”class 名称或缺少 id 时才会出现问题。其他几个网站也有这个问题。提前致谢!
首先,您尝试执行 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)
在加载元素之前执行了位置命令。感谢 rekeson21 我找到了两个解决这个问题的方法:
time.sleep(6)
title = driver.find_element_by_xpath('//h1').text
print(title)
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)
两种情况下的输出都是:
Netflix, Inc. (NFLX)
我想自动从 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))
在我尝试获取 header 之前一切正常:Netflix, Inc. (NFLX) 通过 .find_element_by_tag_name( “h1”)。 html 源代码如下所示:
<div class="D(ib) " data-reactid="6">
<h1 class="D(ib) Fz(18px)" data-reactid="7">Netflix, Inc. (NFLX)</h1>
</div>
如果我要获取的元素有id,那么通过Selenium访问是没有问题的。只有当我处理“奇怪的”class 名称或缺少 id 时才会出现问题。其他几个网站也有这个问题。提前致谢!
首先,您尝试执行 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)
在加载元素之前执行了位置命令。感谢 rekeson21 我找到了两个解决这个问题的方法:
time.sleep(6)
title = driver.find_element_by_xpath('//h1').text
print(title)
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)
两种情况下的输出都是:
Netflix, Inc. (NFLX)