如何使用selenium v​​ba切换iframe?

时间:2017-08-08 05:19:58

标签: vba selenium iframe selenium-webdriver web-scraping

使用selenium在vba中编写脚本以便在运行iframe时切换iframe,我收到错误:object不支持此属性。如果我将以下示例作为考虑因素,我该怎么做呢。

Sub HCAD()
    Dim driver As New ChromeDriver

    driver.Get "http://hcad.org/quick-search/"
    driver.Wait 500
    driver.SwitchToFrame (driver.FindElementByTag("iframe"))
End Sub

这是我试图从目标页面获取地址名称的脚本。当我到达那里时我会面对另一个iframe,所以最后什么都没得到。我脚本中提到的地址只有一个名称。

Sub HCAD()
    Dim driver As New ChromeDriver
    Dim post As Object

    driver.Get "https://public.hcad.org/records/quicksearch.asp"
    driver.Wait 500
    driver.FindElementById("s_addr").Click
    driver.FindElementByName("stnum").SendKeys ("8227")
    driver.FindElementByName("stname").SendKeys ("FINDLAY ST")
    driver.FindElementByXPath("//input[@value='Search']").Click
    driver.Wait 1000

    Cells(1, 1) = driver.FindElementByXPath("/html/body/table/tbody/tr/td/table[5]/tbody/tr[2]/td[1]/table/tbody/tr/th").Text

End Sub

2 个答案:

答案 0 :(得分:0)

为您的代码添加了一些额外的好功能

btw ..细胞(1,1)线失败

Sub HCAD()

    ' add ref: Selenium Type Library

    Dim driver As New ChromeDriver    ' PhantomJSDriver (this one is for "headless" browsing) 

    driver.Get "https://public.hcad.org/records/quicksearch.asp"
    driver.Wait 500
    driver.FindElementById("s_addr").Click
    driver.FindElementByName("stnum").SendKeys ("8227")
    driver.FindElementByName("stname").SendKeys ("FINDLAY ST")
    driver.FindElementByXPath("//input[@value='Search']").Click
    driver.Wait 1000

    Dim bbb As Object
    Set bbb = driver.TakeScreenshot
    bbb.ToExcel Cells(5, 1)
    Set bbb = Nothing


    Cells(1, 1) = driver.FindElementByXPath("/html/body/table/tbody/tr/td/table[5]/tbody/tr[2]/td[1]/table/tbody/tr/th").Text

    Set driver = Nothing

End Sub

答案 1 :(得分:0)

根据@Mathieu Guindon的建议,解决方案应该如下(工作一)。

Sub HandleIframe()
    With New ChromeDriver
        .get "http://hcad.org/quick-search/"
        .SwitchToFrame .FindElementByTag("iframe", timeout:=10000)
        .FindElementById("acct").SendKeys "8227"
        .FindElementByCss("input[value='Search']").Click
    End With
End Sub