Potrzebuję uzyskać dostęp do DOM dokumentu HTML po wykonaniu javascript na stronie. Mam poniższy kod, który łączy się z adresem URL i pobiera dokument. Problem polega na tym, że nigdy nie dostać DOM po modyfikowany javascriptDostęp do DOM przy użyciu WebBrowser
public class CustomBrowser
{
public CustomBrowser()
{
//
// TODO: Add constructor logic here
//
}
protected string _url;
string html = "";
WebBrowser browser;
public string GetWebpage(string url)
{
_url = url;
// WebBrowser is an ActiveX control that must be run in a
// single-threaded apartment so create a thread to create the
// control and generate the thumbnail
Thread thread = new Thread(new ThreadStart(GetWebPageWorker));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
string s = html;
return s;
}
protected void GetWebPageWorker()
{
browser = new WebBrowser();
// browser.ClientSize = new Size(_width, _height);
browser.ScrollBarsEnabled = false;
browser.ScriptErrorsSuppressed = true;
//browser.DocumentCompleted += browser_DocumentCompleted;
browser.Navigate(_url);
// Wait for control to load page
while (browser.ReadyState != WebBrowserReadyState.Complete)
Application.DoEvents();
Thread.Sleep(5000);
var documentAsIHtmlDocument3 = (mshtml.IHTMLDocument3)browser.Document.DomDocument;
html = documentAsIHtmlDocument3.documentElement.outerHTML;
browser.Dispose();
}
}
Mam nadzieję, że ktoś może mi pomóc z tym problemem
Proszę nie zamieszczać kodu jako obrazu. Kod pocztowy jako tekst. Powinieneś także używać zdarzeń, aby znaleźć, kiedy nawigacja się zakończy, a nie pętla 'while' z' Application.DoEvents() 'lub' Thread.Sleep() '. –
Dodałem kod jako tekst, obrazy, aby wyjaśnić różnicę między domem w przeglądarce i tym, co otrzymuję –
Co powiesz na użycie alternatywnego sterowania? Na przykład. http://stackoverflow.com/questions/790542/replacing-net-webbrowser-control-w--better-browser-like-chrome – user1946932