使用Python+Selenium定位点击网页start按钮失败该如何解决?
修复方案
首先你现有代码存在2个核心问题导致定位失败:
- CSS选择器语法错误:你写的
div.btn btn-huge btn-success是错误的CSS选择器语法,空格在CSS选择器中代表后代选择器,该写法的含义是查找div.btn元素下的btn-huge标签下的btn-success标签,和你要定位的同元素多类场景完全不符。同元素包含多个类的正确写法是用.连接所有类名,即div.btn.btn-huge.btn-success。 - 等待逻辑不合理:你点击服务名称后仅固定等待1秒就执行定位,很容易出现页面未渲染完成、元素还未挂载到DOM树的情况,导致定位失败。且你使用的
find_element_by_*系列方法已经在Selenium 4+版本中被废弃,兼容性较差。
修正后的完整代码
import undetected_chromedriver as uc from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time browser = uc.Chrome() browser.get('https://aternos.org/server/devialcraft') # 去掉无意义的refresh,避免页面加载异常 time.sleep(1) # 登录逻辑 username = browser.find_element(By.ID, "user") username.clear() username.send_keys("Not_Breadbutter") time.sleep(2) password = browser.find_element(By.ID, "password") password.clear() password.send_keys("my_password") time.sleep(2) browser.find_element(By.ID, "login").click() # 登录后等待跳转完成,代替无意义的refresh time.sleep(3) browser.find_element(By.CSS_SELECTOR, "div.server-name").click() # 显式等待启动按钮可点击,最长等待10秒,比固定sleep更稳定 start_btn = WebDriverWait(browser, 10).until( EC.element_to_be_clickable((By.ID, "start")) ) # 优先用ID选择器,ID是元素唯一标识,定位优先级最高 # 如果常规点击失效可以换JS点击,避免元素被遮挡导致点击失败 # start_btn.click() browser.execute_script("arguments[0].click();", start_btn) time.sleep(9) browser.quit()
可选备选定位方式
如果ID选择器仍然失效,可以替换为如下定位写法:
- 修正后的CSS选择器:
EC.element_to_be_clickable((By.CSS_SELECTOR, "div.btn.btn-huge.btn-success")) - XPath定位:
EC.element_to_be_clickable((By.XPATH, "//div[text()=' Start']"))
内容的提问来源于stack exchange,提问作者Bread_butter
相关产品推荐
相关产品推荐

