【问题标题】:Webdriver: Undefined name 'driver'Webdriver:未定义的名称“驱动程序”
【发布时间】:2021-01-06 11:31:05
【问题描述】:

我正在编写一个使用 Firefox webdriver 的 python 脚本。但是,在满足条件之前不应创建浏览器实例。

在测试浏览器是否已经打开时,Spyder 的编辑器中有一条消息:undefined name 'driver'。

如何更改代码以消除该消息?

while True
    if time_to_work():
        if driver.service.is_connectable():            
            do_something()
        else:
            driver = webdriver.Firefox(profile, options=options)
            print('Browser started..')
    else:
        if driver.service.is_connectable():
            print('Closing browser..')        
            driver.quit()        

【问题讨论】:

  • 你用is_connectable测试什么条件?
  • @Mike67 我想知道是否需要创建浏览器实例。或者它已经存在,准备获取网页。

标签: python python-3.x python-2.7 selenium-firefoxdriver


【解决方案1】:

如果没有driver 实例,则无法测试driver.service.is_connectable(),因此您需要在while True 之前声明驱动程序实例。您可以使用

在不显示实际浏览器窗口的情况下初始化 driver 实例
options = Options()
options.headless() = True

并使用初始化驱动程序

driver = webdriver.Firefox(options=options, executable_path=r'[YOUR GECKODRIVER PATH]')

(感谢here 已接受的答案)。 然后您可以检查time_to_work()以及其他条件。

【讨论】:

  • 这是我之前做的,但是我的VPS内存很少。我正在寻找一种仅在“time_to_work”条件为真时才有实例的方法。
【解决方案2】:

要在第一遍(延迟加载)时打开浏览器,请将driver 初始化为None,然后检查time_to_work 中的值

试试这个代码:

driver = None
while True
    if time_to_work():
        if not driver: # start browser
            driver = webdriver.Firefox(profile, options=options)
            print('Browser started..')
        do_something()
    else:
        if driver:
            print('Closing browser..')        
            driver.quit() 
            driver = None

【讨论】:

  • 第一次运行效果很好。但是在循环中第二次发生异常: ConnectionRefusedError ErrNo(111) Full log at: justpaste.it/1qn1l
  • 这是我运行的小测试脚本,以使用 driver = None 来测试这个想法。 justpaste.it/2r61a
  • 答案已更新以将驱动程序重置为无。你应该改变你的逻辑,所以你只需要打开\关闭一次浏览器。
猜你喜欢
  • 2018-11-25
  • 1970-01-01
  • 1970-01-01
  • 2019-08-25
  • 1970-01-01
  • 2016-03-04
  • 2017-11-21
  • 1970-01-01
  • 2021-05-17
相关资源
最近更新 更多