vba:如何在iframe中单击元素

时间:2019-01-06 10:03:07

标签: html vba selenium iframe web-scraping

我的目标是单击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

在加载网址之后,应执行以下步骤:

  1. 点击标签7->这将打开正确的标签以供使用
  2. 将值从笨拙的“ W”转换为“全局工作组”字段
  3. 关注“全球工作组”字段
  4. 单击验证“全局工作组”字段的图像 (验证插值)
  5. 将笨拙的“ X”中的inseart值添加到“工作组”字段中
  6. 关注“工作组”字段
  7. 单击打开下拉选项的图像,该选项已生成 根据“工作组”字段插入的值
  8. 在iframe中,单击等于value的标题 已插入“工作组”字段的
  

我也尝试过使用Selenium IDE,以便可以看到录制的宏如何访问iframe并单击所需的元素:

     
      
  1. 命令:选择框架|目标:Index = 2
  2.   
  3. 点击|目标:css = span [title =“ APAC”]
  4.   
     

我试图模仿VBE中的上述stpes,但是找不到正确编写它的方法。我事件试图下载并应用selenium驱动程序,并使用selenium库运行代码,但也被卡住了。

下面的图片是iframe的html代码以及我要单击的所需元素: HTML code image

1 个答案:

答案 0 :(得分:2)

您应该能够使用以下语法

ie.document.querySelector("[id='_CPDDWRCC_ifr']").contentDocument.querySelector("span[title=APAC]").click

使用硒,您可以使用

driver.SwitchToFrame driver.FindElementByCss("[id='_CPDDWRCC_ifr']")
driver.FindElementByCss("span[title=APAC]").click

使用现有的标签解决方案,您需要使用索引。例如,

objIFRAME(0) 

然后在querySelectorcontentDocument