問題是瀏覽器通常會執行javascript,並且它會導致更新的DOM。除非您可以分析JavaScript或攔截它使用的數據,否則您需要按瀏覽器執行代碼。在過去,我遇到了同樣的問題,我利用硒和PhantomJS來渲染頁面。在呈現頁面之後,我將使用WebDriver客戶端來瀏覽DOM並檢索我需要的內容,併發布AJAX。
在一個高的水平,這些步驟如下:
- 安裝硒:http://docs.seleniumhq.org/
- 開始硒轂作爲服務
- 下載phantomjs(模擬瀏覽器,能夠執行JavaScript ):http://phantomjs.org/
- 在webdriver模式下啓動phantomjs指向硒轂
- 在我的scraping應用程序中安裝了webdriver客戶端nuget包:
Install-Package Selenium.WebDriver
這裏是phantomjs的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");
更多信息,可以在下面的鏈接中找到:
http://docs.seleniumhq.org/
http://docs.seleniumhq.org/projects/webdriver/
http://phantomjs.org/
編輯:更簡單的方法
這似乎有一個NuGet包的phantomjs,這樣你不需要集線器(我用了一個集羣做大規模的報廢以這種方式):
安裝網絡驅動程序:
Install-Package Selenium.WebDriver
安裝嵌入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");
作品完美 – Flynn
謝謝很好的例子。完美的作品。 –
我試過了,但是driver.Url沒有改變。甚至不要例外。只是通過,它仍然是行動:空白。因此導航返回像
。我嘗試了另一個網址。等一下,然後轉到下一行。當然,代碼的結尾找不到some-id。任何想法? –