Python Selenium如何提取元素data-stars属性高效获取osu谱面星数
问题原因
get_property()用于提取DOM标准内置属性,data-stars是自定义HTML属性,需使用get_attribute()获取- 全局查找
.beatmap-icon没有和当前遍历的谱面元素绑定,容易出现取错值、索引错位的问题
最优实现
无需计算索引,直接从当前遍历的谱面节点下查找子元素即可,代码更简洁,容错率更高:
# -*- encoding: utf-8 -*- from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.support.wait import WebDriverWait driver = webdriver.Chrome(executable_path=r"C:\Users\Gabri\anaconda3\chromedriver.exe") wait = WebDriverWait(driver, 20) driver.get('https://osu.ppy.sh/beatmapsets/941078') maps = driver.find_elements_by_css_selector(".beatmapset-beatmap-picker__beatmap") for stars in maps: ActionChains(driver).move_to_element(stars).perform() # 直接从当前谱面元素下提取星数,无需文本清洗 star_difficulty = float(stars.find_element_by_css_selector(".beatmap-icon").get_attribute("data-stars")) print(f"{star_difficulty=}")
原可行代码逻辑说明
你使用xpath按索引查找的写法也可正常运行,核心修正点就是将get_property()替换为get_attribute(),同时通过索引匹配了当前遍历的谱面对应图标元素。
内容的提问来源于stack exchange,提问作者user15785950
相关产品推荐
相关产品推荐

