【发布时间】:2019-06-01 07:04:42
【问题描述】:
我的目标是单击 html Iframe 中的元素,但到目前为止对我来说没有任何效果。希望有人能建议我如何正确地完成这项任务,因为我现在已经在圈子里跑了几个星期了。
我尝试单击 div Id、跨度标题,但到目前为止没有任何效果。我相信这是因为语法错误
Option Explicit
Sub it_will_work()
'make the app work faster?
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'--------------------------------
Dim sht As Worksheet
Set sht = ThisWorkbook.Sheets("Fields") 'my data will be stored here
Dim LastRow As Long
LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row 'range definition
Dim i As Long 'Will be used for a loop that navigate to different url
For i = 2 To LastRow 'First url starts at row 2 untill the last row
Dim IE As Object 'Internet Explorer declaration
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.navigate sht.Range("A" & i).Value 'My url that I want to navigate to
While IE.readyState <> 4 Or IE.Busy: DoEvents: Wend
Dim Doc As New HTMLDocument 'Will be used for the main html page
Set Doc = IE.document
Doc.getElementById("tab7").Click 'data taht need to be updated is here
'Global workgroup data that will effect the workgroup data(dependency)
Doc.getElementById("mcdResourceGlobalWorkgroup_ddltxt").Value = sht.Range("W" & i).Value
Doc.getElementById("mcdResourceGlobalWorkgroup_ddltxt").Focus
Doc.getElementById("mcdResourceGlobalWorkgroup_ddlimg").Click
'Workgroup dropdown, that need to be choosen within the Iframe:
Doc.getElementById("ResourceWorkgroup").Value = sht.Range("X" & i).Value '1) worgroup that I want to insert
Doc.getElementById("ResourceWorkgroup").Focus
Doc.getElementById("_IB_imgResourceWorkgroup").Click '2) Cliking here will generate dropdown values according the value inserted above
Application.Wait Now + TimeValue("00:00:5") 'before refering to Iframe I let the values to be loaded
'***from this point I have the issue where I try to access Iframe and click on the desired element:***
'Here I declare Iframe
Dim objIFRAME As Object
Set objIFRAME = IE.document.getElementsByTagName("iframe")
Debug.Print TypeName(objIFRAME)
'Here I ask to click on a title within the Iframe where value = X
objIFRAME.getElementsByName("title").Value = sht.Range("X" & i).Value.Click
Next i
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
网址加载后,应执行以下步骤:
- 单击选项卡 7 -> 这将打开正确的选项卡以进行处理
- 将值从“W”列插入“全局工作组”字段
- 专注于“全球工作组”领域
- 单击验证“全局工作组”字段的图像 (验证插入的值)
- 将值从“X”列插入“工作组”字段
- 关注“工作组”字段
- 点击图片打开下拉选项,生成 根据插入的值到“工作组”字段
- 在iframe中,点击与value相等的标题 已插入“工作组”字段
我也尝试过使用 Selenium IDE,这样我就可以看到录制的宏如何访问 Iframe 并单击所需的元素:
- 命令:选择框架 |目标:索引=2
- 点击 |目标:css=span[title="APAC"]
我试图在 VBE 中模仿上面的 stpes,但找不到正确编写它的方法。我尝试下载和应用 selenium 驱动程序并使用 selenium 库运行代码,但也卡住了。
【问题讨论】:
标签: html vba selenium iframe web-scraping