私はwebBrowserとVisual Studioのラベルを持っていますが、基本的に私がやろうとしていることは、別のWebページからセクションを取得することです。
WebClient.DownloadStringとWebClient.DownloadFileを使用してみましたが、JavaScriptがコンテンツをロードする前に、どちらもWebページのソースコードを提供してくれました。私の次のアイデアは、WebBrowserツールを使用して、ページが読み込まれた後にwebBrowser.DocumentTextを呼び出すだけで、それが機能しない場合でも、ページの元のソースを提供することでした。
Javascriptload後のページを取得する方法はありますか?
問題は、ブラウザが通常JavaScriptを実行し、結果としてDOMが更新されることです。 JavaScriptを分析したり、JavaScriptが使用するデータを傍受したりできない場合を除き、ブラウザと同じようにコードを実行する必要があります。以前、同じ問題に遭遇しましたが、ページをレンダリングするためにSeleniumとPhantomJSを利用しました。ページをレンダリングした後、WebDriverクライアントを使用してDOMをナビゲートし、必要なコンテンツを取得し、AJAXをポストします。
高レベルでは、これらはステップです:
Install-Package Selenium.WebDriver
Phantomjs Webdriverの使用例は次のとおりです。
var options = new PhantomJSOptions();
options.AddAdditionalCapability("IsJavaScriptEnabled",true);
var driver = new RemoteWebDriver( new URI(Configuration.SeleniumServerHub),
options.ToCapabilities(),
TimeSpan.FromSeconds(3)
);
driver.Url = "http://www.regulations.gov/#!documentDetail;D=APHIS-2013-0013-0083";
driver.Navigate();
//the driver can now provide you with what you need (it will execute the script)
//get the source of the page
var source = driver.PageSource;
//fully navigate the dom
var pathElement = driver.FindElementById("some-id");
Selenium、phantomjs、webdriverの詳細については、次のリンクを参照してください。
http://docs.seleniumhq.org/projects/webdriver/
編集:より簡単な方法
Phantomjsのnugetパッケージがあるようです。ハブは必要ありません(この方法でクラスターを使用して大量の廃棄を行いました)。
Webドライバーをインストールします。
Install-Package Selenium.WebDriver
埋め込みexeをインストールします。
Install-Package phantomjs.exe
更新されたコード:
var driver = new PhantomJSDriver();
driver.Url = "http://www.regulations.gov/#!documentDetail;D=APHIS-2013-0013-0083";
driver.Navigate();
//the driver can now provide you with what you need (it will execute the script)
//get the source of the page
var source = driver.PageSource;
//fully navigate the dom
var pathElement = driver.FindElementById("some-id");
わかりました私はphantomjsとselenuimをc#で使用してjavascriptを有効にする方法を紹介します
あなたのメイン関数でこのコードを入力してください
var options = new PhantomJSOptions();
options.AddAdditionalCapability("IsJavaScriptEnabled", true);
IWebDriver driver = new PhantomJSDriver("phantomjs Folder Path", options);
driver.Navigate().GoToUrl("https://www.yourwebsite.com/");
try
{
string pagesource = driver.PageSource;
driver.FindElement(By.Id("yourelement"));
Console.Write("yourelement founded");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
Console.Read();
yourwebsiteとあなたが探している要素、そしてあなたのマシンのphantomjs.exeパスをこのコードの下に置くことを忘れないでください
コーディングの時間と感謝 wbennett
Wbennetのおかげで、発見 https://phantomjscloud.com 。 Web API呼び出しを通じてページをスクラップするのに十分な無料サービス。
public static string GetPagePhantomJs(string url)
{
using (var client = new System.Net.Http.HttpClient())
{
client.DefaultRequestHeaders.ExpectContinue = false;
var pageRequestJson = new System.Net.Http.StringContent(@"{'url':'" + url + "','renderType':'html','outputAsJson':false }");
var response = client.PostAsync("https://PhantomJsCloud.com/api/browser/v2/{YOUT_API_KEY}/", pageRequestJson).Result;
return response.Content.ReadAsStringAsync().Result;
}
}
うん。