用c# / . net编程地模拟浏览器



我们想在一个网站上自动执行某些任务,比如有一个用户'登录',执行一些功能,读取他们的帐户历史等

我们已经尝试用正常的POST/GETs来模拟这个,但是问题是,例如对于'login',网站使用javascript代码来执行AJAX调用,并且还生成一些随机令牌。

是否有可能从字面上模拟一个网络浏览器?例如:

  • 访问www。[测试网站]。com"
  • 填写这些DOM项
    • DOM项'username'填入'testuser'
    • DOM项目'password'填入'testpass'
    • 点击' button DOM item 'btnSubmit'
  • 访问帐户历史记录
    • 读取HTML(这样我们就可以解析关于每个不同的历史项目的信息)
上面的代码可以翻译成下面的示例代码:
var browser = new Browser();
var pageHomepage = browser.Load("www.test-domain.com");
pageHomepage.DOM.GetField("username").SetValue("testUser");
pageHomepage.DOM.GetField("password").SetValue("testPass");
pageHomepage.DOM.GetField("btnSubmit").Click();
var pageAccountHistory = browser.Load("www.test-domain.com/account-history/");
var html = pageAccountHistory.GetHtml();
var historyItems = parseHistoryItems(html); 

你可以在c#中使用Selenium。有一个很好的教程:在c#中使用Selenium (webdriver)进行数据驱动测试。

我建议在代码中实例化一个WebBrowser控件,并使用该实例完成所有工作,但永远不要在任何形式上显示它。我已经这样做过几次了,效果很好。唯一的缺点是它使用了ie;-)

或者试试System.Windows.Forms。WebBrowser,例如:

this.webBrowser1.Navigate("http://games.powernet.com.ru/login");
while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
     System.Windows.Forms.Application.DoEvents();
HtmlDocument doc = webBrowser1.Document;
HtmlElement elem1 = doc.GetElementById("login");
elem1.Focus();
elem1.InnerText = "login";
HtmlElement elem2 = doc.GetElementById("pass");
elem2.Focus();
elem2.InnerText = "pass";

尝试JMeter,它是一个很好的自动web请求,也相当普遍用于网站的性能测试

最新更新