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

4
我们希望能够自动化网站中的某些任务,例如让用户“登录”,执行某些功能,读取他们的账户历史记录等。
我们尝试使用普通的POST/GET来模拟这个过程,但问题在于,例如对于“登录”,该网站使用javascript代码来执行AJAX请求,并生成一些随机令牌。
是否可以真正地模拟一个Web浏览器?例如:
- 访问“www.[test-website].com” - 填写以下DOM项目: - 将DOM项目“用户名”填入“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); 

尝试使用Fiddler完成此操作。 - Sam Leach
4个回答

2

如果目标是使用.NET,那么Selenium C#绑定很不错,或者你也可以使用IronPython来使用Selenium。最近我更喜欢在.NET中使用IronPython进行自动化GUI/浏览器测试,而不是C#。 - Bill Agee
此教程已过时,更好的教程在这里 - Niek

1

或者尝试使用 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";

你能模拟点击一个包含JavaScript代码的锚链接吗?(例如:<a href="javascript:alert('hello world');">点击这里</a> - Karl Cassar
没问题,我能做到: foreach (HtmlElement elem in doc.GetElementsByTagName("a")) { Console.WriteLine(elem.InnerHtml + "->" + elem.DomElement); elem.InvokeMember("Click"); } - Simon Achmüller

1
我建议在代码中实例化一个WebBrowser控件,并使用此实例执行所有操作,但不要在任何窗体上显示它。我已经做过这几次,效果还不错。唯一的缺陷是它使用了Internet Explorer;-)

0

试试JMeter吧,它是一个很好的自动化Web请求工具,也被广泛用于网站性能测试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接