填充 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">
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">
<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 图像