python错误:ImportError:sys.meta_path为None,Python可能正在关闭

时间:2016-12-18 09:12:05

标签: python selenium

我在pycharm中编写了一个python程序,包括FBCrawl.py,html_login.py,common / glovar.py,在glovar.py中,我定义了一个变量webdriver_browser,并希望在FBCrawl.py和html_login.py中使用这个webdriver_browser ,主要目的是登录facebook并获取页面内容,使用selenium,程序如下,但运行时, 错误:

C:\Python\Python36\python.exe           C:/Python/PyCharmProject/FaceBookCrawl/FBCrawl.py
None
Exception ignored in: <bound method Service.__del__ of <selenium.webdriver.chrome.service.Service object at 0x00000146BF1FD438>>
Traceback (most recent call last):
  File "C:\Python\Python36\lib\site-packages\selenium\webdriver\common\service.py", line 173, in __del__
  File "C:\Python\Python36\lib\site-packages\selenium\webdriver\common\service.py", line 149, in stop
  File "C:\Python\Python36\lib\site-packages\selenium\webdriver\common\service.py", line 120, in send_remote_shutdown_command
 ImportError: sys.meta_path is None, Python is likely shutting down

 Process finished with exit code 0

该计划在此处:

FBCrwal.py:

from common import glovar
from html_login import HtmlLogin
from selenium import webdriver

if __name__ == '__main__':

    baseurl = "http://www.google.com"
    #log in the website
    login_url = "https://www.facebook.com/login.php?login_attempt=1&lwv=110"
    HtmlLogin().login(login_url)
    html_cont = glovar.webdriver_browser.get("https://www.facebook.com/alexis.n.griffith.3")
    print(html_cont)

html_login.py:

from selenium import webdriver

from common import glovar


class HtmlLogin(object):

    def login(self,url):
        if url is None:
            return
        login_url = url
        glovar.webdriver_browser = webdriver.Chrome()
        glovar.webdriver_browser.get(login_url)
        #user credentials
        user =  glovar.webdriver_browser.find_element_by_css_selector("#email")
        user.send_keys('********@gmail.com')
        password = glovar.webdriver_browser.find_element_by_css_selector("#pass")
        password.send_keys('********')
        login = glovar.webdriver_browser.find_element_by_css_selector("#loginbutton")
        login.click()

glovar.py:

webdriver_browser =  None
你可以告诉我原因以及如何解决它

2 个答案:

答案 0 :(得分:2)

如果您仍在寻找答案:请尝试使用

结束您的脚本
glovar.webdriver_browser.quit()

我遇到了同样的错误,只是添加了这一行就解决了。希望它有所帮助

答案 1 :(得分:0)

如果您使用多线程运行后台任务并且主程序线程完成,则会出现错误。此时Python解释器将开始被销毁,但如果守护程序线程中的后台任务仍在运行并且在C代码中运行,它仍然可以运行。

这会导致问题,因为解释器是被破坏的一部分。出现这种情况的一个症状就是您所看到的,因为在销毁解释器时,模块中的任何对象查找都会在模块内容被清除时开始返回None。这被检测到,你得到了这个错误。

如何解决这种情况实际上取决于代码的作用。一种方法可能是识别后台任务并等待它完成,可能使用某种方式表示线程应该停止,否则它将无限期地运行。

挖掘硒代码的另一个原因可能是更好的解释是将__del__()方法添加到对象中以进行工作,并且在解释器关闭时销毁对象时调用这些方法。如果您追踪硒代码,则它们是在__del__()方法中进行模块的惰性导入。因为在解释器被销毁时正在调用__del__(),所以该模块已被清除为解释并且失败。

如果是这种情况,您唯一能做的就是在退出程序之前从代码中明确地停止selenium驱动程序。这样你就可以在解释器被破坏之前完成它。

这是一个你应该真正问硒人的问题,或者查看文档以了解你是否错误地使用了API。也就是说,在__del__()方法中执行内容是不好的做法,就像selenium代码一样。只要他们继续这样做,除非你只是错误地使用他们的API,否则很难阻止它。