Selenium Python如何根据value属性定位name为chooseMove的按钮
Selenium定位Pokemon Showdown招式按钮方案
你之前执行driver.find_element("name", 'chooseMove')只能拿到第一个按钮,是因为find_element方法匹配到第一个符合条件的元素就会直接返回,不会遍历所有同名元素。
4个招式按钮仅name="chooseMove"和对应value属性(值为1/2/3/4)是固定不变的,其余class、自定义data属性、文本内容、子元素均为动态值,直接通过属性组合匹配即可精准定位,无需依赖动态内容。
优先推荐:CSS选择器写法(性能优于XPath)
直接通过标签+双属性精准匹配,四个按钮的定位代码分别为:
- value=1的按钮:
move1 = driver.find_element("css selector", 'button[name="chooseMove"][value="1"]') - value=2的按钮:
move2 = driver.find_element("css selector", 'button[name="chooseMove"][value="2"]') - value=3的按钮:
move3 = driver.find_element("css selector", 'button[name="chooseMove"][value="3"]') - value=4的按钮:
move4 = driver.find_element("css selector", 'button[name="chooseMove"][value="4"]')
备选:XPath写法
如果习惯使用XPath定位,可通过多属性and条件匹配,以value=2的按钮为例:move2 = driver.find_element("xpath", '//button[@name="chooseMove" and @value="2"]')
其余按钮只需修改代码中@value="2"的数字为对应1/3/4即可。
注意事项
不推荐使用driver.find_elements("name", "chooseMove")取列表后按索引取值的写法,这种方式依赖按钮在DOM中的渲染顺序,一旦页面结构变动、中间插入其他同name属性的元素,就会出现定位错位,直接匹配value属性的写法稳定性最高,完全不受其他动态属性变化的影响。
内容的提问来源于stack exchange,提问作者flowerboy
相关产品推荐
相关产品推荐

