我目前正在开展一个项目来自动化一些当前正在手动完成的数据收集。
使用简单的ctrl + a - >从网站收集数据。 ctrl + c - > ctrl + v系列命令将其粘贴到excel文档中。我已经做了很多工作来通过Excel自动化验证,但我遇到了一个试图自动化数据收集的打嗝。
此时我可以打开IE,导航到网页,登录,然后从那里打开正确的页面。我的问题是,在拉出数据之前必须填写6个下拉菜单。三个菜单没有问题,因为它们设置了变量;问题在于其他三个包含动态列表的问题。以下是这些菜单的一些源代码:
*other menus*
<td align="right" nowrap="nowrap" class="filterItemName"> FG BA: </td>
<td>
<select name="CAId" onchange="ChangeFG(); return false;" class="blacksmallnormal">
<option value='-1'>Please wait...</option>
</select>
</td>
<td colspan="2"> </td>
*other menus*
现在,我对网站代码基本没有经验(html?java?没有线索),老实说VBA只有几周,所以我几乎不知道这意味着什么。我试图抓住相关的东西,但是有很多代码。我猜这与这个功能有关,但是:
function ChangeFG()
{
var objSC = document.getElementById("SCId");
var objCA = document.getElementById("CAId");
if (objSC && objCA) {
var Arr = new Array();
Arr["SC"] = objSC[objSC.selectedIndex].value;
Arr["CA"] = objCA[objCA.selectedIndex].value;
if(Arr["CA"] == "-1")
{
alert("Please choose BA");
return;
}
Arr["GetJustFG"] = 1;
UpdateJustDropDown("<option value='-1'>Please wait...</option>", "FG");
var url = ".....";
SendAJAXCommand('UPDT_FLG', url, UpdateFGWithData, "FG", true, Arr);
}
首先,我不知道如何查看这些菜单的动态列表,而不是自己点击它们;我不知道如何确定哪个是我需要的选项。其次,当我在列表中插入一个值时,菜单结束为空白。
以下是我一直在尝试的一些代码:
Private Sub RetrieveData_Click()
Dim appIE As Object
Dim website As String
Dim UsNa As Object
Dim PsWd As Object
Dim ElementCol As Object
Dim btnInput As Object
Application.ScreenUpdating = False
Set appIE = CreateObject("internetexplorer.application")
appIE.Visible = True
website = "https://www...."
With appIE
.Navigate website
.Visible = True
End With
Do While appIE.Busy
Loop
*Login here*
'navigate to actual page to get data from
appIE.Navigate ("https://www...")
Do While appIE.Busy
Loop
DoEvents
Set ElementCol = appIE.Document.getElementsByTagName("select")
For Each btnInput In ElementCol
If btnInput.Name = "SCId" Then
btnInput.Value = "8"
Exit For
End If
Next
Do While appIE.Busy
Loop
Set ElementCol = appIE.Document.getElementsByTagName("select")
For Each btnInput In ElementCol
If btnInput.Name = "Direction" Then
btnInput.Value = "0"
Exit For
End If
Next
Do While appIE.Busy
Loop
For Each btnInput In ElementCol
If btnInput.Name = "FG" Then
btnInput.FireEvent ("onChange")
btnInput.Value = "6009"
Exit For
End If
Next
我知道这是一个混乱的代码和诸如此类的东西;计划是在弄清楚如何使它工作之后清理它。当我继续在这个问题上进行迭代时,它肯定变得更加混乱。
无论如何,非常感谢任何有关如何完成这项工作的见解!