C# WebBrowser无法创建帐户
我已经编写了一些代码,允许我使用C#在网站上自动创建帐户。不幸的是,代码似乎没有按预期工作,因为我没有收到来自该网站的确认电子邮件 这是我的代码(我只是复制了重要的部分以使其尽可能客观)C# WebBrowser无法创建帐户,c#,.net,webbrowser-control,C#,.net,Webbrowser Control,我已经编写了一些代码,允许我使用C#在网站上自动创建帐户。不幸的是,代码似乎没有按预期工作,因为我没有收到来自该网站的确认电子邮件 这是我的代码(我只是复制了重要的部分以使其尽可能客观) webBrowser.Navigate(“https://account.protonvpn.com/signup"); webBrowser.DocumentCompleted+=新的webBrowser DocumentCompletedEventHandler(webBrowser_DocumentCom
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我想问题出在其他地方,因为我没有收到确认消息,我实际上是在点击按钮,所以我认为它们根本没有被点击,我无法进入下一页