728x90
반응형
특정 사이트에서 로그인을 한 뒤 원하는 데이터를 얻어야 될 경우가 생겼다.
api 사이트를 이용할 경우 편하긴 하지만 트랜젝션이 발생 할 때마다의 비용이 발생하기 때문에
node.js 에서 사용할 수 있는 puppeteer 를 경험해보기로 했다.
1. 필요한 npm 패키지를 설치한다.
$npm i puppeteer
2. 함수를 구현한다.
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch(); // puppeteer 시작
const page = await browser.newPage(); // 브라우저 실행
await page.goto('https://www.google.com'); // 해당 페이지로 이동
// other actions...
await browser.close(); // 브라우저 종료
})();
이러한 함수를 만들어두고 백엔드에서 api 요청이 들어올 때 원하는 사이트에 접속 후 원하는 데이터를 가져올 수 있게끔 구현하면 된다.
예시)
var puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
const hisnet_id = '히즈넷 아이디';
const hisnet_pw = '히즈넷 비밀번호';
//페이지로 가라
await page.goto('https://hisnet.handong.edu/login/login.php');
//아이디랑 비밀번호 란에 값을 넣어라
await page.evaluate((id, pw) => {
document.querySelector('input[name="id"]').value = id;
document.querySelector('input[name="password"]').value = pw;
}, hisnet_id, hisnet_pw);
//로그인 버튼을 클릭해라
await page.click('input[src="/2012_images/intro/btn_login.gif"]');
//로그인 화면이 전환될 때까지 .5초만 기다려라
await page.waitFor(500);
//로그인 실패시(화면 전환 실패시)
if(page.url() === 'https://hisnet.handong.edu/login/_login.php'){
student_id = 'nope';
name = 'nope';
}
//로그인 성공시
else{
//학사 페이지로 가서
await page.goto('https://hisnet.handong.edu/haksa/hakjuk/HHAK110M.php');
//학번을 가져오고
const element1 = await page.$('input[name="hakbun"]');
student_id = await page.evaluate(element1 => element1.value, element1);
//이름을 가져와라
const element2 = await page.$('td[width="240"]');
name = await page.evaluate(element2 => element2.textContent, element2);
}
//브라우저 꺼라
await browser.close();
})();
참조
https://zoomkoding.github.io/web/nodejs/histime/2019/01/24/crawler.html
728x90
반응형
'Back-End > Node.js' 카테고리의 다른 글
Node.js | Multer 설치 및 기본 메소드 (0) | 2022.04.26 |
---|---|
Node.js | 웹, 웹앱에서 핸드폰 기능 (ex 전화걸기, 문자보내기) (0) | 2022.04.25 |
Node.js | Base64 인코딩, 디코딩 하는법 (0) | 2022.03.30 |
Node.js | 쿠키 설정 (0) | 2021.12.20 |
Node.js | 환경 구성 | dotenv 사용법 (0) | 2021.09.15 |