0

解决了!

我不知道 iframe 是什么,Arundeep Chohan 在评论中提到了它们,这让我陷入了困境,并且知道我让它工作了。

我想要他的回答,但他把它作为评论留下了。谢谢阿伦迪普!++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++

我正在尝试编写一个程序来自动将我登录到一个站点,但 find_element_by_id 似乎不适用于此登录页面。我让它为 Youtube 工作,但到目前为止,我正在寻找的 id 似乎没有在这个网站上被检测到。

我也试过 find_element_by_name 和 find_element_by_class 也无济于事。

下面是我的代码

# Imports
import selenium
from selenium import webdriver

# Variables
UsNam = "MY_USERNAME"

# Assigning Firefox to browser
browser = webdriver.Firefox(executable_path=r"C:\Users\ME\Geckodriver\geckodriver-v0.27.0-win64\geckodriver.exe")

# Opening the webpage
browser.get("https://THESITEIWANTTOLOGINTO.com/abunchofloginpagestuff")

# Finding the login input
NameEntry = browser.find_element_by_id('USER')
browser.implicitly_wait(15)

# Entering the username
NameEntry.send_keys(UsNam)


这是我在硒中找不到的元素,

<input class="form-control ng-pristine ng-invalid ng-invalid-required" type="text" name="USER" id="USER" data-payxautoid="paychex.app.login.userName.input.username" placeholder="Enter Username" maxlength="50" data-ng-model="user.username" data-payx-focus="" data-ng-change="clearShowError()" required="" data-payx-form-value="siteminder.username">

我刚刚注意到的一件奇怪的事情是,当我复制并粘贴 id 没有出现在那里的元素时。它应该是“input id="USER" class=...”

任何帮助将不胜感激。我尝试阅读其他溢出问题,但没有找到任何答案,这就是我现在在这里的原因

谢谢

编辑:这是我的错误信息

Traceback (most recent call last):
  File "C:/Users/Crow/PycharmProjects/Login/main.py", line 15, in <module>
    NameEntry = browser.find_element_by_id('USER')
  File "C:\Users\Crow\PycharmProjects\Login\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 360, in find_element_by_id
    return self.find_element(by=By.ID, value=id_)
  File "C:\Users\Crow\PycharmProjects\Login\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 976, in find_element
    return self.execute(Command.FIND_ELEMENT, {
  File "C:\Users\Crow\PycharmProjects\Login\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Users\Crow\PycharmProjects\Login\venv\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [id="USER"]
4

2 回答 2

1

在 driver.get() 之后

driver.implicitly_wait(10) 

然后进行搜索。您可以改用 webdriver 等待。

driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))

检查页面并检查您的 iframe。复制 iframe 的 xpath,css,id 是什么并将其插入到上面的行中并进行相应的更改。

而不是等待和搜索:

WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "User"))).send_keys(UsNam)

进口

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC
于 2020-09-26T04:11:27.377 回答
0

我可以想到2个解决方案:

  1. 让浏览器在搜索元素之前隐式等待,以便给网站加载时间。
  2. 使用 xpath 而不是通过 id 名称查找,就像右键单击检查元素中的元素并单击复制完整 xpath 一样简单。
于 2020-09-26T00:00:15.840 回答