Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#/.Net中以编程方式模拟浏览器_C#_.net_Browser_Automation_Emulation - Fatal编程技术网

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

在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

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

我们尝试用普通的POST/GET来模拟这一点,但问题是,例如对于“登录”,网站使用javascript代码来执行AJAX调用,并生成一些随机令牌

真的可以模拟web浏览器吗?例如:

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#。本教程已经过时,更好的是。