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')