簡體   English   中英

Selenium 無法以任何方式找到元素

[英]Selenium can't find element in any way

我正在嘗試使用 python 代碼填寫登錄表單。 為此,我需要單擊提交作為最后一步。

但是 Selenium 找不到提交按鈕,無論是通過 ID、類、CSS 選擇器還是名稱。

這是我的完整代碼

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
import time

website_link = "https://wildfall.net/wp-admin/"
username = "xxxx"
password = "xxxx"

element_for_username = "user_login"
element_for_password = "user_pass"
element_for_submit = "wp-submit"

browser = webdriver.Chrome()
browser.get((website_link))

time.sleep(5)

username_element = browser.find_element(By.ID, element_for_username)
username_element.send_keys(username)
password_element = browser.find_element(By.ID, element_for_password)
password_element.send_keys(password)
WebDriverWait(browser, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[name^='a-'][src^='https://www.google.com/recaptcha/api2/anchor?']")))
WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.XPATH, "//span[@class='recaptcha-checkbox goog-inline-block recaptcha-checkbox-unchecked rc-anchor-checkbox']/div[@class='recaptcha-checkbox-border']"))).click()
time.sleep(10)
submit_element = browser.find_element(By.ID, element_for_submit)
submit_element.click()

發生錯誤的部分

submit_element = browser.find_element(By.ID, element_for_submit)
submit_element.click()

這是錯誤

>>> submit_element = browser.find_element(By.ID, element_for_submit)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\x\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 857, in find_element
    return self.execute(Command.FIND_ELEMENT, {
  File "C:\Users\x\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 435, in execute
    self.error_handler.check_response(response)
  File "C:\Users\x\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 247, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="wp-submit"]"}
  (Session info: chrome=93.0.4577.63)

我不明白為什么它找不到按鈕,因為它找到了所有其他按鈕。 它也不是 iframe,所以不能因此。 也許我只是沒有找到正確的按鈕名稱/類/ID,但沒有太多可供選擇,所以我現在迷路了。

你切換到 iframe,你必須切換回來。 嘗試使用:

driver.switch_to.default_content()

正如@facuew正確指出的那樣,單擊 reCAPTCHA 復選框后,要單擊元素Anmelden ,您必須切換到默認內容。

您優化的代碼塊可以是:

driver.get('https://wildfall.net/wp-admin/')
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#user_login"))).send_keys("username@stackoverflow.com")
driver.find_element(By.CSS_SELECTOR, "input#user_pass").send_keys("simplyGamic")
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[title=reCAPTCHA]")))
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.recaptcha-checkbox-border"))).click()
driver.switch_to.default_content()
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#wp-submit"))).click()

瀏覽器快照:

野蠻墜落

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM