我们想在一个网站上自动执行某些任务,比如有一个用户'登录',执行一些功能,读取他们的帐户历史等
我们已经尝试用正常的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请求,也相当普遍用于网站的性能测试