【问题标题】:firefox: 'NoneType' object has no attribute 'quit'firefox:“NoneType”对象没有属性“退出”
【发布时间】:2017-06-06 15:26:48
【问题描述】:

升级firefoxselenium 后,我遇到了一些代码问题

我对@9​​87654324@不是很有经验

代码

import sys
import time
import getopt
import urllib
import selenium
from pyvirtualdisplay import Display
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait

class Scrape:
    display = None
    driver = None

    def __init__(self):
        #   Start display
        self.display = Display(visible=0, size=(800, 600))
        self.display.start()

        #   Init args
        query = ''
        try:
            opts, args = getopt.getopt(sys.argv[1:], '', ['query=','proxy='])
            for opt, arg in opts:
                if opt == '--query':
                    query = arg
        except getopt.GetoptError as err:
            self.error(str(err))

        #   Init driver
        try:
            self.driver = webdriver.Firefox()
            self.driver.wait = WebDriverWait(self.driver, 5)
        except selenium.common.exceptions.WebDriverException as err:
            self.error(str(err))
        print('teeeesting...!')

    def error(self, str):
        self.close()

        print>>sys.stderr, str
        sys.exit(1)

    def close(self):
        self.driver.quit()
        self.display.stop()

if __name__ == '__main__':
    Scrape()

错误

# python selenium_scrape.py --query "test"
Traceback (most recent call last):
  File "selenium_scrape.py", line 48, in <module>
    Scrape()
  File "selenium_scrape.py", line 34, in __init__
    self.error(str(err))
  File "selenium_scrape.py", line 38, in error
    self.close()
  File "selenium_scrape.py", line 44, in close
    self.driver.quit()
AttributeError: 'NoneType' object has no attribute 'quit'

【问题讨论】:

  • 请阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。在您发布 MCVE 代码并准确描述问题之前,我们无法有效地帮助您。例如,重现问题真的是否依赖于那些import语句的所有
  • 建议:print&gt;&gt;sys.stderr, str before self.close(),这样就可以看到诊断信息了。

标签: python selenium firefox


【解决方案1】:

事件的顺序似乎是:

  1. 您在抓取时遇到了异常;您的驱动程序未正确初始化。
  2. 异常处理程序称为error
  3. errorclose
  4. close 尝试调用quit,但self(您的驱动程序)的值为None ...它没有名为quit的方法。

因此最终的错误回溯。插入几个战略性的print 命令来跟踪您的驱动程序是否已初始化(我预计不会)。一个可能的位置是在Init driver 下的异常处理程序中:打印您提出的异常,以及围绕问题的一两个有用值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 2014-07-05
    • 2018-05-05
    • 2013-02-11
    • 2018-12-01
    • 2017-08-02
    • 2021-04-27
    相关资源
    最近更新 更多