使用VBA从iFrame填充网页上的下拉列表
我有一个代码,它打开一个网页并单击一个链接。然后从一个Iframe加载数据,我试图改变下拉列表的值。使用VBA从iFrame填充网页上的下拉列表
我试图从Year
iFrame填充Manufr
下拉列表。使用VBA,但我得到Object Variable or With Block Variable not set
错误。这可能与我试图编辑的数据在Iframe中有关吗?
这里是代码我试图使用
Sub Scrape2()
Dim Browser As InternetExplorer
Dim Doc As HTMLDocument
Dim element As IHTMLElement
Set Browser = New InternetExplorer
Browser.Visible = True
Browser.navigate "http://catalog.xxxxxxx.com"
Do While Browser.Busy And Not Browser.readyState = READYSTATE_COMPLETE
DoEvents
Loop
For Each l In Browser.document.getElementsByTagName("a")
If l = "http://catalog.xxxxx.com/Catalog.asp?VehicleRef=2" Then
l.Click
Exit For
End If
Next
Stop
Set Doc = Browser.document
Dim mainIframe
Dim subIframe
Set mainIframe = Doc.frames.Item(1).document
Set subIframe = mainIframe.frames.Item(0).document
Set element = mainIframe.getElementById("Manufacturer").selectedIndex = 1
element.FireEvent ("onchange")
Set Doc = Nothing
Set Browser = Nothing
End Sub
尝试:
Dim d2
Set d2 = Doc.frames("Year").document
Set element = d2.getElementById("Manufacturer").selectedIndex = 1
element.FireEvent ("onchange")
编辑:试试这个
Dim d2, evt
Set d2 = Doc.frames("main").document.frames("year").document
Set element = d2.getElementById("Manufacturer")
If Not element Is nothing Then
Debug.Print "Got drop-down"
element.selectedIndex = 1
'either this...
element.FireEvent ("onchange")
'or try this...
Set evt = d2.createEvent("HTMLEvents")
evt.initEvent "change", True, False
element.dispatchEvent evt
Else
Debug.Print "couldn't get drop-down!"
End if
您需要在点击第一个链接后添加一个等待(或者为了测试目的,您可以在Set Doc = Browser.Document中放置一个中断,并等待页面加载完成后再继续) –
难以提供其他方法去测试。你能提供一个URL吗? –
你好,我设法使用主索引(0)和子索引(0) –
什么是第一个链接点击吗?你是否需要等待该事件完成? –
第一个链接在文档中加载iframe。难道数据嵌入在Iframe中,导致问题? –
是的框架中的文档与您正在使用的文档不是同一文档。你需要时间来加载。 –