python - find_element_by_id 不适用于特定网站,但适用于 Youtube
问题描述
解决了!
我不知道 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"]
解决方案
在 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
推荐阅读
- python - 如何在 python 中创建一个不会创建重复数字的随机数生成器
- php - MethodNotAllowedException Laravel API
- php - 我可以在同一函数中获取之前上传的文件的表 ID 吗?
- idris - 完整证明如果最后一个列表元素不在列表中,则前置不会如此
- c++ - 联合初始化中的结构
- linux - docker 覆盖网络是否支持从主机到容器的通信?
- java - 空 @AuthenticationPrincipal 用户
- sublimetext3 - 将内部文件识别为 JSON
- c# - String.Join overload not recognized
- javascript - 我希望每次滑动 1 秒后触摸启动处于非活动状态,并且触摸启动 1 秒后处于活动状态