我的VBA scraper的IE源代码占位符控件

时间:2016-06-20 05:45:20

标签: vba web-scraping

我有以下代码打开IE页面,并使用值“caravan”填写字段。但是我只需要用“大篷车”填写第一个字段。我需要第二个填写“2016”。我遇到了这个任务的麻烦,因为我似乎无法唯一地识别输入标签中的每个元素(所有字段都属于这个元素)。

这是我的代码:

Sub Quote()



Dim ie As Object

Set ie = CreateObject("InternetExplorer.Application")

ie.navigate ("https://insurance.qbe.com.au/portal/caravan/form/estimate")

ie.Visible = True

Do
DoEvents
Loop Until ie.readystate = 4



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

Do
DoEvents
Loop Until ie.readystate = 4


Set inputCollection = ie.document.getElementsByTagName("input")



For Each inputElement In inputCollection


inputElement.Value = "Caravan"


Next inputElement


Loop


End Sub

所以它将每个“inputElement”放在“input”标签内,并且在可能的情况下,它使相应字段的显示值为“caravan”。

为了说明为什么我难以唯一识别每个字段,这里是前两个字段的来源(第一个是大篷车类型;第二个是大篷车制造年份):

第一个

enter image description here

第二个

enter image description here

所以既没有身份证明。两者都在“input”标签内,并且都具有相同的类名。所以我不能get-element-by-id或get-elements-by-classname。我尝试通过各种方式获取classname元素,它根本不做任何事情(不会产生错误,网页也不会受到影响)。

我设法填写字段的唯一方法是使用上面的代码。但是,同样,它正在改变所有这些领域。我认为我唯一真正能用来让我的代码告诉两者的是每个人的占位符元素。

但我如何实现这一目标,因为你不能“按占位符获取元素”

//

我已经尝试确认无法使用classname,并修改了以下代码:

Set inputCollection = ie.document.getElementsByTagName("input")

For Each inputElement In inputCollection

If ie.document.getElementsByClassName.Value = "ui-select-search ui-select-toggle ng-pristine ng-valid ng-touched" Then inputElement.Value = "Caravan"

1 个答案:

答案 0 :(得分:0)

哦,我的!多么激动人心!!经过几天的网上搜索,我终于找到了如何做到这一点。它总是必须是简单的东西(但是,唉,这根本不是我的专业领域所以它对我来说总是非常具有挑战性)。无论如何,这段代码是有效的(我希望我很快就会把火事件线放进去):

Set inputCollection = ie.document.getElementsByTagName("input")



For Each inputElement In inputCollection

If inputElement.getAttribute("placeholder") = "Caravan type" Then

inputElement.Value = "Caravan"

Exit For

End If

Next inputElement

我是如此不知道" getAttribute"但它非常有意义。如果您没有ID,并且您正在查看的某些字段具有相同的类名(通常情况可能如此),那么您需要依赖其他唯一属性并使用此类代码。

如果你想知道我在哪里发现了这个,我发现了这个非常酷的Youtube频道,这里是帮助我的特定视频:

https://www.youtube.com/user/alexcantu3/videos

希望有一天能帮助别人!