Ошибка типа: в find_element_by_name() отсутствует 1 требуемый позиционный аргумент: ‘name’

#python #selenium #selenium-webdriver

#python #селен #selenium-webdriver

Вопрос:

 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(«имя пользователя») Ошибка типа: в find_element_by_name() отсутствует 1 требуемый позиционный аргумент: ‘name’

Можете ли вы мне помочь в этом?

Ответ №1:

Простое объяснение

Когда вы создаете свою browser переменную и устанавливаете для нее значение webdriver.Edge , вы создаете ЭКЗЕМПЛЯР класса. Просто помните, что, поскольку вы создали это browser , вам нужно использовать это конкретное browser везде. Итак, вы не хотите продолжать использовать webdriver.Edge

Более техническое объяснение

Это объяснение относится к объектно-ориентированному программированию на Python. За кулисами find_element_by_name фактически запрашивается два аргумента ( self, name ). self автоматически передается при создании нового экземпляра, в данном случае созданный экземпляр browser . Поэтому, когда вы передаете username , вы передаете ВТОРОЙ аргумент, потому 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")