2016-09-14 2 views
7

사용자가 제공 한 특정 URL의 변경 사항을 확인하는 방법을 찾고있었습니다. WWW::Mechanize을 사용하여 성공적으로 수행 할 수있는 스크립트를 집에서 작성했습니다. 문제는 모든 방화벽을 차단하는 그룹 정책을 가진 다른 컴퓨터 네트워크에서 실행해야한다는 것입니다. 방화벽 문제가 아니기 때문에 Perl을 통과시켜야합니다. 그래서이 문제를 해결하기 위해 Perl 웹 브라우저를 제어하십시오.Perl 스크립트를 통해 Chrome 제어하기

네트워크에있는 컴퓨터는 Google 크롬과 IE8 만 실행하며 다른 정책 (WWW::Mechanize::Firefox 생각)으로 인해 Firefox를 설치할 수 없습니다. 내가 제공 할 대부분의 URL이 잘 작동하지 않는 웹 사이트이기 때문에 스크립트에서 IE8을 호출하고 싶지는 않습니다. 따라서 Chrome에서만 나를 남겨 둡니다. 웹 소켓 연결을 통해 크롬 확장 API를 모두 노출

:

그렇게 할 수있는 모듈을 검색, 난 단지 AnyEvent::Chromi를 발견했다.

이것은 작동하지 않습니다 (정책이 websocket도 차단할 수 있음).

Perl 스크립트 내에서이 문제를 해결하거나 Chrome을 제어하는 ​​다른 방법이 있습니까?

+0

셀레늄이 있습니다. https://metacpan.org/pod/Selenium::Chrome을 참조하십시오. 하지만 당신이 뭔가를 설치해야한다고 생각합니다. Perl은 여기에 적합한 도구가 아닐 수도 있습니다. – simbabque

+0

@simbabque 필자도이 점을 생각했지만, 그럼에도 불구하고 Perl에서 그렇게 할 것을 요구 받았다. 이유를 모르겠다. 이제 펄을하는 방법이 더 궁금합니다. – yonyon100

+0

@ yonyon100 나는 업무를 수행하라는 요구가 있지만 IT 지원을하지 않는 것이 이상하다고 생각한다 : 나는 비슷한 문제가있다. (그러나 회사 랩톱에서는 '개인적'이다.) 나는 '독립형 파이썬'+ 셀렌. 문제없이 크롬을 명령 할 수있었습니다. 또 다른 가능성은 PowerShell + IE8을 사용하는 것입니다. 유용한 내장 자동화가 있습니다. – eballes

답변

1

IE8을 언급 한 이래로, 나는 당신이 Windows 시스템을 다루고 있다고 가정하고 있습니다. 그리고 WWW : Mechanix :: Firefox를 고려했다고 언급 했으므로 핵심 모듈에만 국한되지 않는 것처럼 들립니다.

크롬 브루어를 자동화하는 유일한 방법은 Win32::GuiTest을 사용하여 Chrome 브라우저를 제어하는 ​​것입니다. 키보드 입력 (예 : 마우스 사용 안 함) 만 사용하여 수동으로 테스트를 수행하는 방법을 파악할 수 있다면 마우스 에뮬레이션을 파악하여 다양한 작업을위한 올바른 위치로 커서를 이동하는 것보다 쉬운 작업이 될 수 있습니다.

반드시 사용해야 할 경로인지 확실하지 않습니다. 그것은 당신이 처리해야하는 제약으로 당신이하고 싶은 것을 성취 할 수있는 유일한 방법 일뿐입니다.

+0

분명히, 나는 그 중 하나를 설치할 수 없습니다. 이전 netadmin처럼'WWW :: Mechanize :: Firefox'를 설치 한 것처럼 보이지만 새로운 모듈은 새로운 모듈을 설치할 수 없습니다 ...하지만이 모듈을 저에게 소개해 주셔서 감사합니다! – yonyon100

1

CPAN 모듈을 사용하지 않고 처음부터이 작업을 수행 할 수도 있습니다. 유닉스 도메인 (UD) 소켓을 사용하여 Linux (Ubuntu 16.04, Chrome 버전 53)에서이를 테스트했습니다. 불행히도 Windows에는 UD 소켓이없는 것 같지만 명명 된 파이프를 사용하여 Windows에서 동일한 작업을 수행 할 수 있어야합니다.

먼저 google-chrome이 백그라운드에서 실행되고 있는지 확인하십시오. 은 native messaging API을 통해 을 기본 호스트와 통신 할 Chrome App 을 만들어야합니다. 기본 호스트는 STDIN 및 에서 메시지를 읽는 스크립트가 모두 STDOUT을 통해 응답을 반환 할 수 있습니다. 필자는 Python 스크립트와 Perl 스크립트를 테스트했습니다.

이제 크롬 브라우저와 통신 할 수있는 독립 펄 스크립트 위해서는 기본 호스트 ( 하여 네이티브 호스트에 의해 생성)은 UD 소켓을 통해 요청을 보낼 것이다; 네이티브 호스트는 에 표준 출력 파이프를 통해 요청을 전달합니다. 그런 다음 Chrome 앱 (자바 스크립트로 작성) 이 요청을 수신합니다.Chrome 앱은 Chrome JavaScript API를 사용하여 요청 된 데이터를 가져와 기본 호스트로 반환합니다. 마지막으로, 원시 호스트는 결과를 소켓을 통해 Perl 스크립트로 전달합니다.

자세히 알 수 있듯이 이것을 설정하는 데 필요한 몇 가지 세부 정보가 있지만 은 내 Linux 플랫폼에서 작동하는지 확인할 수 있습니다. 더 많은 정보가 필요하면 알려 주시기 바랍니다 세부 사항.

관련 문제