어떻게하면 스크랩 자바 스크립트에 의해 생성 된 HTML 페이지를 화면합니까? 필자는 다음과 같이 시도했다.
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
HtmlWeb hw = new HtmlWeb();
doc = hw.Load("http://stats.nba.com/scores.html?gameDate=04/11/2014");
HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//div[@id='scoreboards']");
그러나 내용이 자바 스크립트에 의해 생성되기 때문에 이것은 작동하지 않습니다. 자바 스크립트가 HTML을 생성 한 후에 페이지를 긁을 수있는 방법이 있습니까? 어쩌면 다른 민첩성 팩을 사용하고 있을까요?
웹 브라우저 컨트롤을 사용하여 js 또는 ajax에 의해 내용 및 요소 마녀가 채워지도록하십시오.
private void LoadHtmlWithBrowser(String url)
{
webBrowser1.ScriptErrorsSuppressed = true;
webBrowser1.Navigate(url);
waitTillLoad(this.webBrowser1);
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
var documentAsIHtmlDocument3 = (mshtml.IHTMLDocument3)webBrowser1.Document.DomDocument;
StringReader sr = new StringReader(documentAsIHtmlDocument3.documentElement.outerHTML);
doc.Load(sr);
}
private void waitTillLoad(WebBrowser webBrControl)
{
WebBrowserReadyState loadStatus;
int waittime = 100000;
int counter = 0;
while (true)
{
loadStatus = webBrControl.ReadyState;
Application.DoEvents();
if ((counter > waittime) || (loadStatus == WebBrowserReadyState.Uninitialized) || (loadStatus == WebBrowserReadyState.Loading) || (loadStatus == WebBrowserReadyState.Interactive))
{
break;
}
counter++;
}
counter = 0;
while (true)
{
loadStatus = webBrControl.ReadyState;
Application.DoEvents();
if (loadStatus == WebBrowserReadyState.Complete && webBrControl.IsBusy != true)
{
break;
}
counter++;
}
}