【问题标题】:Get data from Internet Explorer从 Internet Explorer 获取数据
【发布时间】:2015-08-15 23:00:31
【问题描述】:

我正在学习如何从 Internet Explorer 中提取源数据。我已经从 YouTube 学会了如何编码。但是,当我想修改它以测试另一个网站时,我遇到了错误。谁能给点建议?

测试网站:http://www.oxforddictionaries.com

Sub clickFormbutton()


Dim ie As Object
Dim form As Variant, button As Variant


Set ie = CreateObject("InternetExplorer.Application")


input1 = InputBox("Please enter keyword.")


With ie

.Visible = True
.navigate ("http://www.oxforddictionaries.com")


While ie.ReadyState <> 4
DoEvents
Wend


ie.document.getelementsbyname("q").Item.innertext = input1


Set form = ie.document.getElementsbytagname("form")

Set button = form(0).onsubmit


form(0).submit


Do While ie.busy: DoEvents: Loop

Set TDelements = .document.getElementsbytagname("td")
r = 0
c = 0

For Each TDelement In TDelements
Sheet1.Range("A1").Offset(r, c).Value = TDelement.innertext
r = r + 1
Next





End With

Set ie = Nothing





End Sub

【问题讨论】:

  • 你能告诉我们错误是什么吗?请编辑您的问题并包含错误。
  • 错误是运行时错误'91':对象变量或未设置块变量

标签: vba excel


【解决方案1】:

虽然您对收到的错误不是很具体,但在我看来,给您带来问题的第一件事是您使用 getElementsByName() 的方式。

getElementsByName() 返回具有指定name 属性值的节点的集合,在您的情况下为name="q"。对于您正在与之交互的页面,有 两个 节点包含 name="q",您可以使用以下语句进行验证:

MsgBox ie.document.getElementsByName("q").length    ' => Reports "2"

找到的第一个节点似乎是 mobile 用户的搜索框。第二个是 desktop 用户的搜索框。因此,如果您想更改其中一个节点的innerText,则需要按索引寻址单个节点:

Dim e
Set e = ie.document.getElementsByName("q")(0)  ' Get first instance
Set e = ie.document.getElementsByName("q")(1)  ' Or, get second instance
e.innerText = "some text"

但是,这给我们带来了下一个问题。这些元素是&lt;input&gt; 元素,因此设置innerText 对您没有任何好处。我猜你想要做的是设置他们的value,你可以这样做:

Set e = ie.document.getElementsByName("q")(1)  ' Get desktop search box
e.Value = "some text"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-05
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多