2017-04-06 3 views
1

Python3.4에서 스크립트를 작성하여 셀렌을 사용하여 웹 페이지를 탐색하고 로그인하십시오. 스크립트는 완벽하게 작동합니다. 셀레늄 스크립트 :py2exe를 사용하여 exe에 python 셀렌 스크립트를 작성하십시오.

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' 

I 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를 만들 때 몇 개의 필요한 파일을 복사하지 않는다는 것입니다. 파이썬 디렉토리에서 파일을 찾아 수동으로 dist 폴더에 복사하여이 문제를 해결할 수 있습니다.

은 " getAttribute를"이고 " 을 isDisplayed". 그들은

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

내 파이썬 디렉토리에 위치 할 수는 C : 내 파일이

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

복사이 두 파일에서 발견되었다 있도록 \ python27 \, 당신의 dist 폴더로 이동 한 다음에 붙여

\dist\selenium\webdriver\remote 

Internet Explorer 웹 드라이버를 사용하는 경우이 작업 만 수행하면됩니다. Chromedriver도 똑같은 것 같지만 테스트하지는 않았습니다.

Firefox를 사용하는 경우 복사해야하는 파일이 두 개 더 있음을 알고 있습니다. 그들은 "webdriver.xpi"및 "webdriver_prefs.json"입니다.당신은에 에게 그들을 찾을 수 있습니다

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

\dist\selenium\webdriver\firefox 

로 붙여 넣기 이제 갈 수 있어야한다!

관련 문제