PinkWink / DataScience

책) 파이썬으로 데이터 주무르기 - 소스코드 및 데이터 공개
http://pinkwink.kr/1070
246 stars 502 forks source link

174p In[4] 로그인 화면이 바뀌어서 에러가 납니다 #27

Open ghost opened 6 years ago

ghost commented 6 years ago

html 소스 코드를 확인하면 id= 라는 항목에서 id 대신 id_area, pw 대신 pw_area라고 바뀐 것 같지만 코드를 실행해보면 다음과 같은 에러가 뜹니다

NoSuchElementException Traceback (most recent call last)

in () ----> 1 elem_login = driver.find_element_by_id("id_area") 2 elem_login.clear() 3 elem_login.send_keys("ㅓㅓㅓ") 4 5 elem_login = driver.find_element_by_id("pw_area") ~\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in find_element_by_id(self, id_) 357 element = driver.find_element_by_id('foo') 358 """ --> 359 return self.find_element(by=By.ID, value=id_) 360 361 def find_elements_by_id(self, id_): ~\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in find_element(self, by, value) 964 return self.execute(Command.FIND_ELEMENT, { 965 'using': by, --> 966 'value': value})['value'] 967 968 def find_elements(self, by=By.ID, value=None): ~\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in execute(self, driver_command, params) 318 response = self.command_executor.execute(driver_command, params) 319 if response: --> 320 self.error_handler.check_response(response) 321 response['value'] = self._unwrap_value( 322 response.get('value', None)) ~\Anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py in check_response(self, response) 240 alert_text = value['alert'].get('text') 241 raise exception_class(message, screen, stacktrace, alert_text) --> 242 raise exception_class(message, screen, stacktrace) 243 244 def _value_or_default(self, obj, key, default): NoSuchElementException: Message: no such element: Unable to locate element: {"method":"id","selector":"id_area"} (Session info: chrome=68.0.3440.106) (Driver info: chromedriver=2.41.578737 (49da6702b16031c40d63e5618de03a32ff6c197e),platform=Windows NT 10.0.16299 x86)
PinkWink commented 6 years ago

흠.. 이상하네요... 로그인 전용 화면

https://nid.naver.com/nidlogin.login?mode=form

으로 가시면 id와 pw라는 id는 모두 정상적으로 읽어집니다.

mug200ml commented 6 years ago

작가님 질문 드립니다. 네이버 로그인 진행시 문제가 발생합니다.

위에서 설명해 주신 바뀐 로그인 전용화면을 이용했습니다. 하지만 윗분과 비슷한 에러가 발생합니다. wed-driver도 깃허브에 올라와 있는것으로 바꾸고 진행을 했습니다.

아래 에러 내용입니다. 다르게 검토해 볼것이 있을까요?

==============

WebDriverException Traceback (most recent call last)

in () 1 elem_login = driver.find_element_by_id("id") ----> 2 elem_login.clear() 3 elem_login.send_keys('****************') 4 5 elem_login = driver.find_element_by_id("pw") ~\Anaconda3\envs\jupyter-env\lib\site-packages\selenium\webdriver\remote\webelement.py in clear(self) 93 def clear(self): 94 """Clears the text if it's a text entry element.""" ---> 95 self._execute(Command.CLEAR_ELEMENT) 96 97 def get_property(self, name): ~\Anaconda3\envs\jupyter-env\lib\site-packages\selenium\webdriver\remote\webelement.py in _execute(self, command, params) 626 params = {} 627 params['id'] = self._id --> 628 return self._parent.execute(command, params) 629 630 def find_element(self, by=By.ID, value=None): ~\Anaconda3\envs\jupyter-env\lib\site-packages\selenium\webdriver\remote\webdriver.py in execute(self, driver_command, params) 318 response = self.command_executor.execute(driver_command, params) 319 if response: --> 320 self.error_handler.check_response(response) 321 response['value'] = self._unwrap_value( 322 response.get('value', None)) ~\Anaconda3\envs\jupyter-env\lib\site-packages\selenium\webdriver\remote\errorhandler.py in check_response(self, response) 240 alert_text = value['alert'].get('text') 241 raise exception_class(message, screen, stacktrace, alert_text) --> 242 raise exception_class(message, screen, stacktrace) 243 244 def _value_or_default(self, obj, key, default): WebDriverException: Message: unknown error: call function result missing 'value' (Session info: chrome=68.0.3440.106) (Driver info: chromedriver=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f),platform=Windows NT 10.0.17134 x86_64)
mug200ml commented 6 years ago

동일증상이라고 질문 올렸던 사람입니다. 저는 드라이버 버전을 최신으로 교체해서 성공했습니다.

위 제 로그에 보면 (Session info: chrome=68.0.3440.106) (Driver info: chromedriver=2.33.506120

크롬 버젼과 드라이버 버전이 나오는데 위 드라이버 다운로드 사이트 에 가면 드라이버 히스토리에 지원하는 크롬 버전이 있습니다. 그래서, 제 크롬 v68에 맞는 드라이버 중에 최신인 드라이버v2.41로 바꾸고하니까 성공했습니다.

로그인을 위해 새로열린 크롬을 닫고 주피터도 재시작하니까 되더군요. 정확하지는 않은데 아나콘다에서 생성된 주피터 노트북 단축키 말고 터미널에서 직접 주피터 노트북을 실행하니까 되는것 같기도 합니다.

그리고 xpath=에 붙여 넣기 할때 꼭 양쪽에 따옴표가 필요하네요. 안그럼 오류가 발생하네요. xpath='''붙여넣기''' 또는 xpath="""붙여넣기""" 다른분들 참고하시길 바랍니다.

PinkWink commented 6 years ago

^^ @mug200ml 감사합니다.