일이 바빠 포스팅 하기가 너무 힘들지만 그래두 열심히 하려고 하고있습니다. ㅜㅜ

 

지난 포스팅때 만들어 놓은 Naver Login  - selenium-JS ( iframe 대처 방안 - IE 버전) 이 있는데요

 

// naver 자동 로그인하여서 최근 메일 가져오기  - IE 

http://ipex.tistory.com/entry/webUI-Naver-Login-seleniumJS-iframe-%EB%8C%80%EC%B2%98-%EB%B0%A9%EC%95%88-IE%EB%B2%84%EC%A0%84?category=770641

 

해당 소스코드가 Windwos 10 에서 같은 드라이버와 같은 브라우저 버전 같은 npm Node.js 버전을 사용하여도

 

동작하지 않습니다.

 

??

 

일단 멈춰지는 소스코드는 await loginBtn.click(); 입니다.

여기서 클릭이 안됐는데 다음 DOM 찾고 객체 찾고를 반복 하다보니

 

되지않던 현상이였습니다.

 

관련 내용을 찾아 보니

 

셀리니엄 HQ에 이런 이슈가 있더군요

 

// 링크

https://github.com/SeleniumHQ/selenium/issues/4292

 

 

 

이슈는 역시 Closed 되어있고

 

셀레니엄팀에서 해줬을 거라고는 생각 하지 않습니다. 

 

(최신버전을 쓰고있는 저에게 되지않으니까요 Stable 버전 기준으로)

 

아래 글 내용들을 읽어 보니

 

결국 우회 처리로 요소를 클릭 하였습니다.

 

그 우회 처리란

  // login 버튼 가져와서 클릭          let loginBtn = await driver.findElement(By.css("input[type='submit']"));         await loginBtn.click(); 

 

기존에는 위와같이 await loginBtn.click() 이 동작하였지만 Windwos 10 에서는 동작하지가 않습니다.

 

그래서 사용하는 우회 방법은

 

Driver 모듈에 있는 executor를 이용하는 방법입니다.

 

일단 JS DOC을 한번 확인해보겠습니다.

 

 

보시면 2개가 있는데 Async 근 비동기방식이고 제가 펼쳐 놓은 이 executor는 동기 방식으로 차이는 없습니다.

 

자 보시면 (Script,... args) 라고 되어있습니다.

 

앞에 파라미터로는 스크립트가 들어갈 것이고 뒤에 arguments로는 WebElement가 들어가야 된다고 쓰여있네요

 

그럼 저 위에 동작하지 않는 login Btn 을 어떻게 클릭을 할것인가 하면

 

말그대로 앞에는 스크립트 ( 클릭 스크립트를 넣을것이고) 뒤에는 가져온 WebElement ( loignBtn 을 넣어서 확인합니다.)

 

 

         await driver.executeScript('return arguments[0].click()",loginBtn);  

단순합니다. 우측에 놓은 element 가 arguments로 넘어오게 되고 1개만 넘겼으니 [0]으로 첫번째 값을 가져오면 됩니다.

 

가져온 후에 click 을 하는 스크립트로 return 을 넣어주면 driver executor에서 해당 반환된 스크립트를 브라우저로

 

인젝션하게 되어 실행을 합니다.

 

해당 이슈에서도 그렇고 여러 Win10 분들은 이와 같은 방안으로 우회를 하고 있는 것으로 보여집니다. 

 

win 10에서 네이버 로그인시 DOM 도 제대로 못가져오는 경우가 있는데

 

이에 대해서는 다음 포스팅때 작성 하도록 하겠습니다.

 

감사합니당

 

 

 

 

+ Recent posts