python - 类型错误:find_element_by_name() 缺少 1 个必需的位置参数:'name'
问题描述
from selenium import webdriver
import time
browser=webdriver.Edge("C:/Users/senem/Desktop/selenium/msedgedriver.exe")
browser.get("https://www.instagram.com/")
time.sleep(13)
username=webdriver.Edge.find_element_by_name("username")
password=webdriver.Edge.find_element_by_name("password")
username.send_keys("user")
password.send_keys("password")
time.sleep(10)
browser.close()
大家好。这是错误信息:
回溯(最近一次通话最后):文件“C:/Users/senem/PycharmProjects/denemefibo/instagram.py”,第 8 行,在 username=webdriver.Edge.find_element_by_name("username") TypeError: find_element_by_name() missing 1 required位置参数:“名称”
你能帮帮我吗?
解决方案
简单说明
当您创建browser
变量并将其设置为 时webdriver.Edge
,您正在创建该类的实例。请记住,既然你已经创建了那个browser
,你需要在browser
任何地方使用那个特定的。所以你不想继续使用webdriver.Edge
更多技术解释
这个解释是关于使用 Python 进行面向对象编程的。在幕后,find_element_by_name
实际上是要求两个参数 ( self, name
)。创建新实例时会自动传递 self ,在这种情况下,创建的实例是browser
. 因此,当您传入时username
,您将传入 SECOND 参数,因为self
它会自动填充。
现在我们了解了这一点,让我们看看您的代码。您创建了一个实例browser
,但没有使用它。当您尝试使用该方法find_element_by_name
时,您是直接使用该类,而不是使用您创建的实例。由于您没有使用实例,因此self
不再满足该参数。因此,当您传入时username
,它会将其视为self
,并且您会收到错误,因为它仍然需要name
。
解决方案
您需要替换webdriver.Edge
为browser
.
username=browser.find_element_by_name("username")
password=browser.find_element_by_name("password")
推荐阅读
- java - SpringBoot中设置一对一关系失败,@JoinColumns(列不存在)
- javascript - 重新加载页面后如何使用分页保存 jQuery 表的状态
- azure - 如何在 azure 中为多个资源创建单个警报
- node.js - 如何查看 nodejs 标准输出中的错误?
- c - python中有位域吗?
- java - 该程序未执行查找错误代码 - 链表中的重复字符串
- reactjs - ReactJS:如何使用数组呈现 JSON 对象
- python - 诊断 AttributeError 时最好的第一步是什么:“str”对象没有属性“str”错误
- json - 如何使用 F# 序列化/反序列化此 AWS API?
- corda - Corda 4.3 企业版 - 0 行可用