Начал изучать js путём написания юзерскриптов в temparmonkey на работе. Раньше этим занимался другой человек и его сейчас в команде нет, решил этим заняться я.
Так вот появилась проблема скрипт ранее работал, но внезапно сломался. Необходимо из формы, которая появляется при нажатии на ссылку, взять некоторые данные (см. скрины).
Было это реализовано следующим куском кода
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>
Вот что находится внутри.
Пытался решить проблему следующим образом. При открытии сайта открывать эту форму, брать оттуда информацию и закрыть форму. Но почему-то доступа туда нет. При отладке оказывалось что просто таких данных нет и он ничего не находит.
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 элементу данных нет.
Подскажите в какую сторону думать и как решить эту проблему?