You need to enable JavaScript to run this app. 使用Selenium无法点击提交按钮登录Rocket League网站的问题求助
优惠活动
大模型
产品
解决方案
定价
更多

使用Selenium无法点击提交按钮登录Rocket League网站的问题求助

Selenium登录rocket-league.com问题修复方案

报错根因说明

  • 触发javascript error: arguments[0].submit is not a function的核心原因:Selenium 原生submit()方法的设计是绑定在<form>表单元素上使用的,不能直接对表单内的按钮元素调用。你之前的代码是将查询到的GO按钮实例传入submit(),按钮本身没有对应JS submit方法,自然会抛出该错误。
  • 触发ElementClickInterceptedException的核心原因:发起GO按钮点击操作时,有其他页面元素(未完全关闭的隐私政策弹窗、页面悬浮导航层)覆盖在按钮的点击区域上,Selenium 无法对被遮挡的元素发起真实用户级点击,因此抛出拦截异常。

具体修复步骤

1. 引入必要依赖,替换硬编码的元素查询逻辑

把原来直接通过旧版find_element_by_xxx的写法(该系列方法在新版Selenium中已逐步弃用),替换成带显式等待的稳定查询,规避页面加载时序、元素遮挡带来的问题:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver_path = r"C:\Users\user\Downloads\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path)
# 配置合理的窗口尺寸,避免因窗口过窄导致的导航元素错位遮挡
driver.set_window_size(1280, 800)

homepage_URL = 'https://rocket-league.com'
driver.get(homepage_URL)
# 初始化10秒超时的显式等待实例
wait = WebDriverWait(driver, 10)

2. 完成隐私弹窗处理,避免后续元素被遮挡

不要点击完隐私按钮就直接操作后续元素,要等弹窗完全从页面DOM中消失,确保遮挡层移除:

# 等待隐私政策按钮可点击后再点击
accept_btn = wait.until(
    EC.element_to_be_clickable((By.ID, "acceptPrivacyPolicy"))
)
accept_btn.click()

# 等待弹窗元素完全不可见,移除遮挡
wait.until(
    EC.invisibility_of_element_located((By.ID, "acceptPrivacyPolicy"))
)

3. 输入账号信息,替换无等待的输入逻辑

# 等待邮箱输入框可交互后再输入
email_input = wait.until(
    EC.element_to_be_clickable((By.ID, "header-email"))
)
email_input.clear()
email_input.send_keys("你的登录邮箱")

# 等待密码输入框可交互后再输入
pwd_input = wait.until(
    EC.element_to_be_clickable((By.ID, "header-password"))
)
pwd_input.clear()
pwd_input.send_keys("你的登录密码")

4. 修复GO按钮提交逻辑,解决两个核心报错

这里提供两种可用的提交方式,二选一即可:

  • 方式一:等待GO按钮可点击后,用稳定的CSS选择器定位(替换原来容易失效的绝对XPath),再执行点击。如果还是出现点击拦截,就用JS点击兜底绕开遮挡:
    go_btn = wait.until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, "form input[value='GO']"))
    )
    # 优先执行真实点击
    try:
        go_btn.click()
    # 如果被元素拦截,就用JS执行点击
    except:
        driver.execute_script("arguments[0].click();", go_btn)
    
  • 方式二:正确使用Selenium的submit()方法,定位到整个登录表单元素,直接对表单调用提交,完全不需要定位GO按钮:
    login_form = wait.until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "header form"))
    )
    login_form.submit()
    

更高效的替代方案

既然你已经通过requests的POST请求成功拿到了网站登录后的有效cookie,完全可以跳过Selenium手动填表单、点按钮的流程:

打开网站、关闭隐私弹窗后,直接把之前requests获取到的有效cookie添加到Selenium的cookie存储中,刷新页面即可直接进入登录态,能完全规避元素定位、点击拦截、JS报错这类Selenium常见问题。


内容的提问来源于stack exchange,提问作者beruz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.13 08:27:01