【问题标题】:How can I switch iframe using selenium vba?如何使用 selenium v​​ba 切换 iframe?
【发布时间】:2018-01-15 12:32:46
【问题描述】:

使用 selenium 在 vba 中编写脚本以在运行时切换 iframe,我收到错误消息:对象不支持此属性。如果我以下面的例子为参考,我该怎么做。

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

【问题讨论】:

  • 你为什么不去这里? public.hcad.org/records/quicksearch.asp
  • 没办法。如果我忽略第一个 iframe。目标页面中还有其他人。我想知道vba中是否有切换iframe的选项
  • 我会从删除 FindElementByTag 的返回值周围的这些无关括号开始,这看起来非常像它正在返回一个对象引用 - 这是传递 ByVal 的一个非常非常糟糕的主意就像你用这些括号做的那样。
  • @Shahin,当您在 SO 上发布问题时,请包含 所有 信息,例如导致错误的代码行。你所做的只是,说你有一个错误,但你没有说错误发生在哪里。你的程序很简单,所以很容易猜测错误发生在哪里。如果您的程序更复杂,我怀疑在您提供信息之前有人会费心帮助您。
  • 抱歉 jsotola 延迟回复。我遇到了停电。

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


【解决方案1】:

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

btw .. cells(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

【讨论】:

    【解决方案2】:

    根据@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
    

    【讨论】:

      猜你喜欢
      • 2023-03-07
      • 2019-08-17
      • 2019-02-01
      • 2021-05-19
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      • 2021-06-19
      • 2020-11-23
      相关资源
      最近更新 更多