Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何避免类的属性错误?_Python_Selenium_Class_Selenium Webdriver - Fatal编程技术网

Python 如何避免类的属性错误?

Python 如何避免类的属性错误?,python,selenium,class,selenium-webdriver,Python,Selenium,Class,Selenium Webdriver,我制作了一个类作为selenium驱动程序的基本设置。我给它添加了一些方法。我想从上下文管理器访问该类的方法我试图在上下文管理器中创建该类的对象并访问该方法,但失败。我该怎么做 我甚至不知道这段代码有什么问题。请帮帮我 class SeleniumDriver: '''basic setup for chromedriver(selenium)''' def __init__(self, driversource='C:\\Users\Ewis\

我制作了一个类作为
selenium驱动程序的基本设置。我给它添加了一些方法。我想从上下文管理器访问该类的方法我试图在
上下文管理器中创建该类的对象并访问该方法,但失败。我该怎么做

我甚至不知道这段代码有什么问题。请帮帮我

class SeleniumDriver:
     '''basic setup for chromedriver(selenium)'''

     def __init__(self, 
             driversource='C:\\Users\Ewis\Downloads\chromedriver.exe',
             url = ('https://realpython.com/')
             ):
        self.driversource = driversource
        self.url = url # this tuple

    def __enter__(self):
        self.driver = webdriver.Chrome(executable_path=self.driversource)
        for urls in self.url:
            self.driver.get(urls)
        return self.driver, Keys

    def __exit__(self, exc_type, exc_val, exc_trace):
        self.driver.quit()

# and this code(another project)

from seleniumdriver import SeleniumDriver

with SeleniumDriver() as packed:

    seldriver1 = SeleniumDriver()
    driver = packed[0]
    urls = ('https://realpython.com/','https://stackoverflow.com/')
    resp = seldriver1.geturl(urls)
    for url in resp:
        title, url = resp.titleurl()
        print(title, '\n', url,'\n')
错误:

回溯(最近一次呼叫最后一次): 文件“C:\python\progs\web\selenium\navigation\u commands\navigation\u commands.py”,第9行,在 对于resp中的url: 文件“c:\python\progs\my_modules\seleniumdriver\seleniumdriver.py”,第22行,在geturl中 收益率(self.driver).get(url) AttributeError:“SeleniumDriver”对象没有属性“driver”


我不确定这是否足以解决所有问题,但:

您必须使用
packed[0]
,它是使用
with
创建的,它执行
\uuuuuu\uuuuu
来创建
self.driver

resp = packed[0].geturl(urls)
但是您使用的是
seldriver1
,它是使用
seldriver1=SeleniumDriver()
创建的,它不执行
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

'SeleniumDriver' object has no attribute 'driver'


你的代码对我来说似乎很奇怪,可能需要更多的修改才能正常工作


编辑:此代码适用于我

因为我在Linux上使用Firefox,而且我不必设置
driversource
,所以我添加了
None
以在没有
driversource
的情况下运行

我删除了
get(url)
中的
\uuu\uu\uuu
,因为它没有用。您无法在
中获取两个页面\uuu请输入\uuu
并稍后在
for
循环中使用它们,因为当您打开第二个页面时,
Selenium
不会保留关于第一个页面的信息

from selenium import webdriver


class SeleniumDriver:
    '''basic setup for chromedriver(selenium)'''
    def __init__(self, driversource='C:\\Users\Ewis\Downloads\chromedriver.exe'):
        self.driversource = driversource

    def __enter__(self):
        if self.driversource:
            #self.driver = webdriver.Chrome(executable_path=self.driversource)
            self.driver = webdriver.Firefox(executable_path=self.driversource)
        else:
            #self.driver = webdriver.Chrome()
            self.driver = webdriver.Firefox()
        return self.driver

    def __exit__(self, exc_type, exc_val, exc_trace):
        self.driver.quit()


with SeleniumDriver(None) as driver:
    urls = ('https://realpython.com/', 'https://stackoverflow.com/')
    for url in urls:
        driver.get(url)
        title = driver.title
        print(title, '\n', url,'\n')
from selenium import webdriver


class SeleniumDriver:
    '''basic setup for chromedriver(selenium)'''
    def __init__(self, driversource='C:\\Users\Ewis\Downloads\chromedriver.exe'):
        self.driversource = driversource

    def __enter__(self):
        if self.driversource:
            #self.driver = webdriver.Chrome(executable_path=self.driversource)
            self.driver = webdriver.Firefox(executable_path=self.driversource)
        else:
            #self.driver = webdriver.Chrome()
            self.driver = webdriver.Firefox()
        return self.driver

    def __exit__(self, exc_type, exc_val, exc_trace):
        self.driver.quit()


with SeleniumDriver(None) as driver:
    urls = ('https://realpython.com/', 'https://stackoverflow.com/')
    for url in urls:
        driver.get(url)
        title = driver.title
        print(title, '\n', url,'\n')