Perl/WWW-Mechanize-Firefox 페이지의 소스 보기
마지막으로 [b]
-- Loading page list... --
내용출력
로그인[l]
Diary
[f]
최근변경내역
[r]
페이지목록[i]
횡설수설[2]
게시판[3]
링크
수정할 수 없습니다: Perl/WWW-Mechanize-Firefox 는 읽기 전용 페이지입니다.
Cpan:WWW::Mechanize::Firefox
== # 개요 == 아주 좋다 -_-b 정말 좋다. [[/WWW-Mechanize]]의 단점은 자바스크립트를 처리하지 못한다는 것. 그래서 최근에 링크나 버튼의 동작을 자바스크립트로 제어하게 되어 있는 사이트에서는 쓰기가 매우 힘들었는데... 이 모듈은 자기가 firefox를 구동해서 웹사이트에 접근한다. 그래서 버튼이나 특정 영역을 클릭하는 동작 등을 그대로 시킬 수 있다. {{{#!vim perl my $fox = WWW::Mechanize::Firefox->new(); ... # id가 qbi인 span 태그를 찾고 my $camera = $fox->selector( 'span#qbi', single => 1 ); # 그걸 클릭 $fox->click( { dom => $camera, synchronize => 0 } ); ... # 아예 웹페이지에 있는 자바스크립트 함수를 곧바로 실행시켜 버릴 수도 있다. $fox->eval( 'google.qb.ti(true)' ); # 결과를 가져오는 건 WWW::Mechanize와 똑같이 하면 됨 my $content = $fox->content() }}} == # 유용한 옵션이나 메쏘드 == WWW::Mechanize::Firefox->new() 생성자에 *
activate => 1
- 새 탭을 생성했을 때 그 탭이 활성화되도록 함 *
tab => 'current'
- 현재 실행 중인 파이어폭스의 활성 탭을 사용 autoclose_tab(0) * 0으로 지정해주면 스크립트 실행이 끝난 후 탭이 닫히지 않게 한다. 기본값은 1이라서 곧바로 닫혀버림 == # 버그? == === # (해결됨) Firefox 창이 둘 이상 있을 때 사용이 끝난 탭을 닫을 수 없는 문제 === [https://rt.cpan.org/Public/Bug/Display.html?id=84418 RT #84418]에서 리포트. 0.72 버전에서 해결되었음.
정확히 버그가 생기는 경우를 특정하지는 못하겠는데, 일단 다음과 같이 하면 백발백중 재현되더라. * Firefox 를 실행하면 창이 뜸 (이 창을 A라고 하고) * 파일-새 창(Ctrl+N)을 선택하여 새 창을 하나 더 띄움 (이 창을 B라고 하면) * 창 B를 클릭하거나 해서 두 창 중 최근에 활성화된 창이 B가 되도록 함 * 이제 이 모듈을 쓰는 스크립트를 실행 스크립트 끝났을 때 * B창에 생성되었던 탭이 자동으로 닫혀야 하는데 닫히질 않는다. 탭 타이틀바에 있는 "x"버튼을 눌러도 안 닫힌다. 탭 닫기 메뉴를 선택해도 안 닫힌다. * A창에는 새 탭이 하나 생성되어 있다. 이 탭 역시 닫히질 않는다. * 일단 이 문제가 생기고 나면, B창을 닫아버리거나 해도 여전히 계속 A창에서 같은 문제가 발생함 최근 활성화되었던 창이 A창이어서 스크립트가 A창에서 실행되는 경우는 이 문제가 생기지 않는것 같다.
== #
MozRepl
부가 기능 필요 == 이 모듈을 쓰려면 먼저 firefox 에 mozrepl 확장 기능이 있어야 한다. 이걸 설치하면 4242 포트에 접속해서 파이어폭스를 제어할 수 있게 된다. * [https://addons.mozilla.org/ko/firefox/addon/mozrepl/?src=userprofile mozilla 사이트의 부가 기능 페이지] 설치 후에
도구->MozRepl->Start
를 해서 실행을 해줘야 한다. === # Firefox 20.0 에서 동작하지 않는 문제 === 그런데 이 mozrepl 1.0 버전이 Firefox 20.0 에서 동작하지 않는다. start가 되지 않음. firefox를 구버전으로 강제로 다운그레이드할 수도 있겠지만... 이 모듈 github에 갔더니 누가 이미 패치를 올려놨더라. * [https://github.com/bard/mozrepl github의 mozrepl 페이지] * [https://github.com/milouse/mozrepl/commit/3504aa5b45f4b438bc0e7ef53019558c4bd8bc1c E4X is not supported any more · 3504aa5 · milouse/mozrepl] - 관련 패치 따라서 저걸 직접 적용해서 설치해줘야 한다. * 일단 저 github 페이지에서 전체 파일을 zip 파일로 다운로드를 받는다. [https://github.com/milouse/mozrepl/archive/master.zip 다운로드 링크] * 압축을 푼다. * 저 패치 페이지에서 패치된 repl.js 파일을 받아온다. [https://raw.github.com/milouse/mozrepl/3504aa5b45f4b438bc0e7ef53019558c4bd8bc1c/chrome/content/repl.js 다운로드 링크] * 받아온 repl.js 를, 원래 있던 파일(chrome\content\repl.js)을 덮어쓴다. * 다시 zip으로 압축하고, 확장자를 xpi 로 바꾼다. * firefox에서 도구-부가 기능 에 들어간 후, 상단 톱니 아이콘을 클릭해서 '파일에서 부가 기능 설치'를 선택하여 저 xpi 파일을 설치한다. Upload:firefox_addon.png == # Comments ==
근데 git으로 mozrepl 저장소를 받아온 상태였다면, 저 패치만 쓱 가져와서 merge하려면 어떻게 해야 하나...
$ git remote add milouse git@github.com:milouse/mozrepl.git \\ $ git fetch milouse \\ $ git checkout -b milouse-patch \\ $ git cherry-pick 3504aa5b45f4b438bc0e7ef53019558c4bd8bc1c \\ \\ master가 변경되었는데 동일 파일 동일 라인과 관련 문제가 있어 자동 merge가 안된다면 그때는 conflict는 감수하고 손머지하셔야합니다. :-)
: 아하, 저 패치 제작자의 브랜치를 가져와야 하는 거군요. 감사합니다.
---- [[컴퓨터분류]]
Perl/WWW-Mechanize-Firefox
페이지로 돌아가기 |
다른 수정본 보기