c http請求ajax頁面

2022-07-17 01:36:12 字數 2454 閱讀 5556

我們在用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

});}}}

這是封裝了乙個類,方便使用,我們看如何使用:

///

///解析**

/// ///

待解析的**

///等待載入的元素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);

}

取ajax非同步結果的核心原理:webdriver把頁面上的某個元素,作為標識,一旦出現此元素,表明ajax結束,這時候再返回結果,中間有個等待的過程。

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...