2009-03-10 5 views
1

PHP로 다음 웹 페이지를 하나씩 파싱하려고하는데 첫 페이지를 열면 다음 페이지에 대한 링크가 자바 스크립트에 숨겨져 있다는 것을 알게되었습니다.어떻게 PHP로 숨겨진 자바 스크립트 링크를 해결합니까?

어쨌든 다음 웹 페이지를 구문 분석 할 수 있습니까? URL에 "page = 2"와 같은 변수가 암호화되어있는 경우 해당 방법을 통과하지만 URL은 암호화됩니다.

-LPG

답변

0

유일한 방법은 자바 스크립트 링크를 구문 분석하고이를 다음 정규 표현식을 작성하는 것입니다. 페이지에 URL이 자바 스크립트 코드에 있다면 이것은 아마 단지 예를 들어, 작동합니다 :

<a href="javascript:open('something/some_page.html');">Something</a> 

대신

<a href="javascript:open(someField.value);">Something</a> 

의 때문에 두 번째 예제와 함께, 당신은 실제로 자바 스크립트를 처리 할 것 PHP를 사용하여 매우 어렵습니다.

각 사이트의 URL 형식이 다르기 때문에 웹 사이트 관련 정규 표현식을 만들어야합니다. 그래서 Cnn.comReddit.com

1

기본적으로 당신이있어 두 가지 선택 다르게 자신의 URL을 포맷 할 수 있습니다

  1. 당신이 # 함께 가고 싶은 경우
  2. 이 유효한 클라이언트

을 모방 자신의 논리를 에뮬레이트 1 자바 스크립트 코드를 읽고 어떻게 동작하는지 알아 내야합니다. 코드에 너무 많이 의존하기 때문에 실제로는 더 잘 설명 할 수 없습니다. Javascript와 코드를 "grok"알아야합니다. 그런 다음 코드가 동일한 로직을 사용하여 "다음 페이지"URL을 생성하십시오.

시스템에서 AJAX를 사용하는 경우 여전히 클릭 할 수있는 것과는 달리 에뮬레이션 할 수 있습니다. 그렇게하기 위해서는 파이어 폭스 파이어 폭스 확장 기능과 같은 도구를 사용하면 브라우저가 "뒤에서"자신의 서버로 보내는 것을 볼 수 있습니다. 그런 다음 코드가 AJAX 요청을 모방 한 가짜 HTTP 요청을 보내도록합니다. Firebug와 같은 도구 없이도 실제로이 작업을 수행 할 수 있습니다. 자바 스크립트 코드를보고 브라우저가 전송할 내용을 추측합니다. 그러나 Firebug와 같은 것을 사용하면 추측하는 대신 내용을 볼 수 있습니다.

# 1 대신 사용하려면 실제 브라우저를 사용하고 프로그래밍 방식으로 Selenium과 같은 것을 사용하거나 Rhino와 같은 것을 사용하여 Javascript를 실행해야합니다. Selenium과 같은 제어 시스템과 함께 실제 브라우저를 사용하는 것이 아마도 가장 쉬운 방법 일 것입니다. 그러나 브라우저가 페이지를 렌더링하는 데 걸리는 시간에 따라 제한되므로 속도가 느려집니다. Rhino 또는 비슷한 것을 사용하는 솔루션은 더 빠를 것입니다.하지만 HTML을 파싱하고 모든 관련 JS 파일 등을 포함해야하므로 더 많은 작업이 필요합니다. 최후의 조치.

관련 문제