我正在尝试编写一个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)
进行了尝试。
您可以尝试使用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
可见。