Python在不同的对象中使用相同的硒驱动程序实例

时间:2020-06-09 17:48:49

标签: python selenium oop selenium-webdriver

我是python的新手。对于一个心理学项目,我编写了一个小应用程序,用于从带有beautifulsoup的论坛中收集帖子(并要求获取网页的源代码)。一些论坛需要登录。所以我更改了我的应用程序以使用硒来完成此任务。 但是我不知道如何在不同文件中的不同类中使用相同的驱动程序实例。模块。在我的PyCharm-Project中,我在一个额外的模块中添加了以下类:

from selenium import webdriver

class SetDriver():
    def __init__ (self, driver):
        self.driver = driver

    def setUp():
        driver = webdriver.Chrome()
        return SetDriver(driver)

但是,如果我想使用以下代码从我的主文件或其他模块访问该实例:

actualsite = "a forum url"
driver = crawler.SetDriver.setUp()
driver.get(actualsite)

我收到此错误: AttributeError:“ SetDriver”对象没有属性“ get”

我很确定我对OOP的理解确实有问题,但是现在在网上搜索了几个小时之后,我才知道我做错了什么。

期待一些帮助=) 谢谢

1 个答案:

答案 0 :(得分:0)

在您的代码中,硒驱动程序被分配给SetDriver()类的driver属性。因此,无论何时要引用驱动程序,都必须使用该属性:

# This should work

actualsite = "https://www.duckduckgo.com"
driver = crawler.SetDriver.setUp()
driver.driver.get(actualsite)

在上面的代码中,第一个driver是您的SetDriver()实例,它不是实际的硒驱动器。实际的硒驱动程序位于该类的driver属性中。您可以通过检查已创建的变量type()来确认。

actualsite = "https://www.duckduckgo.com"
driver = crawler.SetDriver.setUp()

# check `driver` type
print(type(driver))

# check `driver.driver` type
print(type(driver.driver))