Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Пользовательский скрипт: click по элементам на чужом angular сайте (https://javascript.ru/forum/events/83115-polzovatelskijj-skript-click-po-ehlementam-na-chuzhom-angular-sajjte.html)

sergey_b89 19.09.2021 12:45

Пользовательский скрипт: click по элементам на чужом angular сайте
 
Страница полностью загружена, на ней есть таблица.
В таблице собрана информация за год и по месяцам.
Вначале она отображает информацию только за год, одной строкой.
По нажатию на ссылку в последнем столбце, она раскрывается,
и отображается информация по месяцам.

На рис. часть кода страницы.
https://hostingkartinok.com/show-ima...a88375fb49a592

Пытаюсь программно раскрыть таблицу.

Выполняю свой скрипт через букмарклет, а сам файл скрипта лежит на локальном веб сервере.

let table = document.getElementsByClassName("table-cust table-cust-payment"); 
let col=table[1].children;
let ref=col[4].children;
let event = new MouseEvent("click");
console.log(ref[0].dispatchEvent(event));


Результат true, но таблица не раскрывается.

Подскажите, возможно ли программно раскрыть эту таблицу, так как строк может быть очень много? И как лучше это сделать?

od0201 19.09.2021 15:15

Вы запутались в "детях",
1. нет rows
2. если смотреть на картину, то порядок другой
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <div class="table-cust table-cust-payment">
    <div class="table-row"></div>
    <div class="table-row">
      <div class="table-col"></div>
      <div class="table-col"></div>
      <div class="table-col">
        <a href="">
          <span>vvvv</span>
        </a>      
      </div class="table-col">
    </div>
    <div class="table-row"></div>
  </div>
</body>
<script>
  const table = document.getElementsByClassName("table-cust table-cust-payment")
  const rows=table[0].querySelectorAll('div.table-row');
  console.log(rows);
  const cols=rows[1].querySelectorAll('div.table-col');
  console.log(cols);
  const ref=cols[2].querySelector('a');
  console.log(ref);
  const event = new MouseEvent("click");
  setTimeout (()=>{ 
    ref.dispatchEvent(event);
	}, 4000);

</script>
</html>

Цитата:

Сообщение от sergey_b89 (Сообщение 540287)
Подскажите, возможно ли программно раскрыть эту таблицу, так как строк может быть очень много? И как лучше это сделать?

Пробежаться по всем массивам и кликнуть на каждую, лучше с интервалом

Но лучше посмотриеть F12-Network, где видно запросы страницы и самостоятельно их сделать

sergey_b89 20.09.2021 21:04

Уточняю.

1. Мой скрипт правильный, так как getElementsByClassName возвращает детей/строки. Сбил с толку фразой table.

2. Клик происходит, но вместо раскрытия таблицы, я перехожу по ссылке:
"корень сайта" и плюс "#".
Как раз та "решетка" которая находится в теге <a>.

Может на чужом angular сайте у меня не получится программно раскрыть таблицу?
Подскажите...

voraa 20.09.2021 22:34

Ну да. В обработчике клика должен вызываться preventDefault().
Без него будет переход по ссылки.


Часовой пояс GMT +3, время: 23:07.