如何在Python中使用Selenium从WebElement提取股票代码属性值
错误原因
find_element_by_name方法的作用是查找name属性等于传入值的DOM元素,你要提取的data-current-symbol是tr标签的自定义属性,不是元素的name属性,方法调用逻辑完全错误。- 没有加页面加载等待逻辑,可能页面还没完成渲染就执行元素查找,也会触发元素不存在的异常。
- 部分tr标签(比如表头行)没有
data-current-symbol属性,直接遍历所有tr会拿到空值。
正确实现代码
Selenium 3.x版本写法
from selenium import webdriver import time StockList = [] driver = webdriver.Chrome() url = "https://www.barchart.com/stocks/highs-lows/highs?timeFrame=1y" driver.get(url) # 等待页面渲染完成,也可替换为显式等待提升性能 time.sleep(3) # 获取所有tr元素 stock_trs = driver.find_elements_by_tag_name("tr") for tr in stock_trs: # 直接提取tr的自定义属性值 symbol = tr.get_attribute("data-current-symbol") # 过滤无该属性的无效tr if symbol: StockList.append(symbol) driver.quit() print(StockList)
Selenium 4.x推荐写法(旧定位方法已废弃)
from selenium import webdriver from selenium.webdriver.common.by import By import time StockList = [] driver = webdriver.Chrome() url = "https://www.barchart.com/stocks/highs-lows/highs?timeFrame=1y" driver.get(url) time.sleep(3) # 直接用CSS选择器定位所有带目标属性的tr,省去过滤步骤 stock_trs = driver.find_elements(By.CSS_SELECTOR, "tr[data-current-symbol]") for tr in stock_trs: symbol = tr.get_attribute("data-current-symbol") StockList.append(symbol) driver.quit() print(StockList)
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

