코딩/puppeteer 자동화
puppeteer 트러블슈팅 - 2 > 텍스트 박스에 입력값 넣기 (How to fill an input field using puppeteer)
salzzak
2019. 9. 30. 16:54
728x90
※ puppeteer 1.20.0 버전에서 발생하는 현상입니다.
Selenium 자동화를 써오다가 새로운 javascript에 puppeteer에 적응하자니 헷갈리는게 너무 많다...
Selenium 에서는 sendkeys() 라는 함수를 쓰면 텍스트 박스에 값을 입력할 수 있었는데, puppeteer는 많이 달랐다.
네이버에서 간단하게 로그인하는 코드를 작성해봤다.
const page = await browser.newPage();
await page.setViewport({ width, height });
await page.goto( "https://www.naver.com/", { waitUntil : "networkidle2" } );
page.waitForNavigation(), // 해당 페이지의 탐색이 완료되면 클릭 이벤트를 실행
await page.click("#account > div > a > i"); // 클릭이벤트를 실행
await page.waitForSelector("#id");
await page.type("#id", "id 값");
await page.waitForSelector("#pw");
await page.type("#pw", "pw 값");
await page.click("#frmNIDLogin > fieldset > input");
await console.log("Done");
await page.close();
await browser.close();
처음에는 type("select 값" , "id 값");
이런식으로 입력을 시도 해봤는데....
위와 같이 id / pw 텍스트 박스에 제대로 들어가지 않고 뒤죽박죽으로 들어가는 현상이 있었다.
page.type() 함수 뿐만아니라, page.keyboard.type() 도 마찬가지였다. (내 PC가 이상한건지... ㅠ)
저번과 마찬가지로 한창 구글링 삽질을 하다가... 잘 작동하는 입력하는 함수를 찾았다.
await page.$eval('#id', el => el.value = 'id_tmp');
await page.$eval('#pw', el => el.value = 'pw_tmp');
잘 작동하지 않던 입력하는 코드 부분을 위 코드로 바꿔주면 된다.
실행 해보니 엉뚱하게 입력되지 않고, 의도한곳에 잘입력된다.