IE 버전입니다.
트러블 슈팅
현재 capabilities 가 동작하지 않는데
1. 이그노어프로텍티드모드 세팅 true
2. 이그노어줌세팅 true
2개가 있는데 이유는 IE는 줌 100% , 보안에서 보호체크가 전부되어야 하기 때문이다.
이거를 코드상으로 무시를 하고 킬수가있는데 일단 코드상은 안되니
IE에서 직접 설정 후 코드를 돌려보시기 바랍니다.
iframe (IE의 경우는 swtichTo.frame('string') 이 되지않아
iframe을 직접 찾아서 WebElement를 넘겨주어야 합니다. (IE상의 이벤트 사이클 문제로 인함)
결과 코드
const _url = "https://www.naver.com/"; require('iedriver'); const webdriver = require('selenium-webdriver'); const {By,Util} = webdriver; // 드라이버 빌드 // IE const Capabilities = require('selenium-webdriver/lib/capabilities').Capabilities; let capabilities = Capabilities.ie(); capabilities.set('ignoreProtectedModeSettings', true); capabilities.set('ignoreZoomSetting', true); capabilities.set('IgnoreZoomLevel', true); const driver = new webdriver.Builder().withCapabilities(capabilities).build(); const register_pc = false; (async () => { try { // 페이지 이동 await driver.get(_url); // 윈도우 최대화 headless 옵션 사용시 는 의미없음 await driver.manage().window().maximize(); // input값 가져옴 let inputId = await driver.findElement(By.css('input#id')); // ID 입력 await inputId.sendKeys('myID'); // password 값 가져옴 let inputpw = await driver.findElement(By.css('input#pw')); // password 입력 await inputpw.sendKeys('mypw'); // login 버튼 가져와서 클릭 let loginBtn = await driver.findElement(By.css("input[type='submit']")); await loginBtn.click(); // 최초 실행 PC일 경우 해당 페이지가 나타나기 때문에 존재한다면 등록 유무 선택 let page_ = await driver.findElements(By.css('fieldset.login_form a')); if(!!page_){ // 등록 page_[0] 등록 안함 page_[1] !!register_pc ?console.log("등록합니다.") :await page_[1].click(); } await driver.sleep(2000); // selenium-js 에서는 switchTo.frame을 통해서 프레임을 변경 한다. console.log("프레임 변경"); await driver.sleep(5000); await driver.switchTo().frame(await driver.findElement(By.id("minime"))); // 변경 후 프로필에 메일을 가져오고 클릭 let mail_profile = await driver.findElement(By.id('mail_count_profile')); // 메일 클릭 // 화면 제어가 빠른 경우에 대한 sleep -> 추후 isContentsLoaded 또는 WebElement Condition 으로 변경 console.log(await mail_profile.getAttribute('href')); await driver.sleep(1500); await mail_profile.click(); // // 기존 프레임으로 다시 돌아오는 경우 (page이동이없었을때) // // await driver.switchTo().defaultContent(); // // 임시 테스트용 Sleep await driver.sleep(2000); console.log(await driver.getTitle()); console.log(await driver.getCurrentUrl()); let newUrl = await driver.getCurrentUrl(); await driver.navigate().to(newUrl); // // 가장 최상단 메일 의 Subject를 가져옴 let mailTitle = await driver.findElement(By.css('ol.mailList.sender_context li .subject')); // // 셀레니엄 JS에서 getText는 innerText를 가져온다고 되어있습니다. console.log(await mailTitle.getText()); // 페이지 뒤로가기 // await driver.navigate().back(); } catch(err){ // Node Debug시 메시지가 너무길어 한글로 처음과 끝을 지정해서 보여지기 쉽게 처리 console.log("자동화 도중 에러 ",err + " 에러메시지 끝 "); } finally { await driver.sleep(3000); await driver.quit(); } })();