如何使用 VBA 自动浏览网页?
How do I use VBA to automate navigation through a webpage?
我已经成功地导航到网页并登录,但我无法识别正确的元素以跟随可点击的链接。我最终想导航到网站上的特定位置并使用 excel 将 excel 文件中的数据自动输入到网页上的输入框中。
我最初只是尝试直接打开所需的页面,但系统提示用户登录,最终打开到默认主页。我试图确定 HTML 页面元素以遵循可点击路径,但我不确定我需要多具体或我需要定义多高的层次结构。我尝试了以下方法:
这是我目前拥有的代码:
Sub Test()
Dim IE As Object
Dim doc As HTMLDocument
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.Navigate "https://iuctsi-oncore-prod.forteresearchapps.com/smrs/AdhocReportControlServlet"
Do While IE.Busy Or IE.ReadyState <> 4
DoEvents
Loop
Set doc = IE.Document
doc.getElementById("username").Value = "Username"
doc.getElementById("submitbtn").Click
doc.getElementById("password").Value = "Password"
doc.getElementById("submitbtn").Click
Set ul = IE.Document.getElementsByTagName("ul")
If li.class = "ui-sortable-handle" And role = "presentation" Then
Set link = IE.Document.getElementsByTagName("a")
For Each li In link
If li.className = "top-level-menu-link" And li.href = "https://iuctsi-oncore-prod.forteresearchapps.com/smrs/AdhocReportControlServlet?hdn_function=SPECIMEN_SEARCH&hdn_function_type=REPORT_SEARCH" Then
link.Click
Exit For
End If
Next
End If
End Sub
我认为只定义classname "top-level-menu-link"和href就足够了,但还有ul id="nav", li class ="nav iu-sortable" 和角色 ="Presentation" 上面的元素。我显然对这些东西没有经验,但我正在努力学习从不间断的单调数据输入中拯救我的理智。
<a class="brand" href="/smrs/SMRSHomePageServlet?hdn_function=WELCOME">
<img src="/smrs/images/menu/menu_logo.png?v=20190523144203">
</a>
<script type="application/json" id="app-menu-items">
{ & #34;data&# 34;: { & #34;key&# 34;: & #34;ROOT&# 34;,
&
#34;label&# 34;: & #34;Menu&# 34;,
&
#34;url&# 34;: null,
&
#34;active&# 34;: false,
&
#34;external&# 34;: false
}, & #34;children&# 34;: [{ & #34;data&# 34;: { & #34;key&# 34;: & #34;MY_CONSOLE_ITEM&# 34;,
&
#34;label&# 34;: & #34;My Console&# 34;,
&
#34;url&# 34;: & #34;/smrs/MyConsoleControlServlet&# 34;,
&
#34;active&# 34;: false,
&
#34;external&# 34;: false
},
&
#34;children&# 34;: []
}, { & #34;data&# 34;: { & #34;key&# 34;: & #34;PROTOCOLS_GROUP&# 34;,
&
#34;label&# 34;: & #34;Protocols&# 34;,
&
#34;url&# 34;: null,
&
#34;active&# 34;: false,
&
#34;external&# 34;: false
},
&
#34;children&# 34;: [{ & #34;data&# 34;: { & #34;key&# 34;: & #34;DOCUMENT_SEARCH_ITEM&# 34;,
&
#34;label&# 34;: & #34;Document Search&# 34;,
&
#34;url&# 34;: & #34;/smrs/SMRSControlServlet?hdn_function= DOCUMENT_SEARCH & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;PC_CONSOLE_ITEM & #34;,&# 34;label & #34;:&# 34;PC Console & #34;,&# 34;url & #34;:&# 34;
/smrs/SMRSControlServlet ? hdn_function = PROTOCOL_INQUIRY & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;PROTOCOL_SEARCH_ITEM & #34;,&# 34;label & #34;:&# 34;Protocol Search & #34;,&# 34;url & #34;:&# 34;
/smrs/SMRSControlServlet ? hdn_function = PROTOCOL_SEARCH & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;PROTOCOL_SEARCH_LAST_RESULTS & #34;,&# 34;label & #34;:&# 34;Protocol Search - Last Results & #34;,&# 34;url & #34;:&# 34;
/smrs/PRBrowseServlet ? hdn_function = PROTOCOL_SEARCH_LAST_RESULTS & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]}]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;REPORTS_GROUP & #34;,&# 34;label & #34;:&# 34;Reports & #34;,&# 34;url & #34;:null,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[{&# 34;data & #34;:{&# 34;key & #34;:&# 34;REPORTS_ITEM & #34;,&# 34;label & #34;:&# 34;Reports & #34;,&# 34;url & #34;:&# 34;
/smrs/SMRSControlServlet ? hdn_function = PL_REPORTS_MAINTAIN & amp;hdn_PRIVILEGE_ID,
FUNCTION_GROUP_type = REPORTS & amp;on_success = /plinks/jsp / pl_report_browse.jsp & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]}]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;SPECIMENS_GROUP & #34;,&# 34;label & #34;:&# 34;Specimens & #34;,&# 34;url & #34;:null,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[{&# 34;data & #34;:{&# 34;key & #34;:&# 34;BSM_DASHBOARD_ITEM & #34;,&# 34;label & #34;:&# 34;BSM Dashboard & #34;,&# 34;url & #34;:&# 34;
/smrs/BSMSReportsControlServlet ? hdn_function = BSM_DASHBOARD & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;SPECIMEN_BULK_MOVE_ITEM & #34;,&# 34;label & #34;:&# 34;Specimen Bulk Move & #34;,&# 34;url & #34;:&# 34;
/smrs/BSMSSpecimenCollectionControlServlet ? hdn_function = BULK_MOVE & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;SPECIMEN_COLLECTION_CONSOLE_ITEM & #34;,&# 34;label & #34;:&# 34;Specimen Collection Console & #34;,&# 34;url & #34;:&# 34;
/smrs/BSMSSpecimenCollectionControlServlet ? hdn_function = SPECIMEN_COLLECTION & amp;hdn_function_type = INQUIRY & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;SPECIMEN_CUSTOM_REPORT_ITEM & #34;,&# 34;label & #34;:&# 34;Specimen Custom Report & #34;,&# 34;url & #34;:&# 34;
/smrs/AdhocReportControlServlet ? hdn_function = SPECIMEN_SEARCH & amp;hdn_function_type = REPORT_SEARCH & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;SPECIMEN_DATA_ENTRY_ITEM & #34;,&# 34;label & #34;:&# 34;Specimen Data Entry & #34;,&# 34;url & #34;:&# 34;
/smrs/BSMSpecimenEntryControlServlet ? hdn_function = SPECIMEN_COLLECTION & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;SPECIMEN_IMPORT_ITEM & #34;,&# 34;label & #34;:&# 34;Specimen Import & #34;,&# 34;url & #34;:&# 34;
/smrs/BSMSpecimenUploadServlet ? hdn_function = SPECIMEN_IMPORT & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;SPECIMEN_REQUEST_CONSOLE_ITEM & #34;,&# 34;label & #34;:&# 34;Specimen Request Console & #34;,&# 34;url & #34;:&# 34;
/smrs/BSMSpecimenRequestControlServlet ? hdn_function = REQUEST_LIST & amp;default_list = Y & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;STORAGE_BROWSE_ITEM & #34;,&# 34;label & #34;:&# 34;Storage Browse & #34;,&# 34;url & #34;:&# 34;
/smrs/bsmStorage / browse /
default.do & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;WORKING_LISTS_ITEM & #34;,&# 34;label & #34;:&# 34;Working Lists & #34;,&# 34;url & #34;:&# 34;
/smrs/BSMSSpecimenCollectionControlServlet ? hdn_function = WORKING_LISTS & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]}]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;SUBJECTS_GROUP & #34;,&# 34;label & #34;:&# 34;Subjects & #34;,&# 34;url & #34;:null,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[{&# 34;data & #34;:{&# 34;key & #34;:&# 34;CRA_CONSOLE_ITEM & #34;,&# 34;label & #34;:&# 34;CRA Console & #34;,&# 34;url & #34;:&# 34;
/smrs/SMRSControlServlet ? hdn_function = CRA_CONSOLE & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;SUBJECT_CONSOLE_ITEM & #34;,&# 34;label & #34;:&# 34;Subject Console & #34;,&# 34;url & #34;:&# 34;
/smrs/SMRSControlServlet ? hdn_function = SUBJECT_CONSOLE & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;SUBJECT_SEARCH_ITEM & #34;,&# 34;label & #34;:&# 34;Subject Search & #34;,&# 34;url & #34;:&# 34;
/smrs/SMRSControlServlet ? hdn_function = SUBJECT_INQUIRY & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;SUBJECT_SEARCH_LAST_RESULTS & #34;,&# 34;label & #34;:&# 34;Subject Search - Last Results & #34;,&# 34;url & #34;:&# 34;
/smrs/SubjectBrowseServlet ? hdn_function = SUBJECT_SEARCH_LAST_RESULTS & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]}]}]}
</script>
<script type="application/json" id="user-favorite-keys">
[ & #34;BSM_DASHBOARD_ITEM&# 34;, & #34;WORKING_LISTS_ITEM&# 34;, & #34;STORAGE_BROWSE_ITEM&# 34;, & #34;SPECIMEN_CUSTOM_REPORT_ITEM&# 34;, & #34;SPECIMEN_COLLECTION_CONSOLE_ITEM&# 34;, & #34;SPECIMEN_IMPORT_ITEM&# 34;]
</script>
<ul class="nav" id="nav">
<li class="dropdown star-menu"><a href="#" class="main-menu-link dropdown-toggle" data-toggle="main-menu">Menu <i class="icon-menu-hamburger"></i></a>
<ul class="dropdown-menu" role="main-menu">
<li role="presentation" class="">
<a href="/smrs/MyConsoleControlServlet">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">My Console</span></a>
</li>
<li class="dropdown-submenu">
<a href="#">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">Protocols</span></a>
<ul class="dropdown-menu" role="main-menu" style="top: -6px; left: 99px;">
<li role="presentation" class="">
<a href="/smrs/SMRSControlServlet?hdn_function=DOCUMENT_SEARCH">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">Document Search</span></a>
</li>
<li role="presentation" class="">
<a href="/smrs/SMRSControlServlet?hdn_function=PROTOCOL_INQUIRY">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">PC Console</span></a>
</li>
<li role="presentation" class="">
<a href="/smrs/SMRSControlServlet?hdn_function=PROTOCOL_SEARCH">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">Protocol Search</span></a>
</li>
<li role="presentation" class="">
<a href="/smrs/PRBrowseServlet?hdn_function=PROTOCOL_SEARCH_LAST_RESULTS">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">Protocol Search - Last Results</span></a>
</li>
</ul>
</li>
<li class="dropdown-submenu">
<a href="#">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">Reports</span></a>
<ul class="dropdown-menu" role="main-menu" style="top: -6px; left: 99px;">
<li role="presentation" class="">
<a href="/smrs/SMRSControlServlet?hdn_function=PL_REPORTS_MAINTAIN&hdn_PRIVILEGE_ID,
FUNCTION_GROUP_type=REPORTS&on_success=/plinks/jsp/pl_report_browse.jsp">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">Reports</span></a>
</li>
</ul>
</li>
<li class="dropdown-submenu">
<a href="#">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">Specimens</span></a>
<ul class="dropdown-menu" role="main-menu" style="top: -6px; left: 99px;">
<li role="presentation" class="">
<a href="/smrs/BSMSReportsControlServlet?hdn_function=BSM_DASHBOARD">
<div class="menu-icon-wrapper"><i class="icon-star"></i></div><span class="link-text">BSM Dashboard</span></a>
</li>
<li role="presentation" class="">
<a href="/smrs/BSMSSpecimenCollectionControlServlet?hdn_function=BULK_MOVE">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">Specimen Bulk Move</span></a>
</li>
<li role="presentation" class="">
<a href="/smrs/BSMSSpecimenCollectionControlServlet?hdn_function=SPECIMEN_COLLECTION&hdn_function_type=INQUIRY">
<div class="menu-icon-wrapper"><i class="icon-star"></i></div><span class="link-text">Specimen Collection Console</span></a>
</li>
<li role="presentation" class="">
<a href="/smrs/AdhocReportControlServlet?hdn_function=SPECIMEN_SEARCH&hdn_function_type=REPORT_SEARCH">
<div class="menu-icon-wrapper"><i class="icon-star"></i></div><span class="link-text">Specimen Custom Report</span></a>
</li>
<li role="presentation" class="">
<a href="/smrs/BSMSpecimenEntryControlServlet?hdn_function=SPECIMEN_COLLECTION">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">Specimen Data Entry</span></a>
</li>
<li role="presentation" class="">
<a href="/smrs/BSMSpecimenUploadServlet?hdn_function=SPECIMEN_IMPORT">
<div class="menu-icon-wrapper"><i class="icon-star"></i></div><span class="link-text">Specimen Import</span></a>
</li>
<li role="presentation" class="">
<a href="/smrs/BSMSpecimenRequestControlServlet?hdn_function=REQUEST_LIST&default_list=Y">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">Specimen Request Console</span></a>
</li>
<li role="presentation" class="">
<a href="/smrs/bsmStorage/browse/default.do">
<div class="menu-icon-wrapper"><i class="icon-star"></i></div><span class="link-text">Storage Browse</span></a>
</li>
<li role="presentation" class="">
<a href="/smrs/BSMSSpecimenCollectionControlServlet?hdn_function=WORKING_LISTS">
<div class="menu-icon-wrapper"><i class="icon-star"></i></div><span class="link-text">Working Lists</span></a>
</li>
</ul>
</li>
<li class="dropdown-submenu">
<a href="#">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">Subjects</span></a>
<ul class="dropdown-menu" role="main-menu" style="top: -6px; left: 99px;">
<li role="presentation" class="">
<a href="/smrs/SMRSControlServlet?hdn_function=CRA_CONSOLE">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">CRA Console</span></a>
</li>
<li role="presentation" class="">
<a href="/smrs/SMRSControlServlet?hdn_function=SUBJECT_CONSOLE">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">Subject Console</span></a>
</li>
<li role="presentation" class="">
<a href="/smrs/SMRSControlServlet?hdn_function=SUBJECT_INQUIRY">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">Subject Search</span></a>
</li>
<li role="presentation" class="">
<a href="/smrs/SubjectBrowseServlet?hdn_function=SUBJECT_SEARCH_LAST_RESULTS">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">Subject Search - Last Results</span></a>
</li>
</ul>
</li>
</ul>
</li>
<ul class="nav ui-sortable">
<li role="presentation" class="ui-sortable-handle"><a class="top-level-menu-link" href="/smrs/BSMSReportsControlServlet?hdn_function=BSM_DASHBOARD">BSM Dashboard</a></li>
<li role="presentation" class="ui-sortable-handle"><a class="top-level-menu-link" href="/smrs/BSMSSpecimenCollectionControlServlet?hdn_function=WORKING_LISTS">Working Lists</a></li>
<li role="presentation" class="ui-sortable-handle"><a class="top-level-menu-link" href="/smrs/bsmStorage/browse/default.do">Storage Browse</a></li>
``` ***Target destination is this line****
<li role="presentation" class="ui-sortable-handle"><a class="top-level-menu-link" href="/smrs/AdhocReportControlServlet?hdn_function=SPECIMEN_SEARCH&hdn_function_type=REPORT_SEARCH">Specimen Custom Report</a></li>
```
<li role="presentation" class="ui-sortable-handle"><a class="top-level-menu-link" href="/smrs/BSMSSpecimenCollectionControlServlet?hdn_function=SPECIMEN_COLLECTION&hdn_function_type=INQUIRY">Specimen Collection Console</a></li>
<li role="presentation" class="ui-sortable-handle"><a class="top-level-menu-link" href="/smrs/BSMSpecimenUploadServlet?hdn_function=SPECIMEN_IMPORT">Specimen Import</a></li>
</ul>
</ul>
HTML
我已根据以下评论者推荐的以下更改修改了我的代码:
Sub Test()
Dim IE As Object
Dim doc As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.navigate "https://iuctsi-oncore-prod.forteresearchapps.com/smrs/AdhocReportControlServlet"
Call ReadyWaitingLoop(IE)
Set doc = IE.document
Dim userEle As Object, pwEle As Object, submitBtn As Object, frm As Object
Set frm = doc.getElementsByClassName("login-form")(0)
Set userEle = doc.getElementById("username")
userEle.Value = "username" ' ## MODIFY to use a real username
Set submitBtn = doc.getElementById("submitBtn")
frm.submit ' or submitBtn.Click -- not sure which is needed, both seem to work as tested
Call ReadyWaitingLoop(IE)
Set pwEle = doc.getElementById("password")
Set submitBtn = doc.getElementById("submitBtn") '## maybe case-sensitive
pwEle.Value = "password" ' ## MODIFY to use a real password
submitBtn.Click '-- not sure which is needed, both seem to work as tested frm.submit ' or
Call ReadyWaitingLoop(IE)
While IE.Busy Or IE.readyState <> 4: DoEvents: Wend
IE.document.querySelector("[href$=REPORT_SEARCH]").Click
While IE.Busy Or IE.readyState <> 4: DoEvents: Wend
While IE.Busy Or IE.readyState <> 4: DoEvents: Wend
IE.document.querySelector("[href$=CustomReportGroup_Mine_IUGBQCChecks").Click '----This reference does not seem to work. The original element is:<a id="groupHead_3" href="javascript:showhide(3,'CustomReportGroup_Mine_IUGBQCChecks' );">[-]</a>
While IE.Busy Or IE.readyState <> 4: DoEvents: Wend
While IE.Busy Or IE.readyState <> 4: DoEvents: Wend
IE.document.querySelector("[href$=Copy of Hemoglobin QC_CO").Click
While IE.Busy Or IE.readyState <> 4: DoEvents: Wend
' Rest of your code...
End Sub
Sub ReadyWaitingLoop(IE As Object)
Do While IE.Busy Or IE.readyState <> 4
DoEvents
Loop
End Sub
我观察到的几件事:
- 提交按钮包含在表单元素中,我认为您可能需要
.Submit()
表单而不是 Click
按钮。不过,当我测试它时,两者似乎都有效。见 HTML:
<form name="loginform" method="post" autocomplete="off" class="login-form">
<div class="login-form-inner">
<div class="field-wrapper">
<label for="username">Username</label>
<input type="text" name="username" id="username" autocomplete="off" value="asdfadf" maxlength="255" class="input-block-level" autofocus="">
<p class="text-error"></p>
</div>
<p>
<input class="btn btn-login btn-large" id="submitBtn" name="submitBtn" value="Next" type="submit">
</p>
</div>
</form>
- 您可能想将对象变量分配给用户名和密码元素
- 您可能需要在每个 click/submit 之后使用 ready/waiting 循环。
li
项使用相对路径,因此与其比较完整的 URL,您的逻辑应该也使用相对路径:
If li.className = "top-level-menu-link" And li.href = "/smrs/AdhocReportControlServlet?hdn_function=SPECIMEN_SEARCH&hdn_function_type=REPORT_SEARCH"
因为我无法通过用户名(当然我没有有效的用户名),这是我能做的最好的事情:
Sub Test()
Dim IE As Object
Dim doc As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.Navigate "https://iuctsi-oncore-prod.forteresearchapps.com/smrs/AdhocReportControlServlet"
Call ReadyWaitingLoop(IE)
Set doc = IE.Document
Dim userEle As Object, pwEle As Object, submitBtn As Object, frm As Object
Set frm = doc.getElementsByClassName("login-form")(0)
Set userEle = doc.GetElementById("username")
userEle.Value = "Username" ' ## MODIFY to use a real username
Set submitBtn = doc.GetElementById("submitBtn")
frm.Submit ' or submitBtn.Click -- not sure which is needed, both seem to work as tested
Call ReadyWaitingLoop(IE)
Set pwEle = doc.GetElementById("password")
Set submitBtn = doc.GetElementById("submitBtn") '## maybe case-sensitive
pwEle.Value = "Password" ' ## MODIFY to use a real password
frm.Submit ' or submitBtn.Click -- not sure which is needed, both seem to work as tested
Call ReadyWaitingLoop(IE)
' Rest of your code...
End Sub
Sub ReadyWaitingLoop(IE As Object)
Do While IE.Busy Or IE.ReadyState <> 4
DoEvents
Loop
End Sub
在确保正确的页面加载后尝试关闭 IE.document 等待之前的点击然后避免循环并使用 css attribute = value selector
doc.getElementById("submitBtn").Click
While ie.Busy Or ie.ReadyState<>4:DoEvents:Wend
ie.document.querySelector("[href$=REPORT_SEARCH]").click
While ie.Busy Or ie.ReadyState<>4:DoEvents:Wend
我已经成功地导航到网页并登录,但我无法识别正确的元素以跟随可点击的链接。我最终想导航到网站上的特定位置并使用 excel 将 excel 文件中的数据自动输入到网页上的输入框中。
我最初只是尝试直接打开所需的页面,但系统提示用户登录,最终打开到默认主页。我试图确定 HTML 页面元素以遵循可点击路径,但我不确定我需要多具体或我需要定义多高的层次结构。我尝试了以下方法:
这是我目前拥有的代码:
Sub Test()
Dim IE As Object
Dim doc As HTMLDocument
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.Navigate "https://iuctsi-oncore-prod.forteresearchapps.com/smrs/AdhocReportControlServlet"
Do While IE.Busy Or IE.ReadyState <> 4
DoEvents
Loop
Set doc = IE.Document
doc.getElementById("username").Value = "Username"
doc.getElementById("submitbtn").Click
doc.getElementById("password").Value = "Password"
doc.getElementById("submitbtn").Click
Set ul = IE.Document.getElementsByTagName("ul")
If li.class = "ui-sortable-handle" And role = "presentation" Then
Set link = IE.Document.getElementsByTagName("a")
For Each li In link
If li.className = "top-level-menu-link" And li.href = "https://iuctsi-oncore-prod.forteresearchapps.com/smrs/AdhocReportControlServlet?hdn_function=SPECIMEN_SEARCH&hdn_function_type=REPORT_SEARCH" Then
link.Click
Exit For
End If
Next
End If
End Sub
我认为只定义classname "top-level-menu-link"和href就足够了,但还有ul id="nav", li class ="nav iu-sortable" 和角色 ="Presentation" 上面的元素。我显然对这些东西没有经验,但我正在努力学习从不间断的单调数据输入中拯救我的理智。
<a class="brand" href="/smrs/SMRSHomePageServlet?hdn_function=WELCOME">
<img src="/smrs/images/menu/menu_logo.png?v=20190523144203">
</a>
<script type="application/json" id="app-menu-items">
{ & #34;data&# 34;: { & #34;key&# 34;: & #34;ROOT&# 34;,
&
#34;label&# 34;: & #34;Menu&# 34;,
&
#34;url&# 34;: null,
&
#34;active&# 34;: false,
&
#34;external&# 34;: false
}, & #34;children&# 34;: [{ & #34;data&# 34;: { & #34;key&# 34;: & #34;MY_CONSOLE_ITEM&# 34;,
&
#34;label&# 34;: & #34;My Console&# 34;,
&
#34;url&# 34;: & #34;/smrs/MyConsoleControlServlet&# 34;,
&
#34;active&# 34;: false,
&
#34;external&# 34;: false
},
&
#34;children&# 34;: []
}, { & #34;data&# 34;: { & #34;key&# 34;: & #34;PROTOCOLS_GROUP&# 34;,
&
#34;label&# 34;: & #34;Protocols&# 34;,
&
#34;url&# 34;: null,
&
#34;active&# 34;: false,
&
#34;external&# 34;: false
},
&
#34;children&# 34;: [{ & #34;data&# 34;: { & #34;key&# 34;: & #34;DOCUMENT_SEARCH_ITEM&# 34;,
&
#34;label&# 34;: & #34;Document Search&# 34;,
&
#34;url&# 34;: & #34;/smrs/SMRSControlServlet?hdn_function= DOCUMENT_SEARCH & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;PC_CONSOLE_ITEM & #34;,&# 34;label & #34;:&# 34;PC Console & #34;,&# 34;url & #34;:&# 34;
/smrs/SMRSControlServlet ? hdn_function = PROTOCOL_INQUIRY & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;PROTOCOL_SEARCH_ITEM & #34;,&# 34;label & #34;:&# 34;Protocol Search & #34;,&# 34;url & #34;:&# 34;
/smrs/SMRSControlServlet ? hdn_function = PROTOCOL_SEARCH & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;PROTOCOL_SEARCH_LAST_RESULTS & #34;,&# 34;label & #34;:&# 34;Protocol Search - Last Results & #34;,&# 34;url & #34;:&# 34;
/smrs/PRBrowseServlet ? hdn_function = PROTOCOL_SEARCH_LAST_RESULTS & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]}]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;REPORTS_GROUP & #34;,&# 34;label & #34;:&# 34;Reports & #34;,&# 34;url & #34;:null,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[{&# 34;data & #34;:{&# 34;key & #34;:&# 34;REPORTS_ITEM & #34;,&# 34;label & #34;:&# 34;Reports & #34;,&# 34;url & #34;:&# 34;
/smrs/SMRSControlServlet ? hdn_function = PL_REPORTS_MAINTAIN & amp;hdn_PRIVILEGE_ID,
FUNCTION_GROUP_type = REPORTS & amp;on_success = /plinks/jsp / pl_report_browse.jsp & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]}]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;SPECIMENS_GROUP & #34;,&# 34;label & #34;:&# 34;Specimens & #34;,&# 34;url & #34;:null,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[{&# 34;data & #34;:{&# 34;key & #34;:&# 34;BSM_DASHBOARD_ITEM & #34;,&# 34;label & #34;:&# 34;BSM Dashboard & #34;,&# 34;url & #34;:&# 34;
/smrs/BSMSReportsControlServlet ? hdn_function = BSM_DASHBOARD & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;SPECIMEN_BULK_MOVE_ITEM & #34;,&# 34;label & #34;:&# 34;Specimen Bulk Move & #34;,&# 34;url & #34;:&# 34;
/smrs/BSMSSpecimenCollectionControlServlet ? hdn_function = BULK_MOVE & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;SPECIMEN_COLLECTION_CONSOLE_ITEM & #34;,&# 34;label & #34;:&# 34;Specimen Collection Console & #34;,&# 34;url & #34;:&# 34;
/smrs/BSMSSpecimenCollectionControlServlet ? hdn_function = SPECIMEN_COLLECTION & amp;hdn_function_type = INQUIRY & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;SPECIMEN_CUSTOM_REPORT_ITEM & #34;,&# 34;label & #34;:&# 34;Specimen Custom Report & #34;,&# 34;url & #34;:&# 34;
/smrs/AdhocReportControlServlet ? hdn_function = SPECIMEN_SEARCH & amp;hdn_function_type = REPORT_SEARCH & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;SPECIMEN_DATA_ENTRY_ITEM & #34;,&# 34;label & #34;:&# 34;Specimen Data Entry & #34;,&# 34;url & #34;:&# 34;
/smrs/BSMSpecimenEntryControlServlet ? hdn_function = SPECIMEN_COLLECTION & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;SPECIMEN_IMPORT_ITEM & #34;,&# 34;label & #34;:&# 34;Specimen Import & #34;,&# 34;url & #34;:&# 34;
/smrs/BSMSpecimenUploadServlet ? hdn_function = SPECIMEN_IMPORT & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;SPECIMEN_REQUEST_CONSOLE_ITEM & #34;,&# 34;label & #34;:&# 34;Specimen Request Console & #34;,&# 34;url & #34;:&# 34;
/smrs/BSMSpecimenRequestControlServlet ? hdn_function = REQUEST_LIST & amp;default_list = Y & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;STORAGE_BROWSE_ITEM & #34;,&# 34;label & #34;:&# 34;Storage Browse & #34;,&# 34;url & #34;:&# 34;
/smrs/bsmStorage / browse /
default.do & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;WORKING_LISTS_ITEM & #34;,&# 34;label & #34;:&# 34;Working Lists & #34;,&# 34;url & #34;:&# 34;
/smrs/BSMSSpecimenCollectionControlServlet ? hdn_function = WORKING_LISTS & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]}]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;SUBJECTS_GROUP & #34;,&# 34;label & #34;:&# 34;Subjects & #34;,&# 34;url & #34;:null,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[{&# 34;data & #34;:{&# 34;key & #34;:&# 34;CRA_CONSOLE_ITEM & #34;,&# 34;label & #34;:&# 34;CRA Console & #34;,&# 34;url & #34;:&# 34;
/smrs/SMRSControlServlet ? hdn_function = CRA_CONSOLE & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;SUBJECT_CONSOLE_ITEM & #34;,&# 34;label & #34;:&# 34;Subject Console & #34;,&# 34;url & #34;:&# 34;
/smrs/SMRSControlServlet ? hdn_function = SUBJECT_CONSOLE & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;SUBJECT_SEARCH_ITEM & #34;,&# 34;label & #34;:&# 34;Subject Search & #34;,&# 34;url & #34;:&# 34;
/smrs/SMRSControlServlet ? hdn_function = SUBJECT_INQUIRY & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]},{&# 34;data & #34;:{&# 34;key & #34;:&# 34;SUBJECT_SEARCH_LAST_RESULTS & #34;,&# 34;label & #34;:&# 34;Subject Search - Last Results & #34;,&# 34;url & #34;:&# 34;
/smrs/SubjectBrowseServlet ? hdn_function = SUBJECT_SEARCH_LAST_RESULTS & #34;,&# 34;active & #34;:false,&# 34;external & #34;:false},&# 34;children & #34;:[]}]}]}
</script>
<script type="application/json" id="user-favorite-keys">
[ & #34;BSM_DASHBOARD_ITEM&# 34;, & #34;WORKING_LISTS_ITEM&# 34;, & #34;STORAGE_BROWSE_ITEM&# 34;, & #34;SPECIMEN_CUSTOM_REPORT_ITEM&# 34;, & #34;SPECIMEN_COLLECTION_CONSOLE_ITEM&# 34;, & #34;SPECIMEN_IMPORT_ITEM&# 34;]
</script>
<ul class="nav" id="nav">
<li class="dropdown star-menu"><a href="#" class="main-menu-link dropdown-toggle" data-toggle="main-menu">Menu <i class="icon-menu-hamburger"></i></a>
<ul class="dropdown-menu" role="main-menu">
<li role="presentation" class="">
<a href="/smrs/MyConsoleControlServlet">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">My Console</span></a>
</li>
<li class="dropdown-submenu">
<a href="#">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">Protocols</span></a>
<ul class="dropdown-menu" role="main-menu" style="top: -6px; left: 99px;">
<li role="presentation" class="">
<a href="/smrs/SMRSControlServlet?hdn_function=DOCUMENT_SEARCH">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">Document Search</span></a>
</li>
<li role="presentation" class="">
<a href="/smrs/SMRSControlServlet?hdn_function=PROTOCOL_INQUIRY">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">PC Console</span></a>
</li>
<li role="presentation" class="">
<a href="/smrs/SMRSControlServlet?hdn_function=PROTOCOL_SEARCH">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">Protocol Search</span></a>
</li>
<li role="presentation" class="">
<a href="/smrs/PRBrowseServlet?hdn_function=PROTOCOL_SEARCH_LAST_RESULTS">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">Protocol Search - Last Results</span></a>
</li>
</ul>
</li>
<li class="dropdown-submenu">
<a href="#">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">Reports</span></a>
<ul class="dropdown-menu" role="main-menu" style="top: -6px; left: 99px;">
<li role="presentation" class="">
<a href="/smrs/SMRSControlServlet?hdn_function=PL_REPORTS_MAINTAIN&hdn_PRIVILEGE_ID,
FUNCTION_GROUP_type=REPORTS&on_success=/plinks/jsp/pl_report_browse.jsp">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">Reports</span></a>
</li>
</ul>
</li>
<li class="dropdown-submenu">
<a href="#">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">Specimens</span></a>
<ul class="dropdown-menu" role="main-menu" style="top: -6px; left: 99px;">
<li role="presentation" class="">
<a href="/smrs/BSMSReportsControlServlet?hdn_function=BSM_DASHBOARD">
<div class="menu-icon-wrapper"><i class="icon-star"></i></div><span class="link-text">BSM Dashboard</span></a>
</li>
<li role="presentation" class="">
<a href="/smrs/BSMSSpecimenCollectionControlServlet?hdn_function=BULK_MOVE">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">Specimen Bulk Move</span></a>
</li>
<li role="presentation" class="">
<a href="/smrs/BSMSSpecimenCollectionControlServlet?hdn_function=SPECIMEN_COLLECTION&hdn_function_type=INQUIRY">
<div class="menu-icon-wrapper"><i class="icon-star"></i></div><span class="link-text">Specimen Collection Console</span></a>
</li>
<li role="presentation" class="">
<a href="/smrs/AdhocReportControlServlet?hdn_function=SPECIMEN_SEARCH&hdn_function_type=REPORT_SEARCH">
<div class="menu-icon-wrapper"><i class="icon-star"></i></div><span class="link-text">Specimen Custom Report</span></a>
</li>
<li role="presentation" class="">
<a href="/smrs/BSMSpecimenEntryControlServlet?hdn_function=SPECIMEN_COLLECTION">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">Specimen Data Entry</span></a>
</li>
<li role="presentation" class="">
<a href="/smrs/BSMSpecimenUploadServlet?hdn_function=SPECIMEN_IMPORT">
<div class="menu-icon-wrapper"><i class="icon-star"></i></div><span class="link-text">Specimen Import</span></a>
</li>
<li role="presentation" class="">
<a href="/smrs/BSMSpecimenRequestControlServlet?hdn_function=REQUEST_LIST&default_list=Y">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">Specimen Request Console</span></a>
</li>
<li role="presentation" class="">
<a href="/smrs/bsmStorage/browse/default.do">
<div class="menu-icon-wrapper"><i class="icon-star"></i></div><span class="link-text">Storage Browse</span></a>
</li>
<li role="presentation" class="">
<a href="/smrs/BSMSSpecimenCollectionControlServlet?hdn_function=WORKING_LISTS">
<div class="menu-icon-wrapper"><i class="icon-star"></i></div><span class="link-text">Working Lists</span></a>
</li>
</ul>
</li>
<li class="dropdown-submenu">
<a href="#">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">Subjects</span></a>
<ul class="dropdown-menu" role="main-menu" style="top: -6px; left: 99px;">
<li role="presentation" class="">
<a href="/smrs/SMRSControlServlet?hdn_function=CRA_CONSOLE">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">CRA Console</span></a>
</li>
<li role="presentation" class="">
<a href="/smrs/SMRSControlServlet?hdn_function=SUBJECT_CONSOLE">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">Subject Console</span></a>
</li>
<li role="presentation" class="">
<a href="/smrs/SMRSControlServlet?hdn_function=SUBJECT_INQUIRY">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">Subject Search</span></a>
</li>
<li role="presentation" class="">
<a href="/smrs/SubjectBrowseServlet?hdn_function=SUBJECT_SEARCH_LAST_RESULTS">
<div class="menu-icon-wrapper"><i class="icon-star-empty"></i></div><span class="link-text">Subject Search - Last Results</span></a>
</li>
</ul>
</li>
</ul>
</li>
<ul class="nav ui-sortable">
<li role="presentation" class="ui-sortable-handle"><a class="top-level-menu-link" href="/smrs/BSMSReportsControlServlet?hdn_function=BSM_DASHBOARD">BSM Dashboard</a></li>
<li role="presentation" class="ui-sortable-handle"><a class="top-level-menu-link" href="/smrs/BSMSSpecimenCollectionControlServlet?hdn_function=WORKING_LISTS">Working Lists</a></li>
<li role="presentation" class="ui-sortable-handle"><a class="top-level-menu-link" href="/smrs/bsmStorage/browse/default.do">Storage Browse</a></li>
``` ***Target destination is this line****
<li role="presentation" class="ui-sortable-handle"><a class="top-level-menu-link" href="/smrs/AdhocReportControlServlet?hdn_function=SPECIMEN_SEARCH&hdn_function_type=REPORT_SEARCH">Specimen Custom Report</a></li>
```
<li role="presentation" class="ui-sortable-handle"><a class="top-level-menu-link" href="/smrs/BSMSSpecimenCollectionControlServlet?hdn_function=SPECIMEN_COLLECTION&hdn_function_type=INQUIRY">Specimen Collection Console</a></li>
<li role="presentation" class="ui-sortable-handle"><a class="top-level-menu-link" href="/smrs/BSMSpecimenUploadServlet?hdn_function=SPECIMEN_IMPORT">Specimen Import</a></li>
</ul>
</ul>
HTML
我已根据以下评论者推荐的以下更改修改了我的代码:
Sub Test()
Dim IE As Object
Dim doc As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.navigate "https://iuctsi-oncore-prod.forteresearchapps.com/smrs/AdhocReportControlServlet"
Call ReadyWaitingLoop(IE)
Set doc = IE.document
Dim userEle As Object, pwEle As Object, submitBtn As Object, frm As Object
Set frm = doc.getElementsByClassName("login-form")(0)
Set userEle = doc.getElementById("username")
userEle.Value = "username" ' ## MODIFY to use a real username
Set submitBtn = doc.getElementById("submitBtn")
frm.submit ' or submitBtn.Click -- not sure which is needed, both seem to work as tested
Call ReadyWaitingLoop(IE)
Set pwEle = doc.getElementById("password")
Set submitBtn = doc.getElementById("submitBtn") '## maybe case-sensitive
pwEle.Value = "password" ' ## MODIFY to use a real password
submitBtn.Click '-- not sure which is needed, both seem to work as tested frm.submit ' or
Call ReadyWaitingLoop(IE)
While IE.Busy Or IE.readyState <> 4: DoEvents: Wend
IE.document.querySelector("[href$=REPORT_SEARCH]").Click
While IE.Busy Or IE.readyState <> 4: DoEvents: Wend
While IE.Busy Or IE.readyState <> 4: DoEvents: Wend
IE.document.querySelector("[href$=CustomReportGroup_Mine_IUGBQCChecks").Click '----This reference does not seem to work. The original element is:<a id="groupHead_3" href="javascript:showhide(3,'CustomReportGroup_Mine_IUGBQCChecks' );">[-]</a>
While IE.Busy Or IE.readyState <> 4: DoEvents: Wend
While IE.Busy Or IE.readyState <> 4: DoEvents: Wend
IE.document.querySelector("[href$=Copy of Hemoglobin QC_CO").Click
While IE.Busy Or IE.readyState <> 4: DoEvents: Wend
' Rest of your code...
End Sub
Sub ReadyWaitingLoop(IE As Object)
Do While IE.Busy Or IE.readyState <> 4
DoEvents
Loop
End Sub
我观察到的几件事:
- 提交按钮包含在表单元素中,我认为您可能需要
.Submit()
表单而不是Click
按钮。不过,当我测试它时,两者似乎都有效。见 HTML:
<form name="loginform" method="post" autocomplete="off" class="login-form">
<div class="login-form-inner">
<div class="field-wrapper">
<label for="username">Username</label>
<input type="text" name="username" id="username" autocomplete="off" value="asdfadf" maxlength="255" class="input-block-level" autofocus="">
<p class="text-error"></p>
</div>
<p>
<input class="btn btn-login btn-large" id="submitBtn" name="submitBtn" value="Next" type="submit">
</p>
</div>
</form>
- 您可能想将对象变量分配给用户名和密码元素
- 您可能需要在每个 click/submit 之后使用 ready/waiting 循环。
li
项使用相对路径,因此与其比较完整的 URL,您的逻辑应该也使用相对路径:If li.className = "top-level-menu-link" And li.href = "/smrs/AdhocReportControlServlet?hdn_function=SPECIMEN_SEARCH&hdn_function_type=REPORT_SEARCH"
因为我无法通过用户名(当然我没有有效的用户名),这是我能做的最好的事情:
Sub Test()
Dim IE As Object
Dim doc As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.Navigate "https://iuctsi-oncore-prod.forteresearchapps.com/smrs/AdhocReportControlServlet"
Call ReadyWaitingLoop(IE)
Set doc = IE.Document
Dim userEle As Object, pwEle As Object, submitBtn As Object, frm As Object
Set frm = doc.getElementsByClassName("login-form")(0)
Set userEle = doc.GetElementById("username")
userEle.Value = "Username" ' ## MODIFY to use a real username
Set submitBtn = doc.GetElementById("submitBtn")
frm.Submit ' or submitBtn.Click -- not sure which is needed, both seem to work as tested
Call ReadyWaitingLoop(IE)
Set pwEle = doc.GetElementById("password")
Set submitBtn = doc.GetElementById("submitBtn") '## maybe case-sensitive
pwEle.Value = "Password" ' ## MODIFY to use a real password
frm.Submit ' or submitBtn.Click -- not sure which is needed, both seem to work as tested
Call ReadyWaitingLoop(IE)
' Rest of your code...
End Sub
Sub ReadyWaitingLoop(IE As Object)
Do While IE.Busy Or IE.ReadyState <> 4
DoEvents
Loop
End Sub
在确保正确的页面加载后尝试关闭 IE.document 等待之前的点击然后避免循环并使用 css attribute = value selector
doc.getElementById("submitBtn").Click
While ie.Busy Or ie.ReadyState<>4:DoEvents:Wend
ie.document.querySelector("[href$=REPORT_SEARCH]").click
While ie.Busy Or ie.ReadyState<>4:DoEvents:Wend