2011-03-27 5 views
1

웹 페이지와 상호 작용하기 위해 Selenium 2 Java API를 사용하고 있습니다. 내 질문은 : 링크 대상의 콘텐츠 형식을 어떻게 검색 할 수 있습니까?셀렌 2 : 링크 대상의 컨텐츠 유형 감지

기본적으로 배경입니다. 링크를 클릭하기 전에 응답이 HTML 파일인지 확인하고 싶습니다. 그렇지 않다면 다른 방식으로 처리해야합니다. PDF 파일의 다운로드 링크가 있다고 가정 해 봅시다. 응용 프로그램은 브라우저에서 열지 않고 해당 URL의 내용을 직접 읽어야합니다.

목표는 현재 위치가 HTML, PDF, XML 또는 적절한 파서를 사용하여 문서에서 유용한 정보를 추출하는 것을 자동으로 알 수있는 응용 프로그램을 만드는 것입니다.

업데이트

추가 현상금 : 나에게 주어진 URL의 내용 유형을 얻을 수있는 최적의 솔루션으로 갚아 주실 것이다.

답변

5

Jochen은 콘텐츠를 다운로드하지 않고 콘텐츠 형식을 얻는 방법은 HTTP HEAD이며 셀레늄 webdrivers는 그런 기능을 제공하지 않는 것으로 보입니다. URL의 콘텐츠 유형을 가져 오는 데 도움이되는 다른 라이브러리를 찾아야합니다.

이 작업을 수행 할 수있는 Java 라이브러리는 Apache HttpComponents, 특히 HttpClient입니다.

(다음 코드는 안된)

HttpClient httpclient = new DefaultHttpClient(); 
HttpHead httphead = new HttpHead("http://foo/bar"); 
HttpResponse response = httpclient.execute(httphead); 
BasicHeader contenttypeheader = response.getFirstHeader("Content-Type"); 

System.out.println(contenttypeheader); 

이 프로젝트는 JavaDoc for HttpClient 발행의 HttpClient interface에 대한 문서가 좋은 예제를 포함하고 있습니다.

+0

고마워, 나는 그것을 밖으로 시도 할 것이다. – Alp

+0

코드 조각에 문제가 있습니다. 엔티티는 응답이 ok 인 경우에도 항상 null입니다. – Alp

+0

HttpHead 응답에'HttpEntity'가 포함되지 않았을 수 있습니다. 이 예제를 응답에서 Content-type 헤더를 가져 오도록 변경했습니다. 아직 테스트되지 않았습니다. –

0

들어오는 데이터를 처리 할 내용 유형을 파악할 수 있습니다. 먼저 이것을 알아 내야하는 이유가 확실하지 않습니다. 그렇다면 HEAD 메서드를 사용하여 Content-Type 헤더를 살펴보십시오.

+0

내가 미리 알아 내지 못하면 Firefox에 다운로드 팝업이 표시되는 것을 피할 수 있습니다. – Alp

+0

이 경우 머리 가야합니다. 실제 내용없이 GET 호출에서 얻을 수있는 모든 헤더를 제공합니다. –

+0

응답 헤더를 가져 오는 적절한 방법을 찾을 수 없습니다. 기억 해요, 나는 셀레늄 2를 사용하고 있습니다. – Alp

0

DOM에서 모든 URL을 검색 한 다음 각 URL의 마지막 몇 문자를 구문 분석하여 (자바 정규식을 사용하여) 링크 유형을 결정할 수 있습니다.

마지막 점으로 진행하는 문자를 구문 분석 할 수 있습니다. 예를 들어, URL http://yoursite.com/whatever/test.pdf에서 pdf의 압축을 풉니 다. 그에 따라 테스트 로직을 적용하십시오.

문제를 지나치게 단순화합니까?

+0

나는 이것이 너무 단순하다고 생각합니다. 대부분의 URL은 /generateImage.php?name=test와 같으며 모든 그래픽 형식이 될 수 있습니다. 나는 어떻게 든 링크 내용 자체를 가져와야한다고 생각한다. – Alp