Node.js발행일 2022. 10. 18.원본 https://blog.naver.com/jword_/222903992604 ↗

selenium node js 기사 크롤링 해보기

selenium node js 기사 크롤링 해보기 — #selenium #selenium크롤링 #nodejs 학습법 이론 학습을 하기 이전, 명심해야할 학습법이 있다. 1.이해가지...

#Node js#Naver Blog

#selenium #selenium크롤링 #nodejs

학습법 이론

학습을 하기 이전, 명심해야할 학습법이 있다.

​

1.이해가지 않는다고 뒤돌아가 다시 보지 말 것

2.외우지 말라

=> 자주 봐서 외워짐을 당하라

=> 크롬을 통해 copy and paste하라

  1. 이해하는게 중요하다

=> 왜 생겨났는지?

=> 왜 사용하는지?

===> 응용이 가능해진다.

​

selenium 네이버 경제-포스트글 크롤링하기

이미지

selenium으로 할 수 있는 것들

이전글에서 selenium으로 매크로,크롤링을 할 수 있다는 말을 잠깐 했었다. 이후 네이버 로그인 실습도 직접해보았다. 오늘은 네이버 경제 포스트를 들어가 내용을 크롤링 해보자.

기본적인 세팅

기본적인 설치방법 및 모듈 불러오는 방법은 이전에 정리했으니 패스하겠다.

const {Builder,By,until} = require('selenium-webdriver');​​async function news(){ let driver = await new Builder() .forBrowser('chrome') .build();​ *//**네이버실행 await driver.get('https://www.naver.com'); await* driver.wait(until.elementLocated(By.css('#footer')));​ }

모듈을 불러오고 네이버를 실행하여 창이 모두 열릴때까지 대기해준다.

​

경제메뉴 클릭하기

이미지

네이버 오늘 읽을만한 글 카테고리에서 경제 카테고리를 클릭해주자. class명을 먼저 찾아주면된다.

async function news(){* //**경제 클릭 let listFinance = await* driver.findElement(By.className('\_NM\_THEME\_CATE tab id\_finance')); listFinance.click(); }

이전과 동일하게 클릭함수를 실행해주자.

​

맨위 포스트 클릭하기

이미지

똑같이 class를 찾아주면된다. 이번에 찾은 class명은 theme\_info인데 이게 하나만 있는게 아니라 두번째 글에도 세번째 글에도 이 class가 적용된 것을 확인 할 수 있다.

*//**맨위 POST 가져오기 let postLists = await driver.findElements(By.css('.theme\_info')); let getUrl = await* postLists\[0\].click();

이번에는 findElements로 class="theme\_info"를 모두 찾아주자.배열형태로 찾아지기에 그 중 가장 첫번째 ~~글을볼거니 \[0\]을 넣어주고 클릭해주자. =>오류~~

~~​~~

오류해결(중요)

위와 같은 방식으로 코드를 작성하면 오류가 난다. 이유는 우리가 driver.findElements로 class나 id를 찾을때는 실제 driver안에 있는 요소를 찾는 것이다. 실제 driver에 들어있는 요소와 사용자가 보고있는 요소가 다른 경우가 있다.바로 새 탭으로 페이지를 이동할 때이다.

​

새 텝으로 페이지가 이동되면, 새 텝의 소스가 driver로 넘어오지 않기 떄문에 새 탭에서 css나 id를 찾으려면 오류가 난다.

*//**맨위 POST 가져오기 let postLists = await driver.findElements(By.css('.theme\_info')); let getUrl = await postLists\[0\].getAttribute('href'); await* driver.get(${getUrl});

click()메서드를 실행하면 새 탭이 열리기 때문에 click()메서드 대신 .getAttribute("href")를 이용해주자.( 찾은 class="theme\_info"는 a테그이기에 href속성이 존재한다.)

​

이후 driver.get으로 새로 열어주면 새로운 창의 소스와 driver의 소스가 일치하는 것을 볼 수 있다.

​

모든 글 크롤링

이미지

새 창으로 들어간 후 모든 글이 class="se\_textarea"에 담겨있는 것을 확인했다. 모든 요소를 찾아준 후 for문을 돌려 콘솔로 찍어주자.

*//**Post글 콘솔로 가져오기 let textAreas = await driver.findElements(By.css('.se\_textarea'))​ for(let i = 0; i<textAreas.length; i++){ console.log(await* textAreas\[i\].getText()) }

다시 findElements를 사용하여 모든 클래스를 찾아준다. for문을 돌려 .getText();메서드를 사용해 콘솔로 찍어보자

이미지

모든 내용이 잘찍히는 것을 볼 수 있다.