Я не уверен, что этого достаточно, чтобы решить все проблемы, но:
Вы должны использовать packed[0]
, который создается с помощью with
, и он выполняет __enter__
, который создает self.driver
resp = packed[0].geturl(urls)
Но вы используете seldriver1
, который создается с помощью seldriver1 = SeleniumDriver()
, который не выполняет __enter__
, поэтому он не создает self.driver
(seldriver1.driver
), и вы получаете ошибку:
'SeleniumDriver' object has no attribute 'driver'
from seleniumdriver import SeleniumDriver
with SeleniumDriver() as packed:
urls = ('https://realpython.com/','https://stackoverflow.com/')
resp = packed[0].geturl(urls)
for url in resp:
title, url = resp.titleurl()
print(title, '\n', url,'\n')
Ваш код кажется мне странным, и для правильной работы может потребоваться гораздо больше изменений.
РЕДАКТИРОВАТЬ: этот код работает для меня.
Поскольку я использую Firefox в Linux и мне не нужно устанавливать driversource
, поэтому я добавил None
для запуска без driversource
Я удалил get(url)
из __enter__
, потому что это бесполезно. Вы не можете получить две страницы в __enter__
и использовать их позже в цикле 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')