Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 没有ID或名称的VBA IE自动化_Html_Vba_Internet Explorer - Fatal编程技术网

Html 没有ID或名称的VBA IE自动化

Html 没有ID或名称的VBA IE自动化,html,vba,internet-explorer,Html,Vba,Internet Explorer,我正在尝试使用VBA在没有任何ID或名称的表单上自动输入用户名/密码。这可能吗 看一看这张照片。这个网页与我所知道的名字不符 VBS代码: uname = "myusername" pword = "mypassword" Set objIE = CreateObject("InternetExplorer.Application") WebSite = "https://cis.mesaaz.gov/eservices/p_template" With objIE .Visible =

我正在尝试使用VBA在没有任何ID或名称的表单上自动输入用户名/密码。这可能吗

看一看这张照片。这个网页与我所知道的名字不符

VBS代码:

uname = "myusername"
pword = "mypassword"

Set objIE = CreateObject("InternetExplorer.Application")
WebSite = "https://cis.mesaaz.gov/eservices/p_template"
With objIE
  .Visible = True
  .Navigate WebSite
    Do While .Busy Or .ReadyState <> 4
        DoEvents
    Loop

    Set element = .Document.getElementsByName("userid")
    element.Item(0).Value = uname

    Set element = .Document.getElementsByName("ping")
    element.Item(0).Value = pword

    Set element = .Document.getElementsByName("submit")(0)
    element.Click

    Do While .Busy Or .ReadyState <> 4
        DoEvents
    Loop

End With
表单HTML代码:

<form action="uwpqutil.p_VALLOGIN" method="POST" target="_top" name="Login">
<center>
<table border="0" cellpadding="3" cellspacing="0">
<tbody><tr>
<td rowspan="1" colspan="3" align="LEFT"><b>Log-In</b></td>
</tr>
<tr>
<td valign="middle"><b>UserName</b></td>
<td valign="middle"><input name="userid" size="30" type="text"></td>
<td>&nbsp;</td>
</tr>
<tr>
<td valign="middle"><b>Password</b></td>
<td valign="middle"><input name="pin" size="30" type="password"></td>
<input name="JavaScript" value="enabled" type="hidden">
<script language="JavaScript"><!--
document.Login.JavaScript.value = 'enabled';
//--></script>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td valign="middle" align="right"><input value="Log-In" type="submit"></td>
</tr>
</tbody></table>
</center>
</form>
立即看到错误 从我马上看到的情况来看,您得到的是名为ping而不是pin的输入。Document.getElementsByNamesubmit不返回任何元素,因为没有名为submit的元素

您可以改为使用getElementsByTagNameinput并循环搜索结果以找到正确的结果,也可以通过getElementsByNameLogin获取表单本身并使用其提交方法

在VBS中也没有DoEvents函数。相反,您应该使用合理的毫秒数作为参数,我建议为100。假设WScript对象可用

深根误差 然而,代码中还有一个更基本的错误。您请求的页面不包含表单。它只包含帧定义。如果您将网站更改为

它开始工作,但不加载其他帧

uname = "myusername"
pword = "mypassword"

Set objIE = CreateObject("InternetExplorer.Application")
WebSite = "https://cis.mesaaz.gov/eservices/p_UWGPDYNA"
With objIE
    .Visible = True
    .Navigate WebSite
    Do While .Busy Or .ReadyState <> 4
        WScript.Sleep 100
    Loop

    With .Document
        .getElementsByName("userid")(0).Value = uname
        .getElementsByName("pin")(0).Value = pword
        .getElementsByName("Login")(0).Submit
    End With

    Do While .Busy Or .ReadyState <> 4
        WScript.Sleep 100
    Loop
End With
非相关错误 您应该改进HTML标记并修复JavaScript检测

现在JavaScript输入总是包含enabled。它的默认值应该被禁用,并且应该被JavaScript更改为enabled


标记本身至少应该从元素和属性中剥离出来,并考虑格式化。这应该在CSS中完成。你使用的样式是90年代的样式,那时CSS还没有出现。你也应该。头部在身体之后重复。框架定义文档在html元素之前有脚本,它应该在head中。这样的错误可能会使您的页面行为异常。

非常感谢!成功了:我没有意识到我必须直接和镜框说话@用户3809423不客气。但是脚本最初在到达代码之前就停止了对文档的处理;即使您确实意识到您使用了错误的文档,DoEvents错误仍然是一个问题。尝试通过cscript script.vbs从cmd.exe运行脚本,您将看到有时会出现错误。有时,这需要在代码中进行一些手动错误处理,请参见错误语句。我对VBS不太熟悉,不知道什么时候错误会自动终止脚本。
uname = "myusername"
pword = "mypassword"

Set objIE = CreateObject("InternetExplorer.Application")
WebSite = "https://cis.mesaaz.gov/eservices/p_UWGPDYNA"
With objIE
    .Visible = True
    .Navigate WebSite
    Do While .Busy Or .ReadyState <> 4
        WScript.Sleep 100
    Loop

    With .Document
        .getElementsByName("userid")(0).Value = uname
        .getElementsByName("pin")(0).Value = pword
        .getElementsByName("Login")(0).Submit
    End With

    Do While .Busy Or .ReadyState <> 4
        WScript.Sleep 100
    Loop
End With
uname = "myusername"
pword = "mypassword"

Set objIE = CreateObject("InternetExplorer.Application")
WebSite = "https://cis.mesaaz.gov/eservices/p_template"
With objIE
    .Visible = True
    .Navigate WebSite
    Do While .Busy Or .ReadyState <> 4
        WScript.Sleep 100
    Loop

    With .Document.getElementsByName("main")(0).ContentDocument
        .getElementsByName("userid")(0).Value = uname
        .getElementsByName("pin")(0).Value = pword
        .getElementsByName("Login")(0).Submit
    End With

    Do While .Busy Or .ReadyState <> 4
        WScript.Sleep 100
    Loop
End With