You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:15:05