#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")