C #에서 무한 스크롤을 시뮬레이트하여 페이지의 전체 HTML을 얻습니다.

c# html-agility-pack infinite-scroll

문제

이 (imo) 성가신 "무한 스크롤"스타일을 사용하는 사이트가 많이 있습니다. 예를 들면 tumblr, twitter, 9gag 등의 사이트가 있습니다.

최근에 HtmlAgilityPack을 사용하여 프로그래밍 방식으로 이러한 사이트에서 사진을 찍으려고했습니다. 이렇게 :

HtmlWeb web = new HtmlWeb();  
HtmlDocument doc = web.Load(url);
var primary = doc.DocumentNode.SelectNodes("//img[@class='badge-item-img']");
var picstring = primary.Select(r => r.GetAttributeValue("src", null)).FirstOrDefault();

이것은 잘 작동하지만, 특정 사이트에서 HTML로로드하려고 시도했을 때, 나는 단지 작은 양의 컨텐츠 만 가져 왔다는 것을 알았습니다. (처음 10 개의 "게시물"또는 "그림"또는 다른 말을 할 수 있습니다.) C #에서 페이지의 "맨 아래로 스크롤"을 시뮬레이트하는 것이 가능한지 궁금합니다.

이것은 프로그래밍 방식으로 html을로드 할 때만이 아닙니다. tumblr과 같은 사이트에 가서 파이어 버그를 확인하거나 '소스보기'를 선택하면 모든 콘텐츠가 어딘가에있을 것으로 예상됩니다. 숨겨진 / 자바 스크립트로 삽입 된 것으로 보인다. 화면에서 실제로 볼 수있는 내용 만 HTML 소스에 있습니다.

그래서 내 질문은 : 무한히 아래로 페이지를 스크롤하고, 그 HTML을 C # (선호)로로드하는 것이 가능한가?

(나는 tumblr과 twitter에 API를 사용할 수 있다는 것을 알고 있지만 HtmlAgilityPack과 함께 재미있는 해킹을 시도하고있다)

인기 답변

이러한 웹 사이트 모두에 대해 한 번에 신뢰할 수있는 방법으로 웹 브라우저를 포함하지 않을 수 있습니다 (일반적으로 헤드리스 환경에서는 작동하지 않음).

대신 사용자가 스크롤을 내릴 때 AJAX 쿼리를 사용하여 콘텐츠를 가져 오는 데 사용되는 JavaScript를 확인해야합니다.

또는 브라우저에 웹 디버거 (예 : Chrome에 포함 된 디버거)를 사용하십시오. 이러한 디버거에는 일반적으로 페이지에서 수행하는 AJAX 요청을 검사하는 데 사용할 수있는 "네트워크"창이 있습니다. 아래로 스크롤 할 때 이러한 요청을 보면 이러한 요청을 시뮬레이트하는 C # 코드를 작성할 수있는 충분한 정보를 얻을 수 있습니다.

그런 다음 특정 API가 제공하는 모든 유형의 컨텐츠 (JSON 또는 XML이지만 거의 HTML이 아닐 수 있음)와 같은 요청에서 응답을 구문 분석해야합니다. (AJAX API가 훨씬 더 사용하기 쉬운 데이터 객체를 제공하는 반면 디스플레이 지향 HTML을 구문 분석하지 않아도되므로 어쨌든 더 좋을 것입니다.)




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.