![](/img/trans.png)
[英]selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element
[英]selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element:
我正在嘗試編寫一個 python 腳本,該腳本使用多個帳戶登錄 Kahoot。 我遇到了以下問題:我嘗試使用 Selenium 找到“Enter”按鈕並單擊它。 但是我收到了這條消息: selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".enter-button__EnterButton-sc-1o9b9va-0 gSoXKU"} (Session info: 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 代碼: <button type="submit" value="Submit" class="enter-button__EnterButton-sc-1o9b9va-0 gSoXKU" data-functional-selector="join-game-pin"><span>Enter</span></button>
請幫我!
PS:我也在發送密碼和單擊按鈕之間使用time.sleep(100)
進行了嘗試。
您可以嘗試使用輸入按鈕的完整 XPath,而不是使用其 class 名稱來選擇它。 話雖如此,您的代碼應該是:
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")))
通過使用它,您正在等待元素完全加載,然后再按下它。
您的目標元素具有多個 class 名稱。
即enter-button__EnterButton-sc-1o9b9va-0
和gSoXKU
使用.find_element_by_class_name
無法實現,因為此方法僅適用於單個 class 名稱。
相反,對於多個 class 名稱,您可以將.find_element_by_css_selector
與此值一起使用.enter-button__EnterButton-sc-1o9b9va-0.gSoXKU
:
self.driver.find_element_by_css_selector('.enter-button__EnterButton-sc-1o9b9va-0.gSoXKU').click()
這是不依賴於元素類或完整 XPATH 的替代方案
from selenium.webdriver.common.by import By
...
enter_button = driver.find_element(By.XPATH, "//button[contains(span, 'Enter')]")
enter_button.click()
您應該利用 Selenium 的WebDriverWait來確保在嘗試send_keys()
之前gameId
是可見的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.