Задать вопрос
@Espio

Как взять данные из скрытого блока ajax?

Начал изучать js путём написания юзерскриптов в temparmonkey на работе. Раньше этим занимался другой человек и его сейчас в команде нет, решил этим заняться я.
Так вот появилась проблема скрипт ранее работал, но внезапно сломался. Необходимо из формы, которая появляется при нажатии на ссылку, взять некоторые данные (см. скрины).
61fbdc62239c7506263520.png
61fbdcde88f6a053768363.png
Было это реализовано следующим куском кода
var entityloggedas = document.getElementById('loggedas');
    var entitylink = entityloggedas.getElementsByTagName('a')[0];

    if (entitylink) {
        var entitylinkhtref = entitylink.href;
        console.log(entitylinkhtref.match());
        var link = entitylinkhtref.match(/'(.*)'/g)[0];
        var url = eval(link);
        var xhr = new XMLHttpRequest();
        xhr.open('GET', `${url}`, false);
        xhr.send();
        if (xhr.status != 200) {
            alert( xhr.status + ': ' + xhr.statusText ); // пример вывода: 404: Not Found
        } else {
            var response_data = xhr.responseText || '';
            var hdiv = document.createElement('div');
            hdiv.style.display = 'none';
            hdiv.innerHTML = response_data;
            var innerFormWide = hdiv.getElementsByClassName('innerFormWide')[0];
            var entitytable = innerFormWide.getElementsByTagName('tbody')[0];
            var entitylines = entitytable.getElementsByTagName('tr');
            EntityName = getValue(entitylines, 'Название предприятия:');
            RUNumber = getValue(entitylines, 'Номер предприятия в реестре:');
            RUZerber = getValue(entitylines, 'Номер предприятия в ИС «Цербер»:');
            //EntityName += (', ' + getValue(entitylines, 'Адрес регистрации:'));
            EntityAdress = getValue(entitylines, 'Адрес регистрации:');
            EntityGUID = getValue(entitylines, 'GUID (глобальный идентификатор предприятия):');
        }
    }

При выполнении этого кода вываливается следующая ошибка.
Uncaught (in promise) TypeError: Cannot read properties of null (reading '0')
    at eval (userscript.html?name=LKtoGoogleForm%20YuL.user.js&id=4e0f4aa2-2d88-4570-9d82-22a0b24e50c2:54)
    at Object.eval (userscript.html?name=LKtoGoogleForm%20YuL.user.js&id=4e0f4aa2-2d88-4570-9d82-22a0b24e50c2:142)
    at nt (<anonymous>:13:1036)
    at eval (userscript.html?name=LKtoGoogleForm%20YuL.user.js&id=4e0f4aa2-2d88-4570-9d82-22a0b24e50c2:1)
    at eval (userscript.html?name=LKtoGoogleForm%20YuL.user.js&id=4e0f4aa2-2d88-4570-9d82-22a0b24e50c2:1)
    at eval (userscript.html?name=LKtoGoogleForm%20YuL.user.js&id=4e0f4aa2-2d88-4570-9d82-22a0b24e50c2:143)
    at eval (userscript.html?name=LKtoGoogleForm%20YuL.user.js&id=4e0f4aa2-2d88-4570-9d82-22a0b24e50c2:145)
    at eval (<anonymous>)
    at Object.E_u (<anonymous>:4:27)
    at eval (eval at exec_fn (operatorui:3), <anonymous>:64:49)


Путём анализа я понял что скорее всего поменялась ссылка в этом месте HTML
Обслуживаемое предприятие:
                     <a href = "javascript:loadCommonWindow('operatorui?_action=showEnterpriseAjax&isLicensed=true&isCustomsUnionCountry=true&enterprisePk=9427048&ignoreNotConfirmed=true&form=winAjaxShowForm', init());">
                        <b>Некоторое ИП</b></a>

Как я понял, по нажатию той кнопки активируется div со скрытым там содержимым, а конкретнее появляется развернуть div ниже и как раз внутри него хранится та информация, которую нужно подтянуть. Пока форма скрыта инфорацию внутри там не появляется и соответственно простым способом её не подтянуть.
<div id = "winAjaxShowForm"></div>
Вот что находится внутри.61fbe2d01e82d721973913.png

Пытался решить проблему следующим образом. При открытии сайта открывать эту форму, брать оттуда информацию и закрыть форму. Но почему-то доступа туда нет. При отладке оказывалось что просто таких данных нет и он ничего не находит.
var entityloggedas = document.getElementById('loggedas');
    var entitylink = entityloggedas.getElementsByTagName('a')[0];

    entitylink.click();
    var hidden = document.getElementById('winAjaxShowForm');
    var elem = hidden.getElementsByTagName('div');
    console.log(hidden);
    console.log(elem);
    console.log(elem[5]);

Как видно из скриншота ниже, данные как бы есть, но когда обращаюсь к конкретному HTML элементу данных нет.
61fbe5019ee5f331098009.png

Подскажите в какую сторону думать и как решить эту проблему?
  • Вопрос задан
  • 75 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
zkrvndm
@zkrvndm
Архитектор решений
Подскажите в какую сторону думать и как решить эту проблему?


Вам надо думать в сторону фрилансим:
https://freelance.habr.com
У вас не проблема, а задание.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы