VBA - 处理Javascript弹出IE自动化 [英] VBA - Handle Javascript pop up with IE automation
问题描述
< input type =image
class =kantele-small-iconsrc =../../_ layouts /图像/ Empty.gif
alt =传输
onclick =return confirmOnTransfer(); WebForm_DoPostBackWithOptions(new
WebForm_PostBackOptions(& quot; ctl00 $ PlaceHolderMain $ TestControl1
$ CertificateSearchControl $ cmdTransfer& quot;& quot;& quot; true,
& quot; Transfer& quot;& quot;& quot; false,false))
风格= BORDER-宽度:0像素; />
我使用以下命令调用传输按钮:
设置HTMLDoc = ie.document
HTMLDoc.all.Item(ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_cmdTransfer)。点击
任何人都可以帮助我找到解决这个问题的解决方案?
另一篇文章中已经回答了一个类似的问题,但我似乎无法让我的脚本中的解决方案工作。
所有帮助将被格外好评。
更新08032015:
function confirmOnTransfer(){
if(typeof(Page_ClientValidate)==function&&& Page_ClientValidate()){
var volume = document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_txtCertificateCou NT)value.trim();
var oDDL = document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_ddlTransferDomain');
var oDDL2 = document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_ddlTransferActor');
var oDDL3 = document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_ddlTransferAccount');
var checkbox = document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_chkAcc');
var selectedVolume = document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_hdnFinalVolume')。value.trim();
//问题3982:1496 - 错误:协议日期在交易日期之后
var contractDateDefaultValue = 0;
if(document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_txtContractDate')!= null){
var currentDate = new Date();
var currmonth;
var currDate;
//在java脚本中,数组保存到数组中的数组开始为零,所以如果getmonth()表示我们可以检索当前月份,那么我们应该添加+1
var currmonth = currentDate .getMonth()+ 1;
//在我们的申请中,日期应为2013-06-20,所以这里的月份或者日期长度小于两个意味着我们应该在日期或月之前添加'0'
if( currmonth.toString()。length< 2)
currmonth ='0'+ currmonth;
var currDate = currentDate.getDate();
if(currentDate.getDate()。toString()。length< 2)
currDate ='0'+ currDate;
var currentDateText = currentDate.getFullYear()+' - '+ currmonth +' - '+ currDate;
var currentDateArr = currentDateText.toString()。split(' - ');
var ContactDateArr = document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_txtContractDate')。value.toString()。split(' - ');
if(ContactDateArr [0]> currentDateArr [0]
||(ContactDateArr [0] == currentDateArr [0]&& currentDateArr [1] == ContactDateArr [1 ]&&< currentDateArr [2]< ContactDateArr [2])
||(ContactDateArr [0] == currentDateArr [0]& amp;& currentDateArr [1]< ContactDateArr [1])){
alert(document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_hdnContractDateValidation')。value)
//如果收到的警报意味着我们应该根据这个值分配这个值,我们控制下一个条件来确认转移警报
contractDateDefaultValue = 1;
返回false;
}
更新01042015(不是aprils傻瓜笑话)
< td height =28px>< input name =ctl00 $ PlaceHolderMain $ TestControl1 $ CertificateSearchControl $ CertificateBundleReport $ ctl05 $ ctl03 $ ctl00type =textmaxlength =255size =10id =ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl03_ctl00disabled =disabledtitle =Find Textstyle =font-family:Verdana; font-size:8pt; />< / td>< td width =4px>< / td>< td height =28px>< a id =ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl03_ctl01title =Findhref = style =font-family:Verdana; font-size:8pt; color:Gray; text-decoration:none; white-space:nowrap;> Find< / a>< / td>< td width = 4px>< / td>< td height =28px>< span style =font-family:Verdana; font-size:8pt;> |< / span>< / td>< td width =4px>< / td>< td height =28px>< a id =ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl03_ctl03title =Find Nexthref =#style =font - 家庭:宋体;字体大小:8磅;颜色:灰色;文字修饰:无;空白:NOWRAP;>接着< / A>< / TD>
< / tr>
< / table>
< / div>< table cellpadding =0cellspacing =0ToolbarSpacer =truestyle =display:inline-block; width:20px;>
< tr>
< td>< / td>
< / tr>
< / table>< div class =style =display:inline-block; font-family:Verdana; font-size:8pt; vertical-align:top;>
< table cellpadding =0cellspacing =0style =display:inline;>
< tr>
< td height =28px>< div id =ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl04_ctl00style =font-family:Verdana; font-size:8pt; border:1px transparent Solid;>
< table id =ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl04_ctl00_Buttontitle =Exportborder =0>
< tr>
< td>< a id =ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl04_ctl00_ButtonLinktitle =Exportalt =Exporthref =javascript:void(0)style =text-decoration:none;>< img id =ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl04_ctl00_ButtonImgsrc =/ Reserved.ReportViewerWebControl.axd?OpType =资源与版本= 11.0.3010.3& amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp;风格=边框样式:无;高度:16px的;宽度:16px的;边界宽度:0像素; />< span style =width:5px; text-decoration:none;> < / span>< img id =ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl04_ctl00_ButtonImgDownsrc =/ Reserved.ReportViewerWebControl.axd?OpType =资源与版本= 11.0.3010.3& amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; gifalt =Exportstyle =border-style:None; height:6px; width:7px; border-width:0px; margin-bottom:5px; />< / A>< / TD>
< / tr>
< / table>
< / div>< div id =ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl04_ctl00_Menustyle =background-color:#ECE9D8; border:1px#336699 Solid; display:none; position:absolute; padding:1px; z-index: 1;>
< div style =border:1px transparent Solid;>
< a title =Excelalt =Excelonclick =$ find('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport')。exportReport('EXCELOPENXML'); href =javascript:void(0)style =color:#3366CC; font-family:Verdana; font-size:8pt; padding:3px 8px 3px 8px; display:block; white-space:nowrap; text-decoration :无;> Excel的< / A>
< / div>< div style =border:1px transparent Solid;>
< a title =PDFalt =PDFonclick =$ find('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport')。exportReport('PDF'); href =javascript:void(0)style =color:#3366CC; font-family:Verdana; font-size:8pt; padding:3px 8px 3px 8px; display:block; white-space:nowrap; text-decoration :无;> PDF< / A>
< / div>< div style =border:1px transparent Solid;>
< a title =Wordalt =Wordonclick =$ find('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport')。exportReport('WORDOPENXML'); href =javascript:void(0)style =color:#3366CC; font-family:Verdana; font-size:8pt; padding:3px 8px 3px 8px; display:block; white-space:nowrap; text-decoration :无;> Word和LT; / A>
< / div>
< / div>< / td>
< / tr>
< / table>
我与ID 交互ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl04_ctl00_Button
要让菜单下拉,但选择导出到PDF或导出到Excel对我有一点挑战。
你可以尝试这样的事情:
Dim el,f
设置HTMLDoc = ie.document
设置el = HTMLDoc.getElementById(ctl00_PlaceHolderMain_TestControl1_& _
CertificateSearchControl_cmdTransfer)
f = el.onclick
f =替换(f,return confirmOnTransfer();,)
el.onclick = f
el.click
第2部分(4/1/2015):
Dim el2
'获取包含菜单选项的
设置el2 = HTMLDoc.getElementById(_
ctl00_PlaceHolderMain_TestControl1_Certificate& _
SearchControl_CertificateBundleReport_ctl05_ctl04_ctl00_Menu)
'单击该div
el2中包含的链接之一。 getElementsByTagName(a)(1)
I have automated my Internet Explorer to fill out a lot of information throughout the webform. When my VBA script clicks the transfer htmlelement it runs the Javascript which opens a new msgbox where I need to click "ok" or "Cancel". I want my script to click "ok" to this. This stops code untill any further action is made to the popup window created by the javascript, hence Sendkeys will not work. The below element is from the HTML of the webpage which i am trying to interact with:
<input type="image" name="ctl00$PlaceHolderMain$TestControl$
CertificateSearchControl$cmdTransfer"
id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_cmdTransfer"
class="kantele-small-icon" src="../../_layouts/Images/Empty.gif"
alt="Transfer"
onclick="return confirmOnTransfer();WebForm_DoPostBackWithOptions(new
WebForm_PostBackOptions("ctl00$PlaceHolderMain$TestControl1
$CertificateSearchControl$cmdTransfer", "", true,
"Transfer", "", false, false))"
style="border-width:0px;" />
I use the following command to call the Transfer button:
Set HTMLDoc = ie.document
HTMLDoc.all.Item("ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_cmdTransfer").Click
Can anyone help me find a solution to this issue?
A similar question has been answered in another post, but I cant seem to get the solution to work in my script.
Handle Pop-Up While Navigating with IE
All help will be greately appriciated.
Update 08032015:
function confirmOnTransfer() {
if (typeof (Page_ClientValidate) == "function" && Page_ClientValidate()) {
var volume = document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_txtCertificateCount').value.trim();
var oDDL = document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_ddlTransferDomain');
var oDDL2 = document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_ddlTransferActor');
var oDDL3 = document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_ddlTransferAccount');
var checkbox = document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_chkAcc');
var selectedVolume = document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_hdnFinalVolume').value.trim();
//Issue 3982: 1496 - Error: Agreement date is after transaction date
var contractDateDefaultValue = 0;
if (document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_txtContractDate') != null) {
var currentDate = new Date();
var currmonth;
var currDate;
// in java script the month is saved to array in array starts to zero so the if getmonth() means we canot retrieve current month so we should add +1
var currmonth = currentDate.getMonth() + 1;
//In our application the date should be "2013-06-20" so here the month or date length is less than two means we should add '0' to bfore the date or month
if (currmonth.toString().length < 2)
currmonth = '0' + currmonth;
var currDate = currentDate.getDate();
if (currentDate.getDate().toString().length < 2)
currDate = '0' + currDate;
var currentDateText = currentDate.getFullYear() + '-' + currmonth + '-' + currDate;
var currentDateArr = currentDateText.toString().split('-');
var ContactDateArr = document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_txtContractDate').value.toString().split('-');
if (ContactDateArr[0] > currentDateArr[0]
|| (ContactDateArr[0] == currentDateArr[0] && currentDateArr[1] == ContactDateArr[1] && currentDateArr[2] < ContactDateArr[2])
|| (ContactDateArr[0] == currentDateArr[0] && currentDateArr[1] < ContactDateArr[1])) {
alert(document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_hdnContractDateValidation').value)
//if the alert received means we should assign this value based on this value we control to next condition to confirmation of transfer alert
contractDateDefaultValue = 1;
return false;
}
Update 01042015 (NOT an aprils fools joke)
<td height="28px"><input name="ctl00$PlaceHolderMain$TestControl1$CertificateSearchControl$CertificateBundleReport$ctl05$ctl03$ctl00" type="text" maxlength="255" size="10" id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl03_ctl00" disabled="disabled" title="Find Text" style="font-family:Verdana;font-size:8pt;" /></td><td width="4px"></td><td height="28px"><a id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl03_ctl01" title="Find" href="#" style="font-family:Verdana;font-size:8pt;color:Gray;text-decoration:none;white-space:nowrap;">Find</a></td><td width="4px"></td><td height="28px"><span style="font-family:Verdana;font-size:8pt;">|</span></td><td width="4px"></td><td height="28px"><a id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl03_ctl03" title="Find Next" href="#" style="font-family:Verdana;font-size:8pt;color:Gray;text-decoration:none;white-space:nowrap;">Next</a></td>
</tr>
</table>
</div><table cellpadding="0" cellspacing="0" ToolbarSpacer="true" style="display:inline-block;width:20px;">
<tr>
<td></td>
</tr>
</table><div class=" " style="display:inline-block;font-family:Verdana;font-size:8pt;vertical-align:top;">
<table cellpadding="0" cellspacing="0" style="display:inline;">
<tr>
<td height="28px"><div id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl04_ctl00" style="font-family:Verdana;font-size:8pt;border:1px transparent Solid;">
<table id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl04_ctl00_Button" title="Export" border="0">
<tr>
<td><a id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl04_ctl00_ButtonLink" title="Export" alt="Export" href="javascript:void(0)" style="text-decoration:none;"><img id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl04_ctl00_ButtonImg" src="/Reserved.ReportViewerWebControl.axd?OpType=Resource&Version=11.0.3010.3&Name=Microsoft.Reporting.WebForms.Icons.ExportDisabled.gif" alt="Export" style="border-style:None;height:16px;width:16px;border-width:0px;" /><span style="width:5px;text-decoration:none;"> </span><img id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl04_ctl00_ButtonImgDown" src="/Reserved.ReportViewerWebControl.axd?OpType=Resource&Version=11.0.3010.3&Name=Microsoft.Reporting.WebForms.Icons.ArrowDownDisabled.gif" alt="Export" style="border-style:None;height:6px;width:7px;border-width:0px;margin-bottom:5px;" /></a></td>
</tr>
</table>
</div><div id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl04_ctl00_Menu" style="background-color:#ECE9D8;border:1px #336699 Solid;display:none;position:absolute;padding:1px;z-index:1;">
<div style="border:1px transparent Solid;">
<a title="Excel" alt="Excel" onclick="$find('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport').exportReport('EXCELOPENXML');" href="javascript:void(0)" style="color:#3366CC;font-family:Verdana;font-size:8pt;padding:3px 8px 3px 8px;display:block;white-space:nowrap;text-decoration:none;">Excel</a>
</div><div style="border:1px transparent Solid;">
<a title="PDF" alt="PDF" onclick="$find('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport').exportReport('PDF');" href="javascript:void(0)" style="color:#3366CC;font-family:Verdana;font-size:8pt;padding:3px 8px 3px 8px;display:block;white-space:nowrap;text-decoration:none;">PDF</a>
</div><div style="border:1px transparent Solid;">
<a title="Word" alt="Word" onclick="$find('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport').exportReport('WORDOPENXML');" href="javascript:void(0)" style="color:#3366CC;font-family:Verdana;font-size:8pt;padding:3px 8px 3px 8px;display:block;white-space:nowrap;text-decoration:none;">Word</a>
</div>
</div></td>
</tr>
</table>
I interact with the ID "ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl04_ctl00_Button"
to get the menu to drop down, but selecting either "Export to PDF" or "Export to Excel" are challenging me a bit. Any suggestion to solves this would be greately appreciated.
You can try something like this:
Dim el, f
Set HTMLDoc = ie.document
Set el =HTMLDoc.getElementById("ctl00_PlaceHolderMain_TestControl1_" & _
"CertificateSearchControl_cmdTransfer")
f = el.onclick
f = Replace(f, "return confirmOnTransfer();", "")
el.onclick = f
el.click
Part 2 (4/1/2015):
Dim el2
'get the div containing the menu options
Set el2 = HTMLDoc.getElementById( _
"ctl00_PlaceHolderMain_TestControl1_Certificate" & _
"SearchControl_CertificateBundleReport_ctl05_ctl04_ctl00_Menu")
'click one of the contained links in that div
el2.getElementsByTagName("a")(1)
这篇关于VBA - 处理Javascript弹出IE自动化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!