首页 > 解决方案 > 类型错误: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位置参数:“名称”

你能帮帮我吗?

标签: pythonseleniumselenium-webdriver

解决方案


简单说明

当您创建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.Edgebrowser.

username=browser.find_element_by_name("username")
password=browser.find_element_by_name("password")

推荐阅读