填充 Internet Explorer 输入框

Posted

技术标签:

【中文标题】填充 Internet Explorer 输入框【英文标题】:Filling Internet Explorer inputbox 【发布时间】:2015-02-13 12:59:55 【问题描述】:

我阅读了很多关于我的问题的答案,但不知何故,如果我试图“模仿”我所看到的,我仍然无法做我需要做的事情。

问题很简单:在打开的 IE 页面上填充一个输入框。

结果:代码卡在getelementbyid 的行上,显示运行时错误 424(需要对象)。

Private Sub AddInfoFromIntranet()

Dim ie As Object

Set ie = CreateObject("internetexplorer.application")
Application.SendKeys "ESC" ' I need this to ignore a prompt

With ie
    .Visible = True
    .navigate "here goes the address of my website"
    Do Until Not .Busy And .readyState = 4
        DoEvents
    Loop
    .document.getelementbyid("Nachnamevalue").Value = "here goes whar I want to insert"
End With

Set ie = Nothing

End Sub

Internet Explorer 库是自然导入的(否则“internetexplorer.application”将不起作用。

我很肯定我想填写的字段称为“Nachnamevalue”,这是我今天早上浏览互联网时了解到的。

我的网页的 html 代码(仅有趣的部分)如下所示:

<!DOCTYPE html>
<html>
<head>
<title></title>
<style>
    'here there are info on the style, which i'm gonna ignore
</style>
</head>
<body bgcolor="#ffffcc"><table ><tbody><tr><td>
    <form name="Suchform" action="index.cfm" method="get" target="bottom_window">
    Nachname:
        <select name="Nachnamepulldown" class="font09px" onchange="wait_and_search()">  
            <option value="BEGINS_WITH">beginnt mit
            <option value="EQUAL">ist
            <option value="CONTAINS">enthält
        </option></select>
        <input name="Nachnamevalue" onkeyup="wait_and_search()" type="text" size="8">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

    Abteilung:
        <select name="Abteilungpulldown" class="font09px" onchange="wait_and_search()"> 
            <option value="BEGINS_WITH">beginnt mit
        <option value="EQUAL">ist
        <option value="CONTAINS">enthält
        </option></select>
        <input name="Abteilungvalue" onkeyup="wait_and_search()" type="text" size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

        <input name="fuseaction" type="hidden" value="StdSearchResult">
        <input type="submit" value="suchen">
        <script language="javascript" type="text/JavaScript">
        document.Suchform.Nachnamevalue.focus();
        </script>
    </form>
</td></tr></tbody></table></body>
</html>

还有(我不知道它是否有帮助)一个“嵌入式”javascript,每次在“Nachnamevalue”输入框中写入至少 2 个字符时,都会显示搜索结果。

我做错了什么?

编辑: 当我尝试逐步执行 Sub 时,我得到以下信息:

Set Doc = ie.document

?文档 [对象 HTMLDocument] (在监视列表中它是一个内部没有任何变量的对象)

【问题讨论】:

你应该用这个.document.getElementsByName("Nachnamevalue").Value = "here goes whar I want to insert"替换这个:.document.getelementbyid("Nachnamevalue").Value = "here goes whar I want to insert"。即使我认为,如果您已经测试了@Alex 的答案但没有成功,问题是当您指向对象时页面尚未完全加载。尝试使用 Application.Wait 方法强制等待 5 秒,看看是否有效。 我试过 Application.Wait (Now + TimeValue("0:00:05"))... 不起作用 您能否尝试先写Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 5),然后在引发异常的行之前写MsgBox .document.getElementsByName("Nachnamevalue"),然后告诉我们您看到了什么? 什么都没有,因为我得到运行时错误 438 对象不支持此属性或方法。它指的是 .getElementsByName 好的,先试试Set obj = .document.getElementsByName("Nachnamevalue"),然后再试试MsgBox obj,然后等待重试。对于您提供的 HTML,它不可能不起作用:您的 HTML 代码/VBA 代码有拼写错误,或者您不在 With ie 块内。 【参考方案1】:

GetElementById 通过 id 属性获取元素,但 "Nachnamevalue"name 属性的值。

使用名称:

.document.Forms("Suchform").Elements("Nachnamevalue").value = "xxx"

【讨论】:

也试过了...总是出现同样的错误 :( 有没有可能我没有加载一些库?我已经加载了“HTML 对象库”,我试图加载所有我可以找到,但是什么都没有……仍然卡在那条线上……【参考方案2】:

这对我有用。该代码使用文件c:\Temp\page1.html中您的问题中的HTML。

Option Explicit

' Add reference to Microsoft Internet Controls
' Add reference to Microsoft HTML Object Library

Sub AddInfoFromIntranet()

    Dim ie As SHDocVw.InternetExplorer
    Dim doc As MSHTML.HTMLDocument
    Dim elements As MSHTML.IHTMLElementCollection
    Dim nachnameValueInput As MSHTML.HTMLInputElement

    Set ie = New SHDocVw.InternetExplorer

    With ie
        .Visible = True
        .navigate "c:\Temp\page1.html"
        Do Until Not .Busy And .readyState = 4
            DoEvents
        Loop

        Set doc = .document
        Set elements = doc.getElementsByName("Nachnamevalue")

        If Not elements Is Nothing Then
            Set nachnameValueInput = elements(0)
            If Not nachnameValueInput Is Nothing Then _
                nachnameValueInput.Value = "here goes whar I want to insert"
        End If

        .Quit
    End With

    Set ie = Nothing

End Sub

要检查 momonet 中存在的所有输入元素的名称,您可以在页面上执行 VBA 代码,您可以使用 getElementsByTagName("input")

    Set elements = doc.getElementsByTagName("input")

    If Not elements Is Nothing Then
        Dim inputElement
        For Each inputElement In elements
            Debug.Print inputElement.Name
        Next inputElement
    End If

【讨论】:

在这种情况下,elements(0) 为空白,Not nachnameValueInput Is Nothing = False 那么页面上不存在元素名称'Nachnamevalue'。名字会不会拼错?它可能是“NachnameValue”吗?使用F12 并检查它。 我从网页复制粘贴代码...不可能是拼写错误。 @dee:我尝试了您在编辑中的建议... debug.print 什么也没产生 页面是否公开?可以分享一下链接让我自己试试吗?有没有试过在页面加载完毕后按F12查看输入框有没有? 正如 Sub 的名称所暗示的那样......遗憾的是没有。是内网。我正在尝试让 Intranet 网页搜索我在该输入框中输入的名称【参考方案3】:

您可以尝试循环所有输入并根据需要选择一个:

Set Elements = IE.document.getelementsbytagname("Input")
For Each Element In Elements
    If Element.Name = "Nachnamevalue" Then
        Element.Value = Here your value
        Exit For
    End If
Next Element

【讨论】:

这很奇怪。该代码非常适合我。您是否已将 Here your value 更改为“Antony”(或其他任何内容)? 你分析过代码吗(按F8一步一步)?出了什么问题:捕获元素还是赋值? 是的,我做到了。也请看这里***.com/questions/27506705/…

以上是关于填充 Internet Explorer 输入框的主要内容,如果未能解决你的问题,请参考以下文章

jQuery .attr() 使 Internet Explorer 崩溃

css 从Internet Explorer和Chrome输入类型搜索中删除X.

Internet Explorer 在矩阵变换时扭曲 SVG 图像

清除 Internet Explorer 中的文件输入框

SVG 图标在 Internet Explorer 中不起作用

CSS 和 Internet Explorer 7 的神秘问题