在C#/.Net中以编程方式模拟浏览器
我们希望自动化网站中的某些任务,例如让用户“登录”,执行一些功能,读取他们的帐户历史记录等 我们尝试用普通的POST/GET来模拟这一点,但问题是,例如对于“登录”,网站使用javascript代码来执行AJAX调用,并生成一些随机令牌 真的可以模拟web浏览器吗?例如:在C#/.Net中以编程方式模拟浏览器,c#,.net,browser,automation,emulation,C#,.net,Browser,Automation,Emulation,我们希望自动化网站中的某些任务,例如让用户“登录”,执行一些功能,读取他们的帐户历史记录等 我们尝试用普通的POST/GET来模拟这一点,但问题是,例如对于“登录”,网站使用javascript代码来执行AJAX调用,并生成一些随机令牌 真的可以模拟web浏览器吗?例如: this.webBrowser1.Navigate("http://games.powernet.com.ru/login"); while (webBrowser1.ReadyState != WebBrowserReady
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";
- 访问“www.[测试网站].com”
- 填写这些DOM项
- DOM项“username”用“testuser”填充
- DOM项“password”用“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);
试试JMeter,它也是自动化web请求的好工具,也被广泛用于web站点的性能测试您可以在C#中使用Selenium。有一个很好的教程:。我建议用代码实例化WebBrowser控件,并使用该实例完成所有工作,但不要在任何形式上显示它。我已经做了好几次了,效果很好。唯一的缺陷是它使用了Internet Explorer;-) 或者试试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";
试着用Fiddler来做这件事。你能模拟点击一个锚链接吗?它实际上包含javascript代码?(例如:
)是的,我可以:foreach(doc.GetElementsByTagName(“a”){Console.WriteLine(elem.InnerHtml+“->”+elem.doElement);elem.InvokeMember(“Click”)}如果目标是使用.NET,Selenium C#绑定很好,或者您也可以将Selenium与IronPython一起使用。最近,对于.NET中的自动化GUI/浏览器测试,我更喜欢IronPython而不是C#。本教程已经过时,更好的是。