2016-09-19 2 views
0

나는 넷플 릭스 웹 사이트에 자동 로그인 스크립트를 만들려고 해요 : https://www.netflix.com/it/셀레늄 : 요소도 현재는 가시 때문에 상호 작용되지 않을 수 있습니다

코드입니다 :

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

driver = webdriver.Firefox() 
while True: 
    driver.get("https://www.netflix.com/it/") 
    login = driver.find_element_by_css_selector(".authLinks.signupBasicHeader") 
    login.click() 
    element = driver.find_element_by_name("email") 
    element.send_keys("[email protected]") 
    submit = driver.find_element_by_css_selector(".btn.login-button.btn-submit.btn-small") 
    submit.click() 
    element2 = driver.find_element_by_name("password") 
    element2.send_keys("test1") 
    submit.click() 

를하지만 가끔은 작동 때로는 그렇지 않습니다 그것은이 예외가 발생합니다 :

Traceback (most recent call last): 
    File "netflix.py", line 35, in <module> 
    submit.click() 
    File "/home/user/.local/lib/python3.5/site-packages/selenium/webdriver/remote/webelement.py", line 72, in click 
    self._execute(Command.CLICK_ELEMENT) 
    File "/home/user/.local/lib/python3.5/site-packages/selenium/webdriver/remote/webelement.py", line 461, in _execute 
    return self._parent.execute(command, params) 
    File "/home/user/.local/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 236, in execute 
    self.error_handler.check_response(response) 
    File "/home/user/.local/lib/python3.5/site-packages/selenium/webdriver/remote/errorhandler.py", line 192, in check_response 
    raise exception_class(message, screen, stacktrace) 
selenium.common.exceptions.ElementNotVisibleException: Message: Element is not currently visible and so may not be interacted with 
Stacktrace: 
    at fxdriver.preconditions.visible (file:///tmp/tmp7otgskq8/extensions/[email protected]/components/command-processor.js:10092) 
    at DelayedCommand.prototype.checkPreconditions_ (file:///tmp/tmp7otgskq8/extensions/[email protected]/components/command-processor.js:12644) 
    at DelayedCommand.prototype.executeInternal_/h (file:///tmp/tmp7otgskq8/extensions/[email protected]/components/command-processor.js:12661) 
    at DelayedCommand.prototype.executeInternal_ (file:///tmp/tmp7otgskq8/extensions/[email protected]/components/command-processor.js:12666) 
    at DelayedCommand.prototype.execute/< (file:///tmp/tmp7otgskq8/extensions/[email protected]/components/command-processor.js:12608) 

예외는 웹 페이지의 일부가 그 부분은 페이지 실제로 사용의 경우에도 (눈에 보이지 않는 것을 말한다을 y) ... 그것은 일종의 버그입니다. 어떻게 이것을 무시할 수 있습니까?

+0

요소를 표시하기 위해 드라이버에 시간을주기 위해 url을 연 후'wait'을 추가하십시오. – Flint

+0

time.sleep을 추가했지만 작동하지 않습니다 ... – CatchJoul

답변

0

테스트 코드를 while 루프에 넣을 필요가 없습니다. 로그인 양식을 한 번 제출해야합니다. 나는 그것이 성공적으로 작동 할 때, 다음 반복은 아무런 형태도 없기 때문에 에러를 발생시킨다.

또한 비밀번호 입력 전후에 제출 버튼을 클릭합니다. 폼이 완전히 채워지면 클릭하고, 가능한 경우 빈 폼을 테스트하지 않는 것이 좋습니다.

from selenium import webdriver 

driver = webdriver.Firefox() 
driver.get("https://www.netflix.com/it/") 
login = driver.find_element_by_css_selector(".authLinks.signupBasicHeader") 
login.click() 
element = driver.find_element_by_name("email") 
element.send_keys("[email protected]") 
submit = driver.find_element_by_css_selector(".btn.login-button.btn-submit.btn-small") 
submit.click() 
element2 = driver.find_element_by_name("password") 
element2.send_keys("test1") 
submit = driver.find_element_by_css_selector(".btn.login-button.btn-submit.btn-small") 
submit.click() 
+0

답변 해 주셔서 감사합니다. 사실 및 전체 스크립트 (예외가있는 곳에서 제출 부분을 게시 함)에 여러 개의 계정으로 로그인하려고하므로 True가 필요합니다. 그래서 while 회 돌이가 필요해. 그리고 제출에 관해서는 netflix 로그인 페이지가 전자 메일과 암호가 같은 페이지를 열 때가끔 2 번 썼습니다. 때로는 전자 메일 양식이 표시되고 암호 입력에 걸리는 제출 단추가 있습니다. 모든 양식 (전자 메일 및 비밀 번호)을 제출하려면 여기에 예제가 있습니다. http://imgur.com/a/4lGf6 – CatchJoul

+0

다른 사용자와 테스트하려면 로그인 기능을 작성하고 다른 데이터로 호출해야합니다. 경우. –

+0

@AllExJ 당신은 예절 바르게 행동함으로써 시작할 수 있습니다. –

관련 문제