使用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函数。

使用WebBrowser控件以编程方式登录网站时出现问题

检查你的第四行,当你应该设置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();?