首页 > 解决方案 > VBA Excel - 填写网络表单无法点击提交按钮

问题描述

我对编码还很陌生,并承担了这个项目,在我工作的内部程序中创建 1000 个新帐户。我能够让宏填写网络表单并继续浏览 2 页,但是在第三页我无法让它点击提交按钮。

代码:

Sub Automate1()

Dim IE As Object
Dim doc As HTMLDocument
Set IE = CreateObject("InternetExplorer.Application")

IE.Visible = True
IE.navigate "https://associate.heritagerep.com/signup/signup.asp? 
SectionID=10&t=10030&guid=CB57C450-F8D2-4644-98CB-99C37DA43668"

Do While IE.Busy
    Application.Wait DateAdd("s", 1, Now)
Loop

Set doc = IE.document
'First Screen'
doc.getElementsByName("sponsor")(0).Value = "kffrep"
doc.getElementById("Username").Value = "75871"
doc.getElementById("email").Value = "75871@kff.com"
doc.getElementById("zip").Value = "111111"
doc.getElementsByName("Submit")(0).Click

Do While IE.Busy
    Application.Wait DateAdd("s", 1, Now)
Loop

'Second Screen'
doc.getElementById("companyName").Value = "kff1"
doc.getElementById("OccupationTy_Select").Value = 34
doc.getElementById("fname").Value = "75871"
doc.getElementById("lname").Value = "kff1"
doc.getElementById("mstreet1").Value = "1 kff st"
doc.getElementById("mcity").Value = "Mississauga"
doc.getElementById("mstate").Value = "ON"
doc.getElementById("hphone").Value = "1111111"
doc.getElementById("emailConfirm").Value = "75871@kff.com"
doc.getElementsByName("SSN")(0).Value = "000000000"
doc.getElementById("password").Value = "password1"
doc.getElementById("passwordconfirm").Value = "password1"
doc.getElementsByName("securityanswer")(0).Value = "pizza"
doc.getElementsByClassName("btn btn-primary")(0).Click

 Do While IE.Busy
    Application.Wait DateAdd("s", 1, Now)
Loop

'Third Screen'
Set tags = doc.getElementsByClassName("btn btn-success")

For Each tagx In tags
    If tagx.Name = "submitfinish" Then
        tagx.Click
    End If
Next



Do While IE.Busy
    Application.Wait DateAdd("s", 1, Now)
Loop

'Fourth Screen'
doc.getElementsByName("Submit3")(0).Click

'Fifth Screen'
doc.getElementsByName("CheckOrderPaid")(0).Click
doc.getElementsByName("Shipped")(0).Click'
doc.getElementsByName("subAdminOpt")(0).Click
Flag



End Sub

下面是麻烦按钮的 HTML 代码:

<input name="submitfinish" class="btn btn-success" type="submit" value="Finish Order">

我不确定为什么我在前 2 页中使用的单击提交按钮的操作突然在第三页上不起作用。我已经尝试了可能不同的迭代来解决这个问题,但还没有找到一个成功的。

感谢任何反馈。

其他 DOM 详细信息:

<div class="text-right">
        <a class="btn btn-default" href="/default.asp?guid=651F5B01-725B-4CCD-B12E-17CD5D59C472">Continue Shopping<!--Continue Shopping--></a>



            <input name="submitcalc" class="btn btn-default" type="submit" value="Re-Calculate">


        <input name="submitfinish" class="btn btn-success" type="submit" value="Finish Order"><!--Finish Order -->

    </div>

整个网页 HTML:

<!DOCTYPE html>
<html lang="en" class="non-mobile">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="">
    <meta name="author" content="">

    <meta content='width=device-width, initial-scale=1.0, maximum- 

scale=1.0, user-scalable=0' name='viewport' />

    <!-- Scripts -->
    <script type="text/javascript" src="//code.jquery.com/jquery- 
1.11.0.min.js"></script>

    <script type="text/javascript" src="/common/script.js"></script>
    <script type="text/javascript" src="/common/function/script_source.js"></script>
    <script type="text/javascript" src="/common/jquery/jquery.validate.min.js"></script>
    <script type="text/javascript" src="/common/function/functions.js"></script>

    <!-- bootstrap -->
    <script type="text/javascript" src="/responsive/js/bootstrap.min.js"></script>
    <script type="text/javascript" src="/responsive/js/common.js"></script>

    <script type="text/javascript" src="/common/shadowbox/shadowbox.js"></script>
    <script type="text/javascript" src="/responsive/js/jquery.animate-colors-min.js"></script>

    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/fancybox/2.1.5/jquery.fancybox.js"></script>
    <script type="text/javascript" src="//unpkg.com/sweetalert/dist/sweetalert.min.js"></script>

    <!-- CSS -->
    <link href="/common/shadowbox/shadowbox.css" rel="stylesheet">
    <link href="/responsive/css/bootstrap.css" rel="stylesheet">
    <link href="/responsive/css/bootstrap-custom.css" rel="stylesheet">
    <link href="/responsive/css/bootstrap-ms.css" rel="stylesheet">

    <link href="//cdnjs.cloudflare.com/ajax/libs/fancybox/2.1.5/jquery.fancybox.css" rel="stylesheet">

    <!-- Parent Site overrides -->
    <link href="//associate.heritagerep.com/clientinc/resources/css/common.css" rel="stylesheet">

    <style type="text/css">
        @import url('//associate.heritagerep.com/common/templates/public/css/custom.css');
    </style>
    <script type="text/javascript">
        $(function() {
            app.init({ domain: 'associate.heritagerep.com'});
        });
    </script>
</head>

<body class="responsive">

<!-- This is a helper so javascript can see whether or not this is a mobile device -->
<div id="isMobile" class="visible-xs"></div>

<form method="post" name="currencyty">
     <input type="hidden" name="CartId" value="439915">
    <table class="table table-striped">
        <thead>
        <tr>
            <th>ItemCode<!--ItemCode--></th>
            <th>Description<!--Descr--></th>
            <th>Qty<!--Qty--></th>
            <th>Currency<!--Currency--></th>
            <th>Price Each<!--Price Each--></th>

                <th>
                    Volume
                </th>


                    <th>Volume 2<!--Volume 2--></th>


            <th>Price Total<!-- Total--></th>


            <th>
                Points Total
            </th>

            <th></th>
        </tr>
        </thead>
        <tbody>


            <tr>
                <td>        <!-- ITEM CODE -->
                    1004
                </td>
                <td><!-- Description -->
                     Initial Certification Fee
                </td>
                <td> <!-- QTY -->


                    <input name="Qty_609000021&609000020&0&-1&1004&N" type="text" value="1" size="2" onblur="WidthTest(this,1);" />
                </td>
                <td>CAD</td>
                <td>
                    $25.00
                </td>


                <td>
                   0
                </td>


                    <td>

                            0

                    </td>

                <td>
                    $25.00
                </td>


                    <td>
                        0
                    </td>

                    <td class="text-right">

                          <a href="/responsive/checkout.asp?guid=1D56D859-C3FB-42D0-9E58-BD94F6427E14&edit=634780" class="btn btn-default">Edit<!--Edit--></a>

                    </td>


            </tr>


            <tr>
                <td colspan="100%">
                    <div class="pull-left">
                        <a href="/responsive/product_popup.asp?guid=1D56D859-C3FB-42D0-9E58-BD94F6427E14&MyUserTy=3" class="fancy">Add Item</a><!--Add-->
                    </div>
                    <div class="pull-right">
                        <input name="adItemCode" type="text" value="Item Code" size="10" onclick="this.value = ''" onblur="WidthTest(this,1);AddTableRow('ProductItemCode')"><!--Item Code-->
                        Qty:<!--Qty:-->&nbsp;<input name="adNewQty" type="text" value="1" size="2" onblur="WidthTest(this,1);">
                        <span style="font-weight:bold;vertical-align: middle; float: right;">
                            &nbsp;&nbsp;
                            <input type="submit" name="submitadd" value="Add Item" onclick="whichButton='add';"><!--Add Item-->
                        </span>
                    </div>
                </td>
            </tr>

        </tbody>
    </table>



        <div class="pull-right">
            <ul class="list-group">

                <li class="list-group-item">
                    <strong>Volume:</strong>
                    0
                </li>

                <li class="list-group-item">
                    <strong>Totals<!--Totals :-->:</strong>
                    $25.00
                </li>
            </ul>
        </div>

        <div class="clearfix"></div>


    <div class="text-right">
        <a href="/default.asp?guid=1D56D859-C3FB-42D0-9E58-BD94F6427E14" class="btn btn-default">Continue Shopping<!--Continue Shopping--></a>



            <input type="submit" name="submitcalc" value="Re-Calculate" class="btn btn-default">


        <input type="submit" name="submitfinish" value="Finish Order" class="btn btn-success"><!--Finish Order -->

    </div>
</form>


<script language="javascript">
    $(function() {
        $('.fancy').fancybox({
            'width'             : '75%',
            'autoScale'         : false,
            'transitionIn'      : 'none',
            'transitionOut'     : 'none',
            'type'              : 'iframe',
            'topRatio': '0.1',
            'autoHeight': true
        });

    });
</script>

</body>

标签: excelvbahtmlweb-scraping

解决方案


您可以尝试将属性 = 值选择器设置为目标元素。让我们知道是否有错误,如果有,请检查是否有父 iframe/frame 标签。

ie.document.querySelector("[value='Finish Order']").click

或者

ie.document.querySelector("[value='Finish Order']").FireEvent "onclick"

推荐阅读