selenium.common.exceptions.NoSuchElementException:消息:无法找到元素:

Mor*_*len 17 selenium element webdriver

我正在尝试使用selenium在网页kahoot.it上自动生成大量用户,使它们出现在类的前面,但是,当我尝试访问inputSession项时(我在其中写入要输入的gameID),我收到此错误消息游戏)

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.get("http://www.kahoot.it")

gameID = driver.find_element_by_id("inputSession")
username = driver.find_element_by_id("username")

gameID.send_keys("53384")
Run Code Online (Sandbox Code Playgroud)

这是错误:

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element:
{"method":"id","selector":"inputSession"}
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激!:)

shr*_*046 21

可能是一个竞争条件,其中find元素在页面上出现之前正在执行.看一下等待超时文档.以下是文档中的示例

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 = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "myDynamicElement"))
    )
finally:
    driver.quit()
Run Code Online (Sandbox Code Playgroud)

  • 需要更新链接。现在似乎是 https://selenium-python.readthedocs.io/waits.html (2认同)

Sub*_*ubh 21

看起来加载网页需要时间,因此没有发现webelement的检测.您可以使用上面的@ shri代码,也可以在代码下面添加这两个语句driver = webdriver.Firefox():

driver.maximize_window() //For maximizing window
driver.implicitly_wait(20) //gives an implicit wait for 20 seconds
Run Code Online (Sandbox Code Playgroud)


Cla*_*ini 6

就我而言,错误是由我正在寻找的iframe. 这意味着我必须在寻找元素之前更改框架:

from selenium import webdriver
    
driver = webdriver.Chrome()
driver.get("https://www.google.co.uk/maps")

frame_0 = driver.find_element_by_class_name('widget-consent-frame')
driver.switch_to.frame(frame_0)

agree_btn_0 = driver.find_element_by_id('introAgreeButton')
agree_btn_0.click()
Run Code Online (Sandbox Code Playgroud)

Reddit 来源