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

Как эмулировать клик на чебокс в shadowRoot?

Уважаемые! Бьюсь уже неделю, не могу решить.
чебокс находить в теневом DOM iframe, который тоже находить в теневом DOM.
spoiler

669774149819e789412954.png

Доступ к чебоксу я решил с помощью скрипта на Tampermonkey:
скрипт

Element.prototype._attachShadow = Element.prototype.attachShadow;
Element.prototype.attachShadow = function () {
    return this._attachShadow( { mode: "open" } );
};


Если в консоле запускаю обычный "click()":
click

document.querySelector("body").shadowRoot.querySelector("#CdRm7 > div > label > span.cb-i").click();


то ошибка, что селектора нет:
spoiler

669775a18cb3f984522099.png

Но если перед этим я выберу "исследовать элемент" (правый клик мыши), и запущу опять "click", то все норм:
spoiler

66977677ec975188422984.png

Есть мысли как решить?
PS: тестировал на сайте
https://rucaptcha.com/demo/cloudflare-turnstile
  • Вопрос задан
  • 146 просмотров
Подписаться 2 Сложный 3 комментария
Пригласить эксперта
Ответы на вопрос 1
Ahmad66617
@Ahmad66617
Senior Fullstack Engineer
Вот пример
<my-element></my-element>

<script>
  class MyElement extends HTMLElement {
    constructor() {
      super();
      this.attachShadow({ mode: 'open' });
      this.shadowRoot.innerHTML = `
        <input type="checkbox" id="myCheckbox">
      `;
    }
  }

  customElements.define('my-element', MyElement);
</script>
// Находим элемент, который содержит shadowRoot
const myElement = document.querySelector('my-element');

// Получаем доступ к shadowRoot
const shadowRoot = myElement.shadowRoot;

// Находим чекбокс внутри shadowRoot
const checkbox = shadowRoot.querySelector('#myCheckbox');

// Эмулируем клик на чекбоксе
checkbox.click();
Ответ написан
Ваш ответ на вопрос

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

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