元素可见但Selenium无法定位:Python Kahoot脚本定位失败
Selenium无法找到Kahoot输入框元素的解决方案
问题根源
- 未切换窗口句柄:每次用
window.open新开窗口后,WebDriver焦点仍停留在原窗口,导致你在原窗口查找新窗口内的元素,必然触发超时错误。 - URL格式错误:
window.open脚本中的URL被错误编码(%22是引号的URL转义字符),导致打开的页面地址异常。 - 定位器错误:你使用的
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
相关产品推荐
相关产品推荐

