Selenium定位指定class元素并点击失败,请求排查错误原因
你的Selenium代码错误分析及修正方案
代码错误点说明
1. 第一个代码(By.CLASS_NAME)的问题
By.CLASS_NAME只能接收单个类名作为参数,不支持CSS选择器语法(比如a[class='...']这种格式),也不能同时指定多个类名,所以这个定位方式从逻辑上就不成立。
2. 第二个代码(By.CSS_SELECTOR)的问题
你写的CSS选择器存在两处错误:
- 在
class属性值里给每个类名前加了.,但原HTML元素的class是用空格分隔的多个类名,不是点分隔的,这会导致选择器匹配不到任何元素。 - 即便要使用
[class='...']属性选择器,也不需要给类名加.,直接写原HTML中的完整类名字符串即可。
正确的实现代码
下面是几种可行的正确写法,按需选择:
写法1:多类名组合的CSS选择器(推荐)
这种方式不需要严格匹配类名顺序,只要元素包含所有指定类名即可:
WebDriverWait(driver, 20).until( EC.element_to_be_clickable((By.CSS_SELECTOR, "a.button.button-3.j-save.float_left.j-retailer-start-order-submit")) ).click()
写法2:精确匹配class属性的CSS选择器
这种方式要求类名的顺序和空格完全和HTML一致:
WebDriverWait(driver, 20).until( EC.element_to_be_clickable((By.CSS_SELECTOR, "a[class='button button-3 j-save float_left j-retailer-start-order-submit']")) ).click()
写法3:结合文本的XPATH定位
如果元素的文本"Export"唯一,也可以用这种方式提高定位准确性:
WebDriverWait(driver, 20).until( EC.element_to_be_clickable((By.XPATH, "//a[@class='button button-3 j-save float_left j-retailer-start-order-submit' and text()='Export']")) ).click()
内容的提问来源于stack exchange,提问作者Herojos
相关产品推荐
相关产品推荐

