Как вы решаете сообщение об ошибке «У объекта« имя_класса »нет атрибута« драйвер »» - PullRequest
0 голосов
/ 13 марта 2020

Я установил Safari webdriver и Selenium, но когда я выполняю следующий код

from selenium.webdriver.common.by import By
from selenium import webdriver

from time import sleep


class class_name:
    def _init_(self, username, pw):
        self.username = username
        self.password = pw
        self.driver = webdriver.Safari()


        sleep(2)

    def login(self):

        self.driver.get("https://google.com")



class_name().login()

Появляется следующее сообщение об ошибке


Traceback (most recent call last):
  File "/Users/malachinoel/PycharmProjects/MajorTomtoGroundControl/yes.py", line 22, in <module>
    class_name().login()
  File "/Users/malachinoel/PycharmProjects/MajorTomtoGroundControl/yes.py", line 18, in login
    self.driver.get("https://google.com")
AttributeError: 'class_name' object has no attribute 'driver'

Есть ли способ исправить это?

Ответы [ 3 ]

2 голосов
/ 13 марта 2020

Я думаю, член должен определить перед init, если не определен как параметр в init :

class class_name:
driver = None

def __init__(self, username, pw):
    self.username = username
    self.password = pw
    self.driver = webdriver.Safari()
2 голосов
/ 13 марта 2020

Вы должны добавить параметр с именем driver и использовать init вместо init :

def __init__(self, username, pw, driver):
    self.username = username
    self.pw = pw
    self.driver = driver 

Затем вы можете указать webdriver.Safari() в качестве драйвера параметр, когда вы используете класс.

1 голос
/ 13 марта 2020

Кажется, у вашего __init__ отсутствует подчеркивание с каждой стороны. Я также предлагаю сохранить ваш объект в переменной, иначе ваш class_name().login() будет иногда собирать мусор, и браузер закроется, так как он больше не находится в области видимости. name = class_name().login() легко исправить.

...