提问者:小点点

Selenium.common.Exceptions.NosuchelementException:消息:没有这样的元素:找不到元素:


我正在尝试编写一个python脚本,它可以用多个帐户登录到Kahoot。 我遇到了以下问题:我试图用Selenium定位'Enter'按钮并单击它。 但是我收到了这样的消息:selenium.common.exceptions.NoSuchelementException:消息:没有这样的元素:无法定位元素:{“method”:“CSS selector”,“selector”:“.Enter-Button__EnterButton-SC-1O9B9VA-0 GSOXKU”}(会话信息:chrome=83.0.4103.116)我不知道它为什么不工作。 下面是我的代码:

from selenium import webdriver

class kahoot_tab:
    def __init__(self):
        self.driver = webdriver.Chrome(r'C:\Users\...\chromedriver.exe')
        self.driver.get('https://kahoot.it/')

    def enter_pin(self, pin):
        self.driver.find_element_by_name('gameId').send_keys(pin)
        self.driver.find_element_by_class_name('enter-button__EnterButton-sc-1o9b9va-0 gSoXKU').click()

tab1 = kahoot_tab()
tab1.enter_pin('123456')

让我感到沮丧的是,这个元素存在于HTML代码中:

请帮帮我!

附:我还在发送pin和单击按钮之间用time.sleep(100)进行了尝试。


共3个答案

匿名用户

您可以尝试使用enter按钮的完整XPath,而不是用它的类名选择它。 话虽如此,您的代码应该是:

from selenium import webdriver

class kahoot_tab:
    def __init__(self):
        self.driver = webdriver.Chrome(r'C:\Users\...\chromedriver.exe')
        self.driver.get('https://kahoot.it/')

    def enter_pin(self, pin):
        self.driver.find_element_by_name('gameId').send_keys(pin)
        self.driver.find_element_by_xpath('/html/body/div/div/div/div/main/div/form/button').click()

tab1 = kahoot_tab()
tab1.enter_pin('123456')

还有一件事是使用WebDriverWait。 例如:

enter_button = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "/html/body/div/div/div/div/main/div/form/button")))

通过使用此选项,您正在等待元素完全加载,然后再按下它。

匿名用户

因为.find_element_by_class_name只针对单个类名,所以您的目标元素具有多个类名。

使用.find_element_by_css_selector:

self.driver.find_element_by_css_selector('.enter-button__EnterButton-sc-1o9b9va-0.gSoXKU').click()

匿名用户

这里有一个替代方案,它不依赖于元素的类或完整的XPATH

enter_button = driver.find_element(By.XPATH, "//button[contains(span, 'Enter')]")
enter_button.click()

在尝试send_keys()之前,您应该使用Selenium的WebDriverWait来确保gameID可见。