使用WebBrowser控件以编程方式登录网站时出现问题
本文关键字:网站 问题 登录 方式 WebBrowser 控件 编程 使用 | 更新日期: 2023-09-27 18:05:39
我正在尝试使用webbrowser控件以编程方式登录https://www.salesgenie.com/Account/LogOn。
问题是当我点击"登录"时,浏览器不会在LogonCompleted事件中导航到下一页。
HtmlElement userName = wBrowser.Document.GetElementById("username");
userName.SetAttribute("value", SomeUserName);
HtmlElement password = wBrowser.Document.GetElementById("password");
password.SetAttribute("value", SomePassword);
wBrowser.DocumentCompleted -= new WebBrowserDocumentCompletedEventHandler(LogonPageLoaded);
wBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(LogonCompleted);
HtmlElement logonForm = wBrowser.Document.GetElementById("logon-submit");
logonForm.InvokeMember("click");
我认为这是因为元素" login -submit"调用了一个JavaScript函数。
检查你的第四行,当你应该设置password
时,你又设置了userName
编辑
除了上面的问题,我猜你试图调用点击太快。该按钮是使用JavaScript创建的,因此您必须等待一段时间才能单击它。不幸的是,没有事件,你可以监听,以确定何时JavaScript是done
,虽然你可以测试各种属性可能。最安全的做法可能是在加载之后等待几秒钟,然后再调用click
。
下面的代码为我工作(虽然我没有一个有效的用户名和密码)。我有一个按钮叫button1
和一个网络浏览器叫webBrowser1
。在浏览器中可视地加载页面后,单击表单上的按钮将正确地调用浏览器中的click
事件。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.webBrowser1.Navigate("https://www.salesgenie.com/Account/LogOn");
}
private void button1_Click(object sender, EventArgs e)
{
string SomeUserName = "Test";
string SomePassword = "Test";
HtmlElement userName = webBrowser1.Document.GetElementById("username");
Console.WriteLine(userName.GetAttribute("value"));
userName.SetAttribute("value", SomeUserName);
userName.RemoveFocus();
HtmlElement password = webBrowser1.Document.GetElementById("password");
Console.WriteLine(userName.GetAttribute("value"));
password.SetAttribute("value", SomePassword);
HtmlElement logonForm = webBrowser1.Document.GetElementById("logon-submit");
logonForm.InvokeMember("click");
}
}
}
是否尝试使用logonForm.click();?