原始资料:
我正在尝试使用 VBA 处理 Internet Explorer 会话。
当单击 div 元素时,网站的 HTML 使用一些后台程序添加输入复选框,而不是原生输入复选框。当被触发时,后台进程会在表单底部的 span 中添加一个 input 元素。因为我不能直接与 psuedo-checkbox div 元素交互并使用 .click 触发进程,所以我试图将我知道的结果输入元素添加到表单底部的 span 中。
示例 HTML:
span id="checkboxesFor_wt.epm.EPMDocument.defaultSearchView" style="visible" 输入类型="checkbox" 选中="true" id="search$search$$|search$executeSearch$$|search$search$$VR:wt.epm.EPMDocument:6927561181!*" name="pjl_selPJLsa1__1" value= "搜索$搜索$$|搜索$执行搜索$$|搜索$搜索$$VR:wt.epm.EPMDocument:6927561181!*" 输入类型="checkbox" 选中="true" id="search$search$$|search$executeSearch$$|search$search$$VR:wt.epm.EPMDocument:6927577196!*" name="pjl_selPJLsa1__1" value= “搜索$search$$|search$executeSearch$$|search$search$$VR:wt.epm.EPMDocument:6927577196!*” 输入类型="checkbox" 选中="true" id="search$search$$|search$executeSearch$$|search$search$$VR:wt.epm.EPMDocument:6822696098!*" name="pjl_selPJLsa1__1" value= “搜索$search$$|search$executeSearch$$|search$search$$VR:wt.epm.EPMDocument:6822696098!*” /跨度
我相信我需要在跨度上使用 .appendChild() 但我无法在这方面取得任何进展。遍历页面的其余部分并获取设置输入元素所需的信息的一切都很好。我只需要以某种方式将输入元素添加到跨度。
添加信息
VBA:
Dim ie_PTC_session As InternetExplorerMedium
Set ie_PTC_session = establish_ie_session_ref("url")
Dim html_DOC As HTMLDocument 'the HTML web page
Set html_DOC = ie_PTC_session.Document
If ie_PTC_session Is Nothing Then
MsgBox "Please open the corrent Internet Explorer Session."
Exit Sub
End If
'Initialize reference to the search field and input the desired search values
Dim global_search_field As HTMLInputElement
Set global_search_field = html_DOC.getElementById("gloabalSearchField")
global_search_field.Value = "search_vals"
'Initialize the search button and perform the search by clicking the image element
Dim search_button As HTMLImg ' the search button next to the global search field
Dim img_ele As HTMLImg
For Each img_ele In html_DOC.getElementsByTagName("IMG")
If img_ele.ClassName = "x-form-trigger global-search-trigger" Then
Set search_button = html_DOC.getElementById(img_ele.ID)
End If
Next img_ele
Set search_button = html_DOC.getElementById(search_button_id)
search_button.Click
Application.Wait (Now + TimeValue("0:00:05")) 'I know, do while is busy; just hasnt been working out
'probably do while hasnt found the a specfic element, probably mainform and with a timeout process
Dim mainform As HTMLFontElement
Set mainform = html_DOC.getElementById("mainform")
'Initialize and set the search_row_table html div element
Dim search_result_table As HTMLDivElement
Set search_result_table = html_DOC.getElementById("table__wt.epm.EPMDocument.defaultSearchView_TABLE")
'Initialie the span including the hidden input check boxes created by the div clicks
Dim checked_results As HTMLSpanElement
Set checked_results = html_DOC.getElementById("checkboxesFor_wt.epm.EPMDocument.defaultSearchView")
'Initialize and set a new html document. the purpose of this document is to serve as a building/manipulation
'area before they are appeneded as children to the span which controls the items added to a users workspace
Dim html_doc_m As HTMLDocument
Set html_doc_m = New HTMLDocument
Dim result_icheckbox As HTMLInputElement 'input element that is manipulated and added to the checked_results span element
Set result_icheckbox = html_doc_m.createElement("INPUT")
result_icheckbox.Name = "id_value"
result_icheckbox.Type = "checkbox"
result_icheckbox.Checked = True
'Initialize and set constants needed to build checkbox values
Dim ricb_id_prefix, ricb_suffix As String
ricb_id_prefix = "url+some": ricb_id_suffix = "!*"
'Initialize the elements needed to iterate through
Dim srt_div As HTMLDivElement 'rows of search results
Dim row_div As HTMLDivElement 'row colomn divs
Dim anchor As HTMLAnchorElement 'column anchor elements
Dim i, j As Integer: i = 0: j = 0 'Append information origin Top to Bottom, Left to Right
Dim href_m As String 'manipulated href attribute from anchor element
For Each srt_div In search_result_table.getElementsByTagName("div")
If IsNumeric(srt_div.getAttribute("RowIndex")) Then
For Each row_div In srt_div.getElementsByTagName("div")
If row_div.ClassName = "x-grid3-row-checker" Then
row_div.Click 'I click every single "checkbox" that is actually a div element.
'nothing happens at for these actions. not a thing.
End If
If row_div.ClassName = "x-grid3-cell-inner x-grid3-col-name" Then
'Debug.Print row_div.innerText
End If
If row_div.ClassName = "x-grid3-cell-inner x-grid3-col-number" Then
For Each anchor In row_div.getElementsByTagName("a")
'Debug.Print anchor.getAttribute("ext:qtip") 'windchill F Number
href_m = anchor.getAttribute("href")
href_m = Right(href_m, Len(href_m) - 93) '93 is the preceding host location. this probably needs to be more dynamic
href_m = Left(href_m, Len(href_m) - 5) '5 trailing characters, should probably be more dynamic as well
result_icheckbox.ID = ricb_id_prefix & href_m & ricb_id_suffix
result_icheckbox.Value = result_icheckbox.ID
'This is the point where all of the needed input information has been set and I need to add the
'input element to the span. I cannot get this to work. Do I need to create a second HTML Doc, add the span,
'and replace the original in the browser as per one of the comments?
checked_results.appendchild (results_icheckbox)
'appendchild takes an "IHTMLDOMNode, maybe I need to create a DOMNode span use it to replace the current span?
Next anchor
End If
Next row_div
End If
Next srt_div
Set everything = Nothing 'Remove some lines for ease of question viewing
HTML:
<FORM name=mainform id=mainform action=""; method=post>
<DIV class="searchPage" form=[object]>
<!--CONTENT_AREA-->
<DIV id=searchResultTableDiv>
<SCRIPT language=javascript>
//javascript object for search results
resultParams = new SearchResultsJSParams();
resultParams.searchResultsViewId = 'wt.epm.EPMDocument.defaultSearchView';
resultParams.webappName = '';
resultParams.quickSearch = false;
Ext.ComponentMgr.onAvailable('wt.epm.EPMDocument.defaultSearchView', PTC.search.addSearchResultsTableListeners);
</SCRIPT>
<INPUT name=mvcFlag type=hidden value=null>
<DIV class=frame_outer id=table__wt.epm.EPMDocument.defaultSearchView_TABLE>
<DIV class=" x-panel x-panel-noborder x-grid-panel" id=wt.epm.EPMDocument.defaultSearchView style="WIDTH: auto">
<DIV class=x-panel-bwrap id=ext-gen1803>
<DIV class="x-panel-body x-panel-body-noheader x-panel-body-noborder" id=ext-gen1805 style="HEIGHT: 116px; WIDTH: auto">
<DIV class=x-grid3 id=ext-gen1810 style="HEIGHT: 116px" hideFocus>
<DIV class=x-grid3-viewport id=ext-gen1811>
<DIV class=x-grid3-header id=ext-gen1812>
<DIV class=x-grid3-header-inner id=ext-gen1818>
<DIV class=x-grid3-header-offset style="WIDTH: 1394px">
<TABLE style="WIDTH: 1375px" border=0 cellSpacing=0 cellPadding=0>
<THEAD>
<TR class=x-grid3-hd-row>
<TD class="x-grid3-hd x-grid3-cell x-grid3-td-checker x-grid3-cell-first" style="WIDTH: 18px">
<DIV class="x-grid3-hd-inner x-grid3-hd-checker" unselectable="on"><A class=x-grid3-hd-btn id=checker href="#"></A>
<DIV class=x-grid3-hd-checker ext:qtip="Select all rows"> </DIV><IMG class=x-grid3-sort-icon src=""></DIV></TD>
<TD class="x-grid3-hd x-grid3-cell x-grid3-td-statusFamily_General" style="WIDTH: 30px">
<DIV class="x-grid3-hd-inner x-grid3-hd-statusFamily_General" unselectable="on" ext:qtip="Sort by General Status"><A class=x-grid3-hd-btn id=statusFamily_General href="#"></A><SPAN class=hiddenHeader>General Status</SPAN><IMG class=x-grid3-sort-icon src=""></DIV></TD>
<TD class="x-grid3-hd x-grid3-cell x-grid3-td-name x-grid3-sort-asc1" style="WIDTH: 118px">
<DIV class="x-grid3-hd-inner x-grid3-hd-name" unselectable="on" ext:qtip="Sort by Name"><A class=x-grid3-hd-btn id=name href="#"></A>Name<IMG class=x-grid3-sort-icon src=""></DIV></TD>
<TD class="x-grid3-hd x-grid3-cell x-grid3-td-number" style="WIDTH: 118px">
<DIV class="x-grid3-hd-inner x-grid3-hd-number" unselectable="on" ext:qtip="Sort by Number"><A class=x-grid3-hd-btn id=number href="#"></A>Number<IMG class=x-grid3-sort-icon src=""></DIV></TD>
</TR>
</THEAD>
</TABLE>
</DIV>
</DIV>
</DIV>
<DIV class=x-grid3-scroller id=ext-gen1813 style="HEIGHT: 95px; WIDTH: auto">
<DIV class=x-grid3-body id=ext-gen1814 style="WIDTH: 1375px">
<DIV class="x-grid3-row x-grid3-row-first" id=ext-gen1888 style="HEIGHT: 22px; WIDTH: 1375px" rowIndex="0">
<TABLE class=x-grid3-row-table style="HEIGHT: 22px; WIDTH: 1375px" border=0 cellSpacing=0 cellPadding=0>
<TBODY>
<TR>
<TD tabIndex=-1 class="x-grid3-col x-grid3-cell x-grid3-td-checker x-grid3-cell-first " style="WIDTH: 18px">
<DIV class="x-grid3-cell-inner x-grid3-col-checker">
<DIV class=x-grid3-row-checker> </DIV>
</DIV>
</TD>
<TD tabIndex=-1 class="x-grid3-col x-grid3-cell x-grid3-td-name " style="WIDTH: 118px">
<DIV class="x-grid3-cell-inner x-grid3-col-name" ext:qtip=""></DIV>
</TD>
<TD tabIndex=-1 class="x-grid3-col x-grid3-cell x-grid3-td-number " style="WIDTH: 118px">
<DIV class="x-grid3-cell-inner x-grid3-col-number">
<A class=linkfont id="" href="" ext:qtip=""></A>
</DIV>
</TD>
</TR>
</TBODY>
</TABLE>
<DIV class="x-grid3-row x-grid3-row-alt" style="HEIGHT: 22px; WIDTH: 1375px" rowIndex="1">
<TABLE class=x-grid3-row-table style="HEIGHT: 22px; WIDTH: 1375px" border=0 cellSpacing=0 cellPadding=0>
<TBODY>
<TR>
<TD tabIndex=-1 class="x-grid3-col x-grid3-cell x-grid3-td-checker x-grid3-cell-first " style="WIDTH: 18px">
<DIV class="x-grid3-cell-inner x-grid3-col-checker">
<DIV class=x-grid3-row-checker> </DIV>
</DIV>
</TD>
<TD tabIndex=-1 class="x-grid3-col x-grid3-cell x-grid3-td-type_icon " style="WIDTH: 30px">
<DIV class="x-grid3-cell-inner x-grid3-col-type_icon"><IMG title="CAD Part" src=""></DIV>
</TD>
<TD tabIndex=-1 class="x-grid3-col x-grid3-cell x-grid3-td-infoPageAction " style="WIDTH: 30px">
<DIV class="x-grid3-cell-inner x-grid3-col-infoPageAction">
<A class="linkfont icon" id="" href="" ext:qtip="View information"><IMG width=16 height=16 align=middle src="netmarkets/images/details.gif" border=0 ext:qtip="View information"></A>
</DIV>
</TD>
<TD tabIndex=-1 class="x-grid3-col x-grid3-cell x-grid3-td-name " style="WIDTH: 118px">
<DIV class="x-grid3-cell-inner x-grid3-col-name" ext:qtip=""></DIV>
</TD>
<TD tabIndex=-1 class="x-grid3-col x-grid3-cell x-grid3-td-number " style="WIDTH: 118px">
<DIV class="x-grid3-cell-inner x-grid3-col-number">
<A class=linkfont id="" href="" ext:qtip=""></A>
</DIV>
</TD>
</TR>
</TBODY>
</TABLE>
</DIV>
<DIV class="x-grid3-row x-grid3-row-last" style="HEIGHT: 22px; WIDTH: 1375px" rowIndex="2"></DIV>
</DIV>
</DIV>
</DIV>
</DIV>
</DIV>
</DIV>
</DIV>
</DIV>
</DIV>
</DIV>
</DIV>
<!--CONTENT_AREA--><!-- negate onunload cancel request, page load completed -->
<SPAN id=checkboxesFor_wt.epm.EPMDocument.defaultSearchView style="DISPLAY: none">
<INPUT name="" id="" type=checkbox CHECKED value="">
<INPUT name="" id="" type=checkbox CHECKED value="">
</SPAN>
</FORM>