2016-12-18 203 views
3

私はpycharmで、FBCrawl.py、html_login.py、common/glovar.py、glovar.pyを含むpythonプログラムを作成します。変数webdriver_browserを使用し、このwebdriver_browserをFBCrawl.pyとhtml_login.pyで使用したい場合、主な目的はFacebookにログインしてページのコンテンツを取得することです。セレンを使用してプログラムは次のようになりますが、実行するときは エラー:Pythonエラー:ImportError:sys.meta_pathはNoneです。Pythonがシャットダウンする可能性があります

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 

あなたは私にその理由を教えてください可能性があり、どのように

+0

なぜ出力 "なし" – bindubill

答えて

0
それを解決するために

マルチスレッドを使用してバックグラウンドタスクを実行していて、メインプログラムのスレッドfi願い。その時点で、Pythonインタプリタは破壊され始めますが、デーモンスレッドのバックグラウンドタスクがまだ実行されていてCコードで実行されている場合でも、実行できるようになります。

インタープリタが途中で破棄されるため、この問題が発生します。この現象が発生する症状は、インタプリタを破棄すると、モジュール内のオブジェクト検索がモジュールの内容がクリアされたときにNoneを返すようになるためです。これが検出され、そのエラーが発生します。

このケースを解決する方法は、実際にコードが何をしているかによって異なります。 1つの方法は、バックグラウンドタスクを特定し、それが終了するのを待つことです。それ以外の方法で無期限に実行されると、スレッドを停止する必要があることを通知することがあります。

__del__()メソッドは、作業を行うオブジェクトに追加され、インタプリタのシャットダウン時にオブジェクトが破棄されているときに呼び出されるという、セレンコードを掘り下げた方が良いでしょう。セレンコードをトレースする場合は、モジュールの遅延読み込みを行う__del__()メソッド内からのものです。インタプリタが破棄されているときに__del__()が呼び出されているため、モジュールはすでに説明として消去されており、失敗します。

これが当てはまる可能性があるのは、プログラムを終了する前にコード内からセレンドライバを明示的に停止することだけです。通訳者が破壊される前にそれをやったことがあります。

これはセレンの人々に本当に尋ねるべき質問です。あるいは、ドキュメントを見て誤ってAPIを使用しているかどうかを確認してください。つまり、セレンコードのように__del__()メソッドで処理するのは悪い習慣です。彼らがこのようにしている限り、APIを間違って使用していない限り、それを止めるのは難しいかもしれません。あなたはまだ答えを探しているなら

+0

が実行されますが、このプログラムでは、私はマルチスレッドを使用していない、あなたは直接プログラムを修正してください – bindubill

2

は:

glovar.webdriver_browser.quit() 

を使用してスクリプトを終了してみてください、私は同じエラーを持っていたし、それは、この行を追加することで、単に解決されました。希望すると、

関連する問題