【问题标题】:Input text into html input box using vba使用vba将文本输入到html输入框中
【发布时间】:2014-01-03 21:22:29
【问题描述】:

我正在尝试使用 VBA 在 Internet Explorer 页面上输入一个值。我看过类似的帖子,但似乎无法确定我的问题。我对 VBA 有点流利,但 HTML 对我来说是新的。每次加载页面时,我正在访问的网页上的 ID 属性都会发生变化。这是我尝试访问的 HTML 元素的截图:

<input type="text" size="20" style="text-align: right; width: 261px;" autocomplete="off"    id="ext-comp-1067" name="user_numbers.1.number_1" class="x-form-text x-form-field x-form- num-field" title="">

我目前使用的代码在这里:

    Sub OpenWebPage()

    Dim ObjCollection As Object
   Dim i As Long
Dim objElement As Object
Dim doc As Object
Dim form As Object



    Dim ie As Object
    Set ie = CreateObject("INTERNETEXPLORER.APPLICATION")
    ie.Navigate "http://11.182.123.21/#!/view/dashboards/dashboard-1"
    ie.Visible = True
    While ie.Busy
        DoEvents
   Wend


    Application.Wait Now + TimeValue("00:00:10")

 Set ObjCollection = ie.Document.getElementsByName("user_numbers.1.number_1").Value = "123"

End sub

名称“user_number.1.number_1”我认为是html中唯一可以用来找到这个输入框的元素,每次打开网页时ID都会改变。 如何在此字段中输入值?

谢谢!

【问题讨论】:

  • ID是否也会改变id="ext-comp-1067"
  • 是的,只要您关闭网页并重新加载它,它就会发生变化。名称没有改变,但这就是我尝试使用它的原因。
  • 你有一个额外的“=”符号。
  • 我尝试了完全相同的代码,它对我有用。顺便说一句,您的机器上安装了哪个 Internet Explorer 版本?
  • @PradeepKumar 我使用的是 IE 8

标签: html vba


【解决方案1】:

正如 sid 提到的,你有一个额外的“=”符号。

替换

Set ObjCollection = ie.Document.getElementsByName("user_numbers.1.number_1").Value = "123"

ie.Document.getElementsByName("user_numbers.1.number_1")(0).Value = "123"

这只是我的想法,未经测试的代码。如果这不起作用,请将上述代码中的(0) 替换为(1)

如果页面上没有同名的其他元素,那么这将起作用。 否则将上述语句中的(0) 替换为适当的序号位置。

【讨论】:

  • 是的,抱歉,我忘了去掉多余的“=”符号,这是我尝试的不同内容的一部分。 @pradeep Kumar,我按照你上面提到的那样尝试过,但仍然没有运气。我收到“运行时错误 91,对象变量或未设置块变量”。并感谢你们的意见!
  • 我正在尝试上面相同的代码,但仍然出现相同的错误。 “对象变量或未设置块变量”。
  • 您正在查看的 html 标记可能不在 Internet Explorer 主窗口中,而是在另一个框架或 iframe 中。是这样吗?
【解决方案2】:

这样每次找ID怎么样

my_var = ie.doc.body.innerhtml

pos_1 = instr(1, my_var, "user_numbers.1.number_1", vbTextCompare)
pos_2 = InStrRev(my_var, "id", pos_1, vbTextCompare)
pos_3 = instr(pos_2, my_var, "name", vbTextCompare)

my_id = mid(my_var, 3+pos_2, (-1+pos_3) - (3+pos_2)

现在试试

ie.Document.getElementById(my_id).Value = "123"

我无法访问您的网址,因此您可能需要调整“mid”函数中添加和减去的数字

【讨论】:

  • 罗恩,我恐怕这有点过头了。我不确定如何使用您发布的代码。我看到你想要完成的事情。我将如何定义所有引入的新变量?另外,关于为什么这段代码不起作用的任何想法?名称是唯一的,我无法在输入框中写入。 '代码' ie.Document.getElementsByName("user_numbers.1.number_1")(0).Value = "123" '代码'
  • 另外,我是新来的,在添加评论时无法弄清楚如何在单独的框中很好地发布代码。那里的任何帮助也会很棒。谢谢!
  • 无需定义新变量。试着把我的代码放在你的“Application.Wait”行之后。使用 F8 单步执行代码,看看您是否获得了所需的 ID。 “InStr”在 my_var(在本例中包含网页后面的源代码)中查找搜索词(如“ID”)中第一个字符的数字位置。 InStrRev 反向执行相同的操作(请参阅 Excel VBA 帮助以获取正确的语法和更好的解释)。所以我们只是使用pos_1、_2和_3来定位“ID”在源代码中的位置。接下来我们使用“mid”从源代码中提取实际的ID。
  • 在 pos_2 我收到“无效的过程或参数”错误。我正在玩 inStrRev 函数,但没有成功。
  • 您是否得到了 pos_1 的非零值?
猜你喜欢
  • 2013-06-21
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 2017-03-27
  • 1970-01-01
  • 1970-01-01
  • 2013-06-21
相关资源
最近更新 更多