Selenium不再需要用户代码来管理浏览器驱动程序(如下面的代码所示)。
您还需要记住,WebElement.text并不总是能揭示您所期望的内容。这段代码包含一个处理这种情况的有用实用函数。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.remote.webelement import WebElement
OPTIONS = webdriver.ChromeOptions()
OPTIONS.add_argument("--headless=true")
URL = "https://www.wsj.com/market-data/stocks/us"
def etext(e: WebElement) -> str:
if t := e.text:
return t.strip()
p = e.get_property("textContent")
return p.strip() if isinstance(p, str) else ""
with webdriver.Chrome(OPTIONS) as driver:
driver.get(URL)
wait = WebDriverWait(driver, 10)
ec = EC.presence_of_element_located
selector = By.XPATH, "//*[@id='root']/div/div/div/div[2]/div[4]/div[1]/div[3]/table/tbody[2]/tr[1]/td[2]"
if td := wait.until(ec(selector)):
print("Advancing", etext(td))
selector = By.XPATH, "//*[@id='root']/div/div/div/div[2]/div[4]/div[1]/div[3]/table/tbody[2]/tr[2]/td[2]"
if td := wait.until(ec(selector)):
print("Declining", etext(td))
输出:
Advancing 509
Declining 2,284