Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.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# WebBrowser无法创建帐户_C#_.net_Webbrowser Control - Fatal编程技术网

C# WebBrowser无法创建帐户

C# WebBrowser无法创建帐户,c#,.net,webbrowser-control,C#,.net,Webbrowser Control,我已经编写了一些代码,允许我使用C#在网站上自动创建帐户。不幸的是,代码似乎没有按预期工作,因为我没有收到来自该网站的确认电子邮件 这是我的代码(我只是复制了重要的部分以使其尽可能客观) webBrowser.Navigate(“https://account.protonvpn.com/signup"); webBrowser.DocumentCompleted+=新的webBrowser DocumentCompletedEventHandler(webBrowser_DocumentCom

我已经编写了一些代码,允许我使用C#在网站上自动创建帐户。不幸的是,代码似乎没有按预期工作,因为我没有收到来自该网站的确认电子邮件

这是我的代码(我只是复制了重要的部分以使其尽可能客观)

webBrowser.Navigate(“https://account.protonvpn.com/signup");
webBrowser.DocumentCompleted+=新的webBrowser DocumentCompletedEventHandler(webBrowser_DocumentCompleted);
MessageBox.Show(“结束”);
私有void webBrowser_DocumentCompleted(对象发送方,WebBrowserDocumentCompletedEventArgs e)
{
如果(webBrowser.ReadyState!=WebBrowserReadyState.Complete)
返回;
如果(webBrowser.Url.ToString()=)https://account.protonvpn.com/signup")
{
buttons=webBrowser.Document.GetElementsByTagName(“按钮”);
foreach(按钮中的HtmlElement按钮)
{
如果(button.InnerText==“获得自由”)
{
按钮。调用成员(“单击”);
MessageBox.Show(“单击”);
}
其他的
{
MessageBox.Show(“未点击”);
}
}
返回;
}
如果(webBrowser.Url.ToString()=)https://account.protonvpn.com/signup/account")
{
webBrowser.Document.GetElementById(“用户名”).SetAttribute(“值”、“用户名”);
webBrowser.Document.GetElementById(“密码”).SetAttribute(“值”、“密码”);
webBrowser.Document.GetElementById(“密码确认”).SetAttribute(“值”、“密码”);
webBrowser.Document.GetElementById(“电子邮件”).SetAttribute(“值”、“电子邮件”);
buttons=webBrowser.Document.GetElementsByTagName(“按钮”);
foreach(按钮中的HtmlElement按钮)
{
如果(button.InnerText==“创建帐户”)
{
按钮。调用成员(“单击”);
MessageBox.Show(“创建的帐户”);
}
其他的
{
MessageBox.Show(“错误”);
}
}
返回;
}
如果(webBrowser.Url.ToString()=)https://account.protonvpn.com/signup/verification")
{
buttons=webBrowser.Document.GetElementsByTagName(“按钮”);
foreach(按钮中的HtmlElement按钮)
{
如果(button.InnerText==“发送”)
{
按钮。调用成员(“单击”);
显示(“帐户已创建!”);
}
其他的
{
MessageBox.Show(“错误!”);
}
}
返回;
}
}
我在运行代码时也遇到了一些“脚本错误”,不确定如何修复它们,也不确定在运行代码时这是否会影响任何东西


该代码缺少一些重要的部分,并将其他部分弄糟。首先,将
ScriptErrorSuppress
属性设置为
true
,并应用以下内容:。不要订阅另一个处理程序中的
DocumentCompleted
事件:您不希望这样。改为检查URL。请参见此处的注释:。第一行是:
if(webBrowser1.ReadyState!=WebBrowserReadyState.Complete)返回。等等。@Jimi我正在订阅另一个处理程序中的
DocumentCompleted
事件,因为我认为这是确定下一个页面是否已加载的最佳方法,我该如何以不同方式执行(如何检查URL?)?。我没有正确理解IFrames的解释以便将其应用到我的代码中,您能澄清一下吗?您可以从
WebBrowser.URL
读取当前文档URL。不要只关注Frame/IFrame(你可能有IFrame,也可能没有,你无论如何都需要处理这个问题),关注以下语句:记住一个网页可能由Frames/IFrame中包含的多个文档组成,如果使用
ReadyState=WebBrowserReadyState.Complete
多次引发该事件,我们不会感到惊讶。
DocumentCompleted
事件可以并且将在不同情况下多次引发。你需要为此做好准备。删除第二个处理程序。@Jimi当我单击第一个按钮时,我会被重定向到另一个页面。我是否要删除第二个处理程序并检查我是否在使用
WebBrowser.Url
的正确页面上?难道程序不可能在页面加载完成之前填充文本框吗?@Jimi我想问题出在其他地方,因为我没有收到确认消息,我实际上是在点击按钮,所以我认为它们根本没有被点击,我无法进入下一页