Selenium中无id和value属性的submit提交按钮如何正确点击
解决方案
之前方法失效的原因
- 调用
find_element_by_class_name时不能传入多个空格分隔的类名,该方法仅支持单个类名检索,且你检索的fa fa-search是按钮内部<i>标签的类,不是按钮本身的属性 - 绝对路径XPath稳定性极差,页面DOM结构稍有变动就会定位失效
- 第三种XPath依赖父元素ID
RechAvFormRadio,如果该ID不存在、动态生成或者层级写错就会定位失败
可用的定位方法
方法1:通过按钮type属性直接定位(页面仅1个提交按钮时最优)
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, '//button[@type="submit"]'))).click()
方法2:结合按钮类属性缩小范围(避免匹配到其他提交按钮)
WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, '//button[@type="submit" and contains(@class, "btn-default")]'))).click()
方法3:通过内部搜索图标反向定位父级按钮
WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, '//i[contains(@class, "fa-search")]/parent::button'))).click()
方法4:CSS选择器定位
WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'button[type="submit"].btn-default'))).click()
点击失效的备选方案
如果元素定位成功但点击无响应,可使用JS强制点击:
submit_btn = WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, '//button[@type="submit"]'))) browser.execute_script("arguments[0].click();", submit_btn)
内容的提问来源于stack exchange,提问作者Erhan
相关产品推荐
相关产品推荐

