소스에 URL이 포함되어 있지 않은 경우 HTMLAgilityPack이있는 페이지에서 URL을 가져 오는 방법은 무엇입니까?

c# html html-agility-pack

문제

이 페이지에서 KB URL을 긁어 내려고합니다. https://support.microsoft.com/en-us/kb/894199

이 페이지에는 다음과 같은 URL이 있습니다. https://support.microsoft.com/kb/2976978

Chrome에서 개발자 도구를 열면 데이터가 다음과 같이 표시됩니다.

<div class="indent">
<a id="kb-link-142" href="https://support.microsoft.com/kb/2976978" target="_self">https://support.microsoft.com/kb/2976978</a>
</div>

위의 HTML을 기반으로 다음과 같이 href 요소의 URL을 다듬을 수 있어야한다고 생각합니다.

foreach(HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
{
   list.Add(link.GetAttributeValue("href", string.Empty));
}

내가 겪고있는 문제는 HTMLSource를 다운로드하면 내용이 변경된다는 것입니다. 제 말은 개발자 도구가 위의 HTML을 페이지에 표시 할 수 있다고하더라도 페이지를 마우스 오른쪽 버튼으로 클릭하고 소스보기를 선택하면 그 시점에 표시되는 HTML이 완전히 다르며 URL이 하나도 포함되어 있지 않습니다 렌더링 된 페이지가 표시됩니다.

제 이론은 HTML이 파일을 어딘가에로드하고 파일에 렌더링 된 페이지의 세부 정보가 들어있는 일종의 파일 참조가 있다는 것입니다. 그렇다면 어떻게 HTMLAgilityPack을 사용하여 렌더링 된 페이지에있는 URL을 가져올 수 있습니까? 원본에 포함 된 URL이없는 것 같습니까?

또한 - 내 질문은 정말 혼란스러워 할 수도 있습니다. 이 페이지의 기능 / 작동 방식에 대한 기술적 용어가 있으면 알려 주시면 제목을 업데이트하여보다 논리적이고 다른 사람들이 나중에 검색 할 수 있도록 업데이트 할 수 있습니다.

인기 답변

좋아, 이제 문제가 생겼어. 이 페이지는 Angularjs 지시문과 바인딩을 사용하고 있으며, href는 게시 페이지로드를로드하고 있습니다. 우리가 얻는 페이지는 웹 브라우저 에이전트에서 파싱 / 실행이 발생하기 전입니다. 즉, DOM manupulation / javascript 또는 ajax 수정 후 페이지의 변경 사항이 HtmlDocument 응답에 포함되지 않습니다. 나는 이것이 웹 브라우저 요청처럼 가장 할 것이고 자바 스크립트와 아약스가 완전하게 실행되도록하고 여기에 권고 된 내용을 가져올 것이라고 생각한다. 희망이 도움이!




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