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

元素可见但Selenium无法定位:Python Kahoot脚本定位失败

Selenium无法找到Kahoot输入框元素的解决方案

问题根源

  1. 未切换窗口句柄:每次用window.open新开窗口后,WebDriver焦点仍停留在原窗口,导致你在原窗口查找新窗口内的元素,必然触发超时错误。
  2. URL格式错误:window.open脚本中的URL被错误编码(%22是引号的URL转义字符),导致打开的页面地址异常。
  3. 定位器错误:你使用的game-Id并非Kahoot输入框的真实name属性(实际为gameId),且绝对XPATH依赖页面DOM结构,极易因页面更新失效。

修正后的代码

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

name = input("Name: ")
pin = str(input("PIN: "))
bots = int(input("Bots: "))

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)

for i in range(bots):
    time.sleep(1)
    # 修正window.open脚本,正确打开目标页面
    driver.execute_script('window.open("https://kahoot.it/", "_blank");')
    # 切换到新打开的窗口(句柄列表最后一项为新窗口)
    driver.switch_to.window(driver.window_handles[-1])
    
    # 等待并定位gameId输入框
    input_pin = wait.until(EC.visibility_of_element_located((By.NAME, 'gameId')))
    input_pin.send_keys(pin)
    input_pin.send_keys(Keys.ENTER)
    
    # 可选:填写昵称(取消注释即可)
    # input_name = wait.until(EC.visibility_of_element_located((By.NAME, 'nickname')))
    # input_name.send_keys(f"{name}_{i}")
    # input_name.send_keys(Keys.ENTER)
    
    time.sleep(2)

关键修改说明

  • 修复window.open的URL格式,确保打开正确的Kahoot页面。
  • 新增窗口句柄切换逻辑,让WebDriver在新窗口内执行后续操作。
  • 使用真实的gameId作为name定位器,替代不稳定的绝对XPATH。
  • 统一等待和定位逻辑,避免元素查找冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:05:19