2017-04-06 167 views
1

Python3.4でスクリプトを作成し、seleniumを使用してWebページに移動してログインしました。スクリプトは完璧に機能します。 セレンスクリプト:py2exeを使用してexeファイルにpython seleniumスクリプトを作成します。

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 

driver = webdriver.Firefox() 
driver.get("http://128.114.70.78/periscope") 
login = driver.find_element_by_id('keys') 
login.send_keys("username") 
login.send_keys(Keys.TAB) 
login.send_keys("pass") 
login.send_keys(Keys.RETURN) 

私はpy2exeを使用してexeファイルにそれを建てたが、しかし、実行可能ファイルは、セレンwebdriverを毎回インポートできません。私はAttributeErrorを取得しています: 'NoneType'オブジェクトには属性 'startswith'がありません。

Traceback (most recent call last): 
File "periscopeLogin.py", line 1, in <module> 
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load 
File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked 
File "<frozen importlib._bootstrap>", line 1191, in _load_unlocked 
File "<frozen importlib._bootstrap>", line 1161, in 
_load_backward_compatible 
File "C:\Python34\lib\site-packages\selenium\webdriver\__init__.py", line 
18, in <module> 
from .firefox.webdriver import WebDriver as Firefox # noqa 
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load 
File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked 
File "<frozen importlib._bootstrap>", line 1191, in _load_unlocked 
File "<frozen importlib._bootstrap>", line 1161, in 
_load_backward_compatible 
File "C:\Python34\lib\site- 
packages\selenium\webdriver\firefox\webdriver.py", line 34, in <module> 
from selenium.webdriver.remote.webdriver import WebDriver as 
RemoteWebDriver 
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load 
File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked 
File "<frozen importlib._bootstrap>", line 1191, in _load_unlocked 
File "<frozen importlib._bootstrap>", line 1161, in 
_load_backward_compatible 
File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", 
line 25, in <module> 
from .webelement import WebElement 
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load 
File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked 
File "<frozen importlib._bootstrap>", line 1191, in _load_unlocked 
File "<frozen importlib._bootstrap>", line 1161, in 
_load_backward_compatible 
File "C:\Python34\lib\site- 
packages\selenium\webdriver\remote\webelement.py", line 40, in <module> 
getAttribute_js = pkgutil.get_data(__package__, 
'getAttribute.js').decode('utf8') 
File "C:\Python34\lib\pkgutil.py", line 611, in get_data 
spec = importlib.util.find_spec(package) 
File "C:\Python34\lib\importlib\util.py", line 81, in find_spec 
fullname = resolve_name(name, package) if name.startswith('.') else name 
AttributeError: 'NoneType' object has no attribute 'startswith' 

私は2014年からスレッドを発見したsetup.pyファイルにセレンwebdriverをの場所を指定するには、こう述べています。ここでは、ログファイルにエラーがあります。リンク:Make exe file from python selenium tests しかし、スレッドの解決策を試しても同じエラーが表示されます。

from distutils.core import setup 
import py2exe 

data_files = [('selenium\webdriver\Firefox', ['C:\Python34\Lib\site- 
packages\selenium\webdriver\Firefox\webdriver.xpi'])] 
# from selenium import webdriver 
# from selenium.webdriver.common.keys import Keys 

setup(
    windows = [{'script': "periscopeLogin.py"}], # the main py file 
    data_files = data_files, 
    options = { 
     'py2exe': 
      { 
       'skip_archive': True, 
       'optimize': 2, 
      } 
    } 
) 

唯一の違いは、私はPython34を使用していて、3歳のスレッドはPython27を使用していることである: はここに私のsetup.pyです。私は物事がその期間にわたって変化したように感じる。誰も私に従うためのアイデアやリードを持っていますか?私はちょうど27でそれを与える必要がありますか?

ありがとうございます。

+0

こんにちは、これにはどんな解決策がありましたか?はいの場合は、その投稿を更新してください。 – pratibha

+0

リマインダーありがとうございます!私は今それをやるでしょう。 –

答えて

1

私はこの問題を解決するためにpython27を使いました。この問題を解決するために、複数のスレッドの回答をまとめることで問題を解決しました。 は、ここで私が使用setup.pyスクリプトのコピーです:

from distutils.core import setup 
import py2exe 

setup(
    console=['periscopeLogin.py'], # the main py file 
    options={ 
      "py2exe":{ 
        "packages": ["os", "linecache"], 
        "skip_archive": True, # tell script to not create a library folder 
        "unbuffered": True, 
        "optimize": 2 
      } 
    } 
) 

私は

"skip_archive" = True 

を設定すると思う個人的な好みですが、私は、その後のスレッドがそれを行うことを述べました。

最も重要な問題は、py2exeがexeを作成するときに必要なファイルをいくつかコピーすることではないということです。これを修正するには、pythonディレクトリのファイルを見つけてdistフォルダに手動でコピーします。

最初は "getAttribute"と "isDisplayed"です。あなたのdistフォルダに移動し、\ python27 \、私のファイルは

C:\Python27\Lib\site-packages\selenium\webdriver\remote. 

コピーでこれらの2つのファイルを見つけたので、とに貼り付ける:彼らは私のpythonディレクトリがCである

*pythonDirectory*\Lib\site-packages\selenium\webdriver\remote 

に配置することができます

\dist\selenium\webdriver\remote 

Internet Explorer Webdriverを使用している場合は、これだけです。私はChromedriverでも同じだと思いますが、私はそれをテストしていません。

Firefoxを使用している場合は、コピーする必要があるファイルがいくつかあります。 「webdriver.xpi」と「webdriver_prefs.json」です。今、あなたが行くように良いことがあり

\dist\selenium\webdriver\firefox 

に貼り付ける

*pythonDirectory*\Lib\site-packages\selenium\webdriver\firefox 

:あなたには にそれらを見つけることができます!

関連する問題