在C#/ .Net中以编程方式模拟浏览器

时间:2013-06-20 13:53:56

标签: c# .net browser automation emulation

我们希望自动执行网站中的某些任务,例如让用户“登录”,执行某些功能,阅读他们的帐户历史记录等。

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

是否可以从字面上模拟网络浏览器?例如:

  • 访问'www。[test-website] .com'
  • 填写这些DOM项目
    • DOM项'username'用'testuser'填写
    • DOM项'密码'填写'testpass'
    • 点击'按钮DOM项'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); 

4 个答案:

答案 0 :(得分:2)

你可以在C#中使用例如Selenium。有一个很好的教程:Data Driven Testing Using Selenium (webdriver) in C#

答案 1 :(得分:1)

我建议在代码中实例化一个WebBrowser控件,并使用此实例完成所有工作但从不在任何表单上显示它。我已经好几次这样做了,效果还不错。唯一的缺陷是它使用了Internet Explorer; - )

答案 2 :(得分:0)

尝试使用JMeter,它对于自动化Web请求也很不错,也非常普遍用于网站的性能测试

答案 3 :(得分:0)

或者只是尝试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";