[python] Selenium : FirefoxProfile 예외 프로필을로드 할 수 없음

이 이전 질문 나는 버전 2.0.1에 셀레늄을 업데이트하지만 지금은 프로필 파일이 아래에있는 경우에도 다른 오류가 /tmp/webdriver-py-profilecopy:

  파일 "/home/sultan/Repository/Django/monitor/app/request.py", 행 236, 수행 중
    브라우저 = Firefox (프로필)
  __init__에있는 파일 "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py", 46 행
    self.binary, timeout),
  __init__에있는 파일 "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/extension_connection.py", 46 행
    self.binary.launch_browser (self.profile)
  launch_browser의 파일 "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/firefox_binary.py", 44 행
    self._wait_until_connectable ()
  _wait_until_connectable에있는 파일 "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/firefox_binary.py", 87 행
    WebDriverException ( "프로필을로드 할 수 없습니다. 프로필 디렉터리 : % s"% self.profile.path)
selenium.common.exceptions.WebDriverException : 프로필을로드 할 수 없습니다. 프로필 디렉토리 : / tmp / webdriver-py-profilecopy

뭐가 잘못 되었 니? 이 문제를 어떻게 해결할 수 있습니까?



답변

최신 정보:

Selenium 팀이 최신 버전으로 수정되었습니다. 거의 모든 환경에서 수정 사항은 다음과 같습니다.

pip 설치 -U 셀레늄

어느 버전에서 수정 되었는지 (분명히 r13122 ) 확실하지 않지만 2.26.0 (업데이트 당시 현재)에서는 확실히 수정되었습니다.


이 오류는 _wait_until_connectable이 시간 초과되었음을 의미합니다. 어떤 이유로 코드가 firefox에로드 된 webdriver 확장에 연결할 수 없기 때문입니다.

프록시를 사용하려고하는데 프로필에 구성된 4 가지 변경 사항 중 2 개만 파이어 폭스에 의해 수락되어 프록시가 대화하도록 구성되지 않았기 때문에이 오류가 발생하는 셀레늄에 오류를보고했습니다. 확장. 왜 이런 일이 발생하는지 잘 모르겠습니다 …

https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/2061


답변

Ubuntu를 12.04로 업그레이드 한 후에도 동일한 문제가 발생했습니다.

이 문제는 패키지 측에 있었고 최신 버전의 라이브러리에서 수정되었습니다. 셀레늄 라이브러리를 업데이트하기 만하면됩니다. 거의 모든 Python 환경에서 이것은 다음과 같습니다.

pip install -U selenium


답변

나는 FF 32.0과 Selenium selenium-2.42.1-py2.7.egg에서 같은 문제에 직면했습니다. 셀레늄 업데이트를 시도했지만 이미 최신 버전입니다. 해결책은 Firefox를 버전 30으로 다운 그레이드하는 것이 었습니다. 프로세스는 다음과 같습니다.

#Download version 30 for Linux (This is the 64 bit)
wget http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/30.0/linux-x86_64/en-US/firefox-30.0.tar.bz2

tar -xjvf firefox-30.0.tar.bz2
#Remove the old version
sudo rm -rf /opt/firefox*
sudo mv firefox /opt/firefox30.0
#Create a permanent link
sudo ln -sf /opt/firefox30.0/firefox /usr/bin/firefox

이것은 모든 문제를 해결했으며이 조합이 더 잘 작동합니다!


답변

Jeff Hoye 의 답변에 대한 확장으로 더 ‘Pythonic’방식은 webdriver.firefox.firefox_profile.FirefoxProfile다음과 같이 하위 클래스 를 만드는 것입니다 .

class CygwinFirefoxProfile(FirefoxProfile):
    @property
    def path(self):
        path = self.profile_dir
        # Do stuff to the path as described in Jeff Hoye's answer
        return path

그런 다음 드라이버를 생성하려면 :

driver = webdriver.Firefox(firefox_profile=CygwinFirefoxProfile())


답변

pip install -U selenium작동하지 않는 경우 (제 경우 에는 작동하지 않음) Firefox를 이전 버전으로 다운 그레이드 해보세요.

Firefox 49.0이 있었고 버전이 셀레늄에서 지원되는지 확인하기 위해 45.0으로 다운 그레이드했습니다. 그때 완벽하게 작동했습니다.

Firefox 45.0으로 빠르게 다운 그레이드하는 방법은 다음과 같습니다.

sudo apt-get install firefox=45.0.2+build1-0ubuntu1

도움이 되었기를 바랍니다.


답변

cygwin에서 webdriver를 실행하는 경우 문제는 프로필 경로가 여전히 POSIX 형식이므로 Windows 프로그램을 혼동합니다. 내 솔루션은 cygpath를 사용하여 Windows 형식으로 변환합니다.

이 파일 / 메서드 : selenium.webdriver.firefox.firefox_binary.launch_browser () :

바꾸다:

    self._start_from_profile_path(self.profile.path)

와:

    from subprocess import Popen, PIPE
    proc = Popen(['cygpath','-d',self.profile.path], stdout=PIPE, stderr=PIPE)
    stdout, stderr = proc.communicate()
    path = stdout.split('\n', 1)[0]

    self._start_from_profile_path(path)
    #self._start_from_profile_path(self.profile.path)

Python은 내 기본 프로그래밍 언어에 가깝지 않기 때문에 누군가가 더 파이썬적인 접근 방식을 추천 할 수 있다면 배포판에 밀어 넣을 수 있습니다. 상자에서 꺼내 자마자 cygwin에서 작동하면 편리합니다.


답변

나는 같은 문제가 있었고 셀레늄 / Firefox의 잘못된 콤보라고 믿었습니다. 내 .mozilla / 폴더 권한은 루트 사용자 만 액세스 할 수 있다는 것이 밝혀졌습니다. 이렇게 chmod 770 ~/.mozilla/속임수를 썼는지. 추가 문제를 해결하기 전에 이것이 문제가 아닌지 확인하는 것이 좋습니다.