如何通过Selenium在Python中获取指定data-id的span与a元素文本
解决Selenium中同时定位带指定data-id的span和a元素的问题
核心结论
Selenium的By类没有提供直接对应data-id这类自定义属性的定位器,但可以通过XPath或CSS选择器实现需求,同时定位div下带有指定data-id的span和a元素,单次遍历获取文本。
方法1:使用XPath表达式
通过XPath的元素类型筛选+属性匹配,一次性选中目标元素:
elements_to_save = driver.find_elements(By.XPATH, "//div//*[self::span or self::a][@data-id='nba:schedule:main:team:link']")
//div//*:匹配div下的所有后代元素[self::span or self::a]:筛选出其中的span或a标签[@data-id='nba:schedule:main:team:link']:进一步筛选出data-id属性值符合要求的元素
方法2:使用CSS选择器
CSS选择器通过逗号分隔不同元素的匹配规则,同样能实现批量定位:
elements_to_save = driver.find_elements(By.CSS_SELECTOR, "div span[data-id='nba:schedule:main:team:link'], div a[data-id='nba:schedule:main:team:link']")
div span[data-id='xxx']:匹配div下带有指定data-id的span元素div a[data-id='xxx']:匹配div下带有指定data-id的a元素- 逗号表示同时选中两组元素
修改后的完整代码
替换原代码中两次find_elements的逻辑,合并为单次遍历:
import time from selenium import webdriver from selenium.webdriver.common.by import By from datetime import datetime driver = webdriver.Chrome(r"C:\Users\Admin\Downloads\chromedriver_win32 (1)\chromedriver.exe") driver.get("https://www.nba.com/schedule?pd=false®ion=1") driver.implicitly_wait(5) # 同意cookie element_to_click = driver.find_element(By.ID, "onetrust-accept-btn-handler") element_to_click.click() element_to_save = driver.find_element(By.XPATH, "//div/div/div/div/h4") f = open(r'C:\pythonPro\t_bot\new_test.txt', 'r+') f.write(element_to_save.text) f.write("\n") f.write(str(datetime.today())) myList = [] # 单次获取所有符合条件的span和a元素 elements_to_save = driver.find_elements(By.XPATH, "//div//*[self::span or self::a][@data-id='nba:schedule:main:team:link']") for element in elements_to_save: text = element.text.strip() if text: # 过滤空文本 f.write(text) myList.append(text) f.write(" \n ") f.write(str(datetime.today())) f.write(" ") f.close() with open(r'C:\pythonPro\t_bot\new_test.txt', 'r+') as f: print(f.read()) time.sleep(3) driver.get("https://www.nba.com/stats/teams/traditional") print(myList) driver.quit()
额外说明
- 代码中添加了
text.strip()和空文本过滤,避免写入无效内容 - 两种定位方式(XPath/CSS选择器)效果一致,可根据个人习惯选择
内容的提问来源于stack exchange,提问作者xlmaster
相关产品推荐
相关产品推荐

