gpt4 book ai didi

python 错误 :ImportError: sys. meta_path is None, Python is likely shutdown

转载 作者:太空宇宙 更新时间:2023-11-03 15:59:30 24 4
gpt4 key购买 nike

我在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

请问是什么原因以及如何解决

最佳答案

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

这会导致问题,因为解释器正在被销毁。这种情况的一个症状就是您所看到的,因为当销毁解释器时,模块中的任何对象查找开始返回 None,因为模块的内容已被清除。这正在被检测到,您会收到该错误。

如何解决这种情况实际上取决于代码在做什么。一种方法可能是识别后台任务并等待它完成,如果线程会无限期地运行,可能会使用某种方式来发出线程应该停止的信号。

深入研究 selenium 代码的另一个原因可能是一个更好的解释,其中 __del__() 方法被添加到对象中以完成工作,并且当对象在解释器上被销毁时调用这些方法关闭。如果您跟踪 selenium 代码,它们来自 __del__() 方法,执行模块的惰性导入。因为当解释器被销毁时 __del__() 被调用,模块已经被清除并失败。

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

这个问题你真的应该问 selenium 的人,或者看看文档看看你是否错误地使用了 API。也就是说,像 selenium 代码那样在 __del__() 方法中做事情是不好的做法。只要他们继续这样做,就很难阻止它,除非您只是错误地使用了他们的 API。

关于python 错误 :ImportError: sys. meta_path is None, Python is likely shutdown,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41206947/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com