2013-06-12 10 views
0

HTML을 검색 한 후 데이터를로드하는 일종의 플래시 플러그인이있는 웹 사이트를 긁어 내려고하고 있습니다. 다음 객체가 페이지에 수신되었습니다.플래시 플러그인 웹 사이트에서 웹 스크래핑 시도

<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" WIDTH="250" HEIGHT="20" id="Preloader"><PARAM NAME="movie" VALUE="/images/preloader.swf"> 
     <PARAM NAME="quality" VALUE="high"> 
     <PARAM NAME**strong text**="bgcolor" VALUE="#FFFFFF"><EMBED src="/images/preloader.swf" quality="high" bgcolor="#FFFFFF" WIDTH="250" HEIGHT="20" NAME="Preloader" ALIGN="" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED></OBJECT> 

wireshark에서받은 데이터를 찾으려고 시도했지만 행운이 없습니다. 이 플래시 플러그인에 대한 지식이나 그것이 작동하는 방식은 전혀 없습니다. 나는 최악의 시나리오를 추측하여 나는 이것을 할 수 없을 것이다.

HttpWebRequest mainRequest = (HttpWebRequest)(WebRequest.Create(URL)); 
      mainRequest.Method = "GET"; 
      mainRequest.Proxy = null; 
      WebResponse mainResponse = mainRequest.GetResponse(); 
      StreamReader dataReader = new StreamReader(mainResponse.GetResponseStream(), System.Text.Encoding.UTF8); 
      string data = dataReader.ReadToEnd(); 
      dataReader.Close(); 
      mainResponse.Close(); 
      return data; 

는 아무도 내가이 데이터를 수신하거나 수신되기 전에 데이터가 HTML로 주입 할 수의 WebResponse를 대기 할 수있는 방법을 알고 있나요. 어떤 도움이라도 대단히 감사하겠습니다.

업데이트 : 플래시 개체로 총을 조금 올린 것 같습니다. 테이블을 채우는 동안 이것은 로딩 애니메이션 일 뿐이라고 생각합니다. 나는 무슨 일이 일어나고 있는지보기 위해 피들러를 사용 해왔다. 로딩 div와 플래시 객체가 포함 된 요청 후 페이지가 반환됩니다. 몇 초 후 데이터가 준비되면 다른 페이지가 데이터와 함께 반환됩니다. 내가 기억할 수있는 것 (집에 없으므로 지금은 확인할 수 없음)에서 새 페이지는 원본과 동일한 요청 헤더를가집니다. 피들러에서 json 또는 ajax 데이터가 없습니다. Theres 클라이언트에서 볼 수있는 새로 고침을 일으키는 스크립트가 없습니다. 이 문제를 일으키는 원인을 이해하지 못합니다.

Ive는 웹 브라우저 객체를 간단히 살펴 보았지만 현재 약 200 페이지 정도 긁어 모으고 있으며 현재 1 분 정도 걸리면 성능이 크게 좋아질 것이라고 상상합니다. 나중에 플래시 객체가 업데이트 소스가 아니라는 것을 확인하기 위해 amf 뷰어를 시험해 보겠습니다.

서버가 테이블 준비가되었을 때이 페이지를 재전송 할 것으로 추측합니다. 서버가로드 div를 찾고이를 데이터 테이블로 바꾸면 전체 페이지가 재전송됩니까? 아니면 아약스/json 데이터 에서이 표시 wouldnt? 서버가 데이터를 다시 보내는 경우 새 페이지를 보낼 준비가 될 때까지 응답을 어떻게 열어 둘 수 있습니까?

감사합니다. JM.

답변

1

콘텐츠가 Flash 무비에 동적으로로드되는 경우 표준 HTTP 요청에서 발생할 가능성이 큽니다. 와이어 상어는 이와 같은 것을 감지하기에는 과잉 공격 일 수 있습니다. Charles, HttpFox 또는 screen-scraper와 같은 HTTP를 캡처하는 유틸리티를 사용하는 것이 좋습니다. 이러한 도구 중 하나를 사용하여 콘텐츠가로드되는 동안 발생하는 HTTP 요청을 살펴 봅니다. 요청을 결정한 후에는 코드에서 복제 할 수 있습니다.

즉, 플래시 무비에로드 된 데이터가 바이너리 프로토콜로 처리되는 경우도 있지만 (매우 일반적인 것은 아니지만) 상황이 좀 어려워지는 것을 보았습니다. AMF는 종종 이러한 경우에 사용되는 프로토콜입니다. 찰스 프록시는이 프로토콜을 감지하므로이 경우이 도구를 사용할 수 있습니다. 얼마 전 나는 extracting data that's delivered via AMF에 블로그 글을 썼다.Java 라이브러리를 다루지 만 .NET에서 이에 상응하는 것을 찾을 수 있습니다.

+0

나는이 정보를로드하기 전에이 정보를 얻기 위해 링크에 매개 변수를 추가 할 수 있음을 알았습니다. 필자는 모든 답변이 매우 도움이되었지만, 결국 답을 찾는데 도움이되었지만,이 솔루션을 올바른 것으로 표시했습니다. – JMG

0

플래시 내용이 실행 중이 아니므로 HttpWebRequest으로는이를 수행 할 수 없습니다. 당신이 돌려받는 응답은 단지 HTML입니다. 실제로 브라우저 (또는 브라우저와 유사한 객체)가 실행되어 해당 객체를로드하고 내용을 끌어 내야합니다. Javascript를 실행하기위한 라이브러리가 있다는 것을 알고 있지만 브라우저 외부에서 Flash 플러그인을 실행할 수있는 방법을 모르겠습니다.

WebBrowser 개체를 사용하는 것이 더 나을 것 같습니다. 그러나 Flash 콘텐츠를 실행하더라도 (정직하게도 알지 못합니다) 액세스 할 수 없습니다. DOM을보고보아야합니다.

0

Firebug 및/또는 TamperData를 사용하여 평소처럼 플래시로 페이지를로드하고 Flash에서 데이터를 가져 오기 위해 HTTP POST/GET을 할 때까지 기다리십시오.

  • 소켓
  • HTTP GET
  • HTTP POST

당신은 어떤 일이 일을 속일 수

플래시는 데이터를 얻을 수있는 세 가지 옵션이 있습니다. 다만 귀하의 요청이 모든 작은 일들이 포함되어 있는지 확인해야합니다 :

  • 방법 (GET 또는 POST)
  • 쿠키를
  • 양식 값 (왜 세션 상태, 예를 들면?)
  • URL 리퍼러
  • 사용자 에이전트
  • 사용자 지정 HTTP 헤더? (어떤 사람들은 이것을 HTTP 요청에 넣어서 아무도 서버를 "바보"로 만들 수 없습니다.)

이렇게하면 데이터와의 응답이 기본 html 오류 페이지와 다를 수 있습니다.

마지막으로 한 가지 : 콘텐츠가 HTTPS를 통해 전달되는 경우 걱정하지 마세요. 어딘가에 추가 레이어가 있지만 여전히 가능합니다.

콘텐츠가 소켓을 통해 전달되는 경우 잊어 버리십시오.

+0

예, 필자는 속일 수 있다고 확신합니다. 어떻게 작동하는지 먼저 이해해야합니다. 플래시 객체가 문제라고 생각하지 않기 때문에 질문을 업데이트했습니다. 그냥 로딩 애니메이션입니다. 감사합니다 :) – JMG

+0

어쨌든, 누구든지 요청을하면 TamperData 또는 방화범이 끌려 통과 할 것입니다. 숨겨진 iFrame을 조심하십시오. http 요청에이 원칙을 적용해야합니다. 세션 상태는 바보짓하기가 가장 어렵지만 가능합니다. –