페이지

레이블이 htmlunit인 게시물을 표시합니다. 모든 게시물 표시
레이블이 htmlunit인 게시물을 표시합니다. 모든 게시물 표시

2011년 3월 4일 금요일

groovy로 htmlunit을 사용하기

하루에 몇번씩 확인하는 웹페이지가 있습니다.
로그인절차도 거쳐야 합니다.
매시간 이 웹페이지를 읽어서 메모장에 보여주는 스크립트를 작성해보았습니다.

HtmlUnit 준비

http://htmlunit.sourceforge.net/ 에서 라이브러리를 다운받습니다.

클래스패스

htmlunit 을 사용하기위해서 클래스패스에 관련라이브러리들을 추가해야 합니다.

groovy.home/extlib/htmlunit 폴더를 만들고 관련라이브러리를 모두 복사합니다.

conf/groovy-starter.conf 파일에 아래내용을 추가합니다.
load !{groovy.home}/extlib/htmlunit/*.jar

htmlunit.groovy

import com.gargoylesoftware.htmlunit.WebClient
def client = new WebClient()
client.setJavaScriptEnabled(false)

// 로그인처리
def page = client.getPage('로그인주소')


// 첫번째 폼이 로그인폼일경우 page.forms[0]
def j_username = page.forms[0].getInputByName('j_username') // 아이디 입력필드명
j_username.valueAttribute = '아이디'

def j_password = page.forms[0].getInputByName('j_password') // 암호 입력필드명
j_password.valueAttribute = '암호'

page = page.forms[0].submit() // 폼전송, 로그인처리
// 원하는페이지 가져오기
page = client.getPage('원하는페이지주소')

// 파일로 저장하고 html로 저장하고 싶으면 asXml()사용
new File('result.log').write(page.asText())

// 메모장으로 파일을 열어줍니다.
'notepad.exe result.log'.execute()


에러

Caught: java.lang.LinkageError: loader constraint violation: loader (instance of <bootloader>) previously initiated loading for a different type with name "org/w3c/dom/NamedNodeMap"
와 같은 에러가 발생하면
/extlib/htmlunit/xml-apis-*.jar 파일을 지워줍니다.

매시간 수행되도록 "제어판>예약된작업" 에 등록합니다.