在过去的几个小时中,我一直在尝试解决一个简单的问题,但无法弄清楚我要去哪里。有一个网页,其中要填充two srarch boxes
以填充结果;一个用于street number
,另一个用于street name
。我下面的脚本中的.SendKeys
中已经设置了两个搜索词,以便您可以按原样运行它。
需要处理三个iframes
才能到达内容。第一个iframe
会出现在search boxes
所在的登录页面中。我已经切换了。但是,最后两个nested iframes
出现在结果页面中。我已经切换了第一个(从结果页面),但是无法切换最后一个以达到我想要的内容。我正在尝试在标题为VANDREUMEL SILVIA HERNANDEZ
的表标题下提取Ownership History
这个名称。
当切换第二个iframe
(命名为quickframe
的{{1}}时,会引发错误id
。我如何解决此问题才能获得element not found error
?
再次,搜索字词是:
owner name
应该是street no.
10023
应该是street name
然后点击搜索按钮以填充结果。
这是我到目前为止的尝试:
HARDISON LN
顺便说一句,如果您手动尝试链接以查看Sub CollectInformation()
Dim post As Object
With New ChromeDriver
.get "http://hcad.org/quick-search/"
.SwitchToFrame .FindElementByTag("iframe", Timeout:=7000)
.FindElementById("s_addr", Timeout:=7000).Click
.FindElementByCss("input[name='stnum']", Timeout:=7000).SendKeys "10023"
.FindElementByCss("input[name='stname']", Timeout:=7000).SendKeys "HARDISON LN"
.FindElementByCss("input[value='Search']", Timeout:=10000).Click
.SwitchToFrame .FindElementByCss("iframe", Timeout:=7000)
.SwitchToFrame .FindElementById("quickframe", Timeout:=10000) ''error thrown here
For Each post In .FindElementsByCss("th", Timeout:=7000)
If InStr(1, post.Text, "VANDREUMEL", 1) > 0 Then R = R + 1: Cells(R, 1) = post.Text: Exit For
Next post
Stop
End With
End Sub
,则需要单击search boxes
才能显示该search by address
。
答案 0 :(得分:2)
您已经在正确的框架中
Option Explicit
Public Sub CollectInformation()
With New ChromeDriver
.get "http://hcad.org/quick-search/"
.SwitchToFrame .FindElementByTag("iframe", timeout:=7000)
.FindElementById("s_addr", timeout:=7000).Click
.FindElementByCss("input[name='stnum']", timeout:=7000).SendKeys "10023"
.FindElementByCss("input[name='stname']", timeout:=7000).SendKeys "HARDISON LN"
.FindElementByCss("input[value='Search']", timeout:=10000).Click
.SwitchToFrame .FindElementByCss("iframe", timeout:=7000)
Debug.Print .FindElementByCss("input[name=searchval]", timeout:=7000).Attribute("value") '<== Just the name
' Debug.Print .FindElementByCss("tbody th:nth-child(2)", timeout:=7000).Text '<== Header i.e. Name and address
End With
End Sub
仅输出名称:
标头的输出
th
标签包含名称和地址
答案 1 :(得分:1)
尽管问题已经解决,但我还是决定提出一个可靠的解决方案。如果按照我在下面尝试的方法进行操作,则不必担心iframes
。您要做的就是使用适当的POST
和适当的headers
发送ActiveX
请求,您将在其中获得cookie
支持。但是,Microsoft WinHTTP Services
是您实现相同目标的正确选择。
这是您可以去的方式:
Sub CollectInformation()
Dim Http As New WinHttp.WinHttpRequest, Html As New HTMLDocument
Dim oelem As Object
With Http
.Open "POST", "https://public.hcad.org/records/QuickSearch.asp", False
.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
.setRequestHeader "User-Agent", "Mozilla/5.0"
.send "search=addr"
End With
With Http
.Open "POST", "https://public.hcad.org/records/QuickRecord.asp", False
.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
.setRequestHeader "User-Agent", "Mozilla/5.0"
.setRequestHeader "Referer", "https://public.hcad.org/records/QuickSearch.asp"
.send "TaxYear=2018&stnum=10023&stname=HARDISON+LN"
Html.body.innerHTML = .responseText
End With
Set oelem = Html.querySelector("input[name=searchval]")
If Not oelem Is Nothing Then
MsgBox oelem.getAttribute("value")
End If
End Sub
要添加到库中的引用:
Microsoft HTML Object Library
Microsoft WinHTTP Services, version 5.1
输出: