Сохранить результат функции javascript с веб-страницы в Excel VBA

Я кодирую макрос в Excel для очистки веб-страниц с определенной веб-страницы. Я могу перейти на веб-страницу. Проблема в том, что на этой странице есть гиперссылка, связанная с функцией сценария java для создания таблицы html. Я хочу получить данные из этой таблицы. но эта динамически созданная таблица не отображается в «Просмотр исходного кода», и я не могу получить к ней доступ. Я поделюсь здесь функцией сценария Java.


Таблица:

Сохранить результат функции javascript с веб-страницы в Excel VBA


Таблица генерации 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 я могу видеть только «Просмотр исходного кода», а здесь он не отображает созданный выше 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

Хм, а если открыть страницу во встроенном браузере (Меню -> Данные -> Из Интернета), запускается ли javascript? Если это так, вы можете выбрать там сгенерированную таблицу и, следовательно, выполнить макрос для этих действий. Мы также используем CreateObject() в VBA для создания вызовов AJAX и парсеры JScript, чтобы помочь нам в этом, но поскольку вы, похоже, используете очень старое программное обеспечение, я не могу гарантировать, что они существуют в используемых вами версиях.

Shilly 31.07.2018 15:01

Конечно. Я добавил код.

Nagesh 31.07.2018 15:24

Я прикрепил изображение. Вот и все, что меня беспокоит, - это четвертая таблица под названием «Детали схемы». он создается с помощью приведенного выше кода javascript.

Nagesh 31.07.2018 15:32

Спасибо. Можете ли вы также показать html, где прикреплено событие?

QHarr 31.07.2018 16:27

Это помогло бы увидеть окружающий html. Вы проверили, что он не вложен в Form / Frame / iFrame? Или если есть недоступная для выбора индикация? Или даже другое происхождение.

QHarr 31.07.2018 16:36
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
5
697
1

Ответы 1

Спасибо за вашу помощь. Я действительно получил то, что хотел, добавив следующую строку кода. После последней строки, в которой выполнялся java-скрипт, я добавил следующую строку сразу после execScript ():

document.getElementbyId ('имя идентификатора div'). innerHTML.

Этот «div» был создан с помощью сценария, который был виден в «Просмотр исходного кода». Благодаря этому я смог получить доступ к таблице. Он вернул строку, содержащую часть «Таблица ... / Таблица» внутри этого «div». и я извлек данные с помощью строковых манипуляций. Не знаю, как это сработало, но я получил то, что хочу. Спасибо всем за ваше ценное предложение.

Другие вопросы по теме