2016-06-22 1 views
4

geckodriver로 업그레이드 한 후 Selenium 세션을 다시 사용할 수 없습니다. 나는 파이어 폭스 인스턴스를 시작하고 포트를 인쇄하는 start_browser.py 스크립트처럼,에 연결해야geckodriver를 통해 기존 Selenium 세션에 연결할 수 없습니다.

: 여기 내 설정이다

firefox_capabilities = DesiredCapabilities.FIREFOX 
firefox_capabilities['marionette'] = True 
browser = webdriver.Firefox(capabilities=firefox_capabilities) 
print browser.service.port 
wait_forever() 

... 그리고 시도하는 다른 스크립트는 기존에 연결 원격 드라이버를 통해 예 :

caps = DesiredCapabilities.FIREFOX 
caps['marionette'] = True 
driver = webdriver.Remote(
     command_executor='http://localhost:{port}'.format(port=port), 
     desired_capabilities=caps) 

그러나 그것은 새로운 세션을 시작하려고하고, 메시지와 함께 실패 할 것 같다

selenium.common.exceptions.WebDriverException: Message: Session is already started 
,

이전 버전의 Selenium처럼 기존 세션에 첨부 할 수 있습니까? 또는 이것은 geckodriver의 의도 된 행동입니까 (희망하지 않음)?

답변

3

좋아는 여기에 빠른 더러운 해킹 moveto 명령을 알고 있지만 적어도 시작된 브라우저에 연결해야합니다.

업데이트 : 음, geckodriver 너희들, 파이어 폭스를 계속 사용하려는 경우 단지 오래된 webdriver (미세 45 재생)를 지원하는 버전으로 다운 그레이드 및 유지, 그래서 순간에 일부 기능이 부족한 것 같다 표에 눈은 https://github.com/SeleniumHQ/selenium/issues/2285와 같습니다.

+0

지금은 무엇입니까? – Sajuuk

0

세션 ID를 사용하여 세션에 다시 연결할 수 있습니다. 그렇지 않은 불평,

class SessionRemote(webdriver.Remote): 
    def start_session(self, desired_capabilities, browser_profile=None): 
     # Skip the NEW_SESSION command issued by the original driver 
     # and set only some required attributes 
     self.w3c = True 

driver = SessionRemote(command_executor=url, desired_capabilities=caps) 
driver.session_id = session_id 

나쁜 일이있다가 여전히 작동하지 않습니다 : 사람이 더 우아한 해결책을 제공하지 않는, 그래서

firefox_capabilities = DesiredCapabilities.FIREFOX 
firefox_capabilities['marionette'] = True 
browser = webdriver.Firefox(capabilities=firefox_capabilities) 
print browser.service.port 
wait_forever() 

# get the ID and URL from the browser 
url = browser.command_executor._url 
session_id = browser.session_id 

# Connect to the existing instance 
driver = webdriver.Remote(command_executor=url,desired_capabilities={}) 
driver.session_id = session_id 
+0

아직 운이 없습니다. 'webdriver.Remote()'생성자에서 세션을 할당하기도 전에 충돌이 발생합니다. 현재 구현시 새로운 세션 생성이 하드 코드 된 것 같습니다 : https://github.com/SeleniumHQ/selenium/blob/master/py/selenium/webdriver/remote/webdriver.py#L177. 이견있는 사람? –

+0

@AlexMorozov 그것이 저에게 효과적이기 때문에 문제가되어서는 안됩니다. 유일한 차이점은 내가'마리오 네트 '를 사용하지 않는다는 것입니다. 'webdriver.Remote' 호출의'capabilities '를'{}'로 사용해 보았습니까? 아니면 새로운'capabilities'를 추가 했습니까? – RemcoW

+0

'capabilities' 옵션을 모두 시도했습니다. 실제로 파이어 폭스의 최신 버전이 옛날 드라이버를 비추천하고 브라우저와 상호 작용할 수있는 유일한 방법 인'마리오 네트 (marioette) '를 만들기 전까지는 저 또한 저를 위해 일해 왔습니다. 따라서 문제는 새로운 조건을 고려하여 세션에 다시 붙이는 방법입니다. –

관련 문제