Я кодирую макрос в excel для веб-ломания с определенной веб-страницы. Я могу перейти на веб-страницу. Проблема в том, что на этой странице есть гиперссылка, связанная с функцией java-скрипта для генерации таблицы html. Я хочу получить данные из этой таблицы. но эта динамически созданная таблица не отображается в "View Source", и я не могу получить к ней доступ. Здесь я расскажу о функции скрипта Java.
Таблица:
Таблица генерации функции JS:
function create_table(ret,pshow){
var l_Count = ret.getElementsByTagName("td").length;
if(l_Count>0){
var cols = ret.getElementsByTagName("th").length;
var rows = l_Count/cols;
var tbl=document.createElement('table');
tbl.setAttribute('class','t20Report t20Standard');
tbl.style.borderCollapse="collapse";
var tbdy=document.createElement('tbody');
var tr=document.createElement('tr');
for(var k=0;k<cols;k++){
var th=document.createElement('th');
th.setAttribute('class','t20ReportHeader');
th.appendChild(document.createTextNode(ret.getElementsByTagName("th")[k].firstChild.nodeValue));
tr.appendChild(th);
}
tbdy.appendChild(tr);
var r=0;
for(var i=0;i<rows;i++){
var tr=document.createElement('tr');
for(var j=0;j<cols;j++){
var td=document.createElement('td');
td.setAttribute('class','t20data');
td.appendChild(document.createTextNode(ret.getElementsByTagName("td")[r].firstChild.nodeValue));
r++;
tr.appendChild(td);
}
tbdy.appendChild(tr);
}''
tbl.appendChild(tbdy);
pshow.appendChild(tbl);
}
else
{
var t=document.createTextNode("DATA NOT AVAILABLE");
pshow.appendChild(t);
}
Это генерирует HTML-код, как показано ниже.
HTML для таблицы:
<table class="t20Report t20Standard" style="border-collapse: collapse;">
<tbody>
<tr>
<th class="t20ReportHeader">Switch</th><th class="t20ReportHeader">NE</th>
<th class="t20ReportHeader">port_card_slot</th>
<th class="t20ReportHeader">Vertical</th>
<th class="t20ReportHeader">Pillar</th>
<th class="t20ReportHeader">OUT CT Box</th>
<th class="t20ReportHeader">OUT Tag</th>
<th class="t20ReportHeader">IN CT Box</th>
<th class="t20ReportHeader">IN Tag</th>
<th class="t20ReportHeader">DP</th>
<th class="t20ReportHeader">DP Tag</th>
<th class="t20ReportHeader">DP Type</th>
</tr>
<tr>
<td class="t20data">KKDPVLO01</td>
<td class="t20data">0003-02-117</td>
<td class="t20data">00</td>
<td class="t20data">1-001-01-013</td>
<td class="t20data">KKDPVL0062</td>
<td class="t20data">B2</td>
<td class="t20data">075</td>
<td class="t20data">A1</td>
<td class="t20data">013</td>
<td class="t20data">KKDPVL0062X0018</td>
<td class="t20data">004</td>
<td class="t20data">DP-DL</td>
</tr>
</tbody>
</table>
Из VBA я не могу получить доступ к этому.
Кстати, я использую IE6, и я должен сделать это только в IE6, а выше код HTML, полученный из другой системы через Google Chrome, используя "Inspect". Но в IE6 я могу видеть только "View Source", и здесь он не отображает выше сгенерированный HTML.
Код:
Sub scrape()
Dim ie As Object
Dim baseurl As String
Set ie = CreateObject("internetexplorer.application")
With ie
.navigate "http://itpc.sdc.bsnl.co.in:7777/pls/apex/f?p=204:1"
.Visible = True
End With
Do While ie.Busy
DoEvents
Loop
ie.document.getElementById("P101_USERNAME").Value = "b200800935"
ie.document.getElementById("P101_PASSWORD").Value = "xxxxxxxx"
Do While ie.Busy
DoEvents
Loop
For Each l In ie.document.getElementsByTagName("a")
If l.className = "t20Button" Then
l.Click
Exit For
End If
Next
Do While ie.Busy
DoEvents
Loop
'baseurl = Replace(ie.LocationUrl, "204", "124")
'MsgBox ie.LocationUrl
'MsgBox Replace(ie.LocationUrl, "204", "124") & "::NO::HOME_APP,HOME_PAGE:204,1"
ie.navigate Replace(ie.LocationURL, "204", "124") & "::NO::HOME_APP,HOME_PAGE:204,1"
Do While ie.Busy
DoEvents
Loop
ie.document.getElementById("PHONE_NO").Value = "04565-282200"
ie.document.getElementById("P1_GO").Click
Do While ie.Busy
DoEvents
Loop
For Each l In ie.document.getElementsByTagName("a")
If l.innerText = "04565-282200" Then
l.Click
Exit For
End If
Next
Do While ie.Busy
DoEvents
Loop
ie.document.parentWindow.execScript "ajaxcall('CIRCUITS','CKT_LINK','CIRCUITS')"
' THE CODE IS OK UPTO THIS
'THE ABOVE EXECUTION OF JAVASCRIPT FUNCTION CREATES A DYNAMIC TABLE IN WEB PAGE
'WHICH IS NOT ACCESSIBLE IN VBA BY MY CODE
''ie.Quit
''Set ie = Nothing
End Sub
Спасибо за вашу помощь. Я получил то, что хотел, добавив следующую строку кода. После последней строки, которая выполнила java-скрипт, я добавил следующую строку сразу после execScript():
document.getElementbyId('id id'). innerHTML.
Этот "div" был сгенерирован через скрипт, который был видимым в "View Source". Благодаря этому я смог получить доступ к таблице. Он вернул строку, содержащую раздел "Таблица.../Таблица" внутри этого "div". и я извлек данные с помощью строковых манипуляций. Не знаю, как это работает, но я получил то, что хочу. Спасибо всем за ваше ценное предложение.
CreateObject()
в VBA для создания вызовов AJAX и анализаторов JScript, чтобы помочь нам в этом, но, поскольку вы, похоже, используете очень старое программное обеспечение, я не могу гарантировать, что они существуют в версиях, которые вы используете.