登录网站失败

Logging into website failure

我确实查看了教程,但我的 html 是不同的,我尝试了很多东西(我将要 post 的代码是我最后尝试的)。 html我也会给你的

   WebBrowser1.Navigate("THE_WEBSITE")
    WebBrowser1.Document.GetElementById("tbtLoginID").SetAttribute("onfocus", "javascript:$(this).val('ID_GOES_HERE');$('#wrong_password_board').css('display','none');")
    WebBrowser1.Document.GetElementById("tbtPassword").SetAttribute("value", "PASS_PROBABLY_GOES_HERE")
    WebBrowser1.Document.GetElementById("div_123").SetAttribute("onpress", "rockLogin($('#loginform'))")'

这是 HTML(我认为这才是最重要的,网站是 www.microvolts.com 无论如何)

<form id="loginform" action="/Account/login" method="POST">
        <div class="left1"> </div>
        <div class="login_info1">
            <div class="icon_rh">
            </div>
            <div class="floatleft" style="margin-bottom: 2px;">
                <input id="tbtLoginID" width="110px" maxlength="25" height="17px" class="text_box" value="Login ID" tabindex="1" onfocus="javascript:$(this).val('');$('#wrong_password_board').css('display','none'); "> 
            </div>
            <div class="floatleft">
                <div id="loginLoginIdDiv1">
                    <input type="text" onfocus="javascript:$(this).val('');$('#wrong_password_board').css('display','none'); " value="Password" tabindex="2" class="text_box" name="passwordFaked" size="20" width="110px" style="display: none;">
                    <div id="loginPasswordDiv2" style="">
                        <input id="tbtPassword" width="110px" type="password" tabindex="2" maxlength="25" height="17px" class="text_box"> 
                    </div>
                </div>

                <div id="wrong_password_board" class="wrong_password wrong_passwordid ErrorMsg" style="display: none;">
            <div class="topleft"></div>
            <div class="topmiddle">Invalid Login ID and/or Password.</div>
            <div class="topright"></div>
        </div>
            </div>
        </div>
        <div class="login_info2">
            <div class="row1">
                <a href="javascript:void(0);" onclick="fbConnect();" class="login_facebook"><span class="left"></span><span class="middle">Login</span><span class="right"></span></a>
            </div>
            <div class="row1" style="width: 80px">
                <span style="float: left; margin-right: 3px;">
                    <div id="div_123" class="toplogin RockButton" style="width: 60px; height: 19px;">
                        <div id="123" onclick="rockLogin($('#loginform'))" style="width: 100%; height: 100%;" class="rbtdiv">
                            <div class="text">
                                Login</div>
                        </div>
                        <div class="rbtmask" style="z-index: 100; position: absolute; display: none; background: grey;
                            opacity: 0.2; cursor: default; width: 100%; height: 100%; top: 0px; left: 0px;">
                        </div>
                    </div>
                </span>
                <div class="btn_question forgetPasswordButton ">

                    <div id="ifClickThisBtn" style=" display:none;" data-ifclick="false"></div>
                </div>
                <div id="forgetPassword" class="tip_forgot_password">
                            <div class="ajaxLoadingMask">
                                <img src="/images/ajaxLoading2.gif" style="margin-left: 150px; margin-top: 9px; position: absolute; display: block;" class="ajaxLoading" alt="">
                            </div>
                            <div class="lefttfp">
                                <div class="l1l"></div>
                                <div class="l1r"></div>
                            </div>
                            <div class="middletfp">
                                <div class="closetfp"></div>
                                <div class="title">Forgot Password or Login ID</div>
                                <div class="email_form">
                                    <input type="text" value="Enter registered email" name="emailAddress" class="password_recovery_textbox">

                                    <div class="wbtn1 formSubmitBtn" onclick="javascript:forgetPassword();return false;" style="float: left; margin: 2px 0px 0px 5px; cursor: pointer;">
                                   <span class="wbtn1_left"></span><span class="wbtn1_middle" style="padding-left: 10px;
                                    padding-right: 10px;">Submit</span><span class="wbtn1_right"></span></div>
                                    <div class="wrong_email"></div>
                                </div>
                                <div id="invalideEmailAddress" style="display:none;"> Please enter a valid email address.</div>
                            </div>
                            <div class="righttfp"></div>
                        </div>
            </div>
        </div>
        <div class="right1"> </div>

        </form>

登录表单有 javascript 个元素,所以我想我可以用正确的登录名来编写它,但是不行。 当我 运行 它时,我从第一行得到一个错误:System.NullRefferenceException,我所有的代码都给出了那个。

我不得不承认我可能没有做我能做的所有研究,但我需要尽快完成,这是最后可能对我有帮助的事情。

正如上面@Visual Vincent 在评论中提到的那样,您需要添加 DocumentCompleted 事件。当文档完成加载时会引发此事件。

Private docCompleted As Boolean = False 'put this at class level

Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        If docCompleted Then Exit Sub
        If WebBrowser1.Document.GetElementById("tbtLoginID") IsNot Nothing Then
            WebBrowser1.Document.GetElementById("tbtLoginID").SetAttribute("value", "YOURUSERNAME")
        End If
        If WebBrowser1.Document.GetElementById("tbtPassword") IsNot Nothing Then
            WebBrowser1.Document.GetElementById("tbtPassword").SetAttribute("value", "YOURPASSWORD")
        End If
        If WebBrowser1.Document.GetElementById("div_123") IsNot Nothing Then
            WebBrowser1.Document.InvokeScript("rockLogin")
        End If

        docCompleted = True
    End Sub

上面的代码检查每个元素以确保它不是什么都没有,如果不是,那么我们可以设置我们需要的属性。我们也可以 InvokeScript 的文件例如: rockLogin,这个脚本做登录。 docCompleted 阻止页面在完成时执行 post 返回,并且您设置它想要的属性以重新加载页面等......这不是必需的,但它阻止了多个 post 返回时我试过了。

另外请注意,您没有提及您是在点击事件中执行此操作还是在什么情况下执行此操作,如果是这样,请在导航到您的页面之前将 docCompleted 设置为 false,以便每次都重置该变量。 .

注意:经过试验和测试 - 请不要在 public 论坛上 post 您的登录凭据...