我們在用http請求的時候,某些頁面是ajax載入的,所以請求過來的頁面資料不完整。也就是說ajax區域性載入資料的地方,我們請求不到,這時候該怎麼辦呢?
webdriver+phantomjs這兩個組合在一起使用,可以完成此任務。分別簡單介紹下,webdriver是乙個前端的自動化測試框架,phantomjs是乙個無介面的瀏覽器,基於webkit。webdriver呼叫phantomjs.exe工作。下面是webdriver提供的api,看來它能驅動各種瀏覽器工作。
使用前準備:
我們看乙個完整的例子:
using這是封裝了乙個類,方便使用,我們看如何使用:openqa.selenium;
using
openqa.selenium.phantomjs;
using
openqa.selenium.support.ui;
using
system;
using
system.collections.generic;
using
system.linq;
using
system.text;
using
system.threading;
using
system.threading.tasks;
namespace
public
class
operation
}public
class
script
public
object args
}public
class
onstarteventargs
public
onstarteventargs(uri uri)
}public
class
onerroreventargs
public exception exception
public
onerroreventargs(uri uri, exception ex)
}public
class
oncompletedevent
public
int threadid
public
string pagesource
public
long milliseconds
public phantomjsdriver driver
public oncompletedevent(uri uri, int threadid, string pagesource, long
milliseconds, phantomjsdriver driver)
}public
class
highcrawler : icrawler
public
task start(uri uri, script script, operation operation)
var driver = new
phantomjsdriver(_service, _options);
try
catch
(exception ex)
finally
});}}}
///取ajax非同步結果的核心原理:webdriver把頁面上的某個元素,作為標識,一旦出現此元素,表明ajax結束,這時候再返回結果,中間有個等待的過程。///解析**
/// ///
待解析的**
///等待載入的元素id:"search-main"
///解析路徑:"//div[@class=\"article panel article-result\"]//h5[@class=\"title\"]//a"
private
static
void testwaitforready(string url, string waitid, string xpath, int timeout = 10000
) ;
crawler.onerror += (s, e) =>;
crawler.oncompleted += (s, e) =>
};var operition = new
operation
,condition = (x) =>,
timeout =timeout
};crawler.start(
new uri(url), null
, operition);
}
C http請求工具類
http請求操作類之httpwebrequest this.logger.errorformat httpjsonpost異常 ex.message 獲取客戶端ip位址 無視 若失敗則返回回送位址 public static string gethostaddress 最後判斷獲取是否成功,並檢查i...
登入頁面ajax請求
login.js 一 登入驗證提示資訊 提交登入資訊 sub.on click function e console.log request param json.stringify param ajax done function result else if result.code 0100 e...
ajax請求aspx頁面
首先,這麼用是不好的。最好用ashx,但也難免遇到這種需求。開發過這麼乙個系統,每天訪問量最多100,web伺服器壓力很小,完全大馬拉小車,主要壓力都在資料庫伺服器上,要做大量的統計。所以頁面直接全上伺服器控制項搞定。用到ajax的時候也懶得再寫個ashx了,直接aspx裡寫了。下面是例子 前端 1...