Загадочное Всплывающее Окно Chrome, Которое Можно Перемещать

#javascript #html #selenium #google-chrome #web

#язык JavaScript #HTML #селен #google-chrome #сеть

Вопрос:

Я просматривал веб-магазин Chrome и заметил всплывающее окно (или предупреждение), о существовании которого я не знал, оно появляется, но позволяет перемещать окно? его можно не только перемещать, но и перемещать из исходного окна, как если бы это была новая вкладка (что вполне может быть). Вот GIF, показывающий, о чем я говорю:

Нажмите Здесь Для Получения Изображения!

Ниже приведен фрагмент обычного HTML-предупреждения, с которым знакомо большинство людей, однако, как вы можете видеть из запуска сценария, вы не можете перемещаться по всплывающему окну, как во всплывающем окне интернет-магазина Chrome.

 lt;div style="display: flex;justify-content: center;align-items: center;"gt;  lt;button onclick="tryme()"gt;  try me  lt;/buttongt; lt;/divgt; lt;scriptgt;  function tryme() {  window.alert("sometext");  console.log("working")  } lt;/scriptgt; 

Причина, по которой мне действительно было интересно узнать, как это сделать, заключается в том, чтобы я мог автоматически принять это с помощью чего-то вроде веб-драйвера selenium на основе python. У Selenium есть инструмент, с помощью которого вы можете переключиться на оповещение, но он не может распознать это оповещение из-за того, что оно не является общим предупреждением. Поэтому, если бы мы могли выяснить, как работает это всплывающее окно, мы могли бы выяснить, как с его помощью автоматизировать задачи…

При просмотре HTML для кнопки, которая запускает это всплывающее окно, я разделил его на две части, этот первый раздел-HTML перед щелчком:

 lt;div role="button" class="dd-Va g-c-wb g-eg-ua-Uc-c-za g-c-Oc-td-jb-oa g-c" aria-label="Add to Chrome" style="user-select: none;" tabindex="0"gt;  lt;div class="g-c-Hf"gt;  lt;div class="g-c-x"gt;  lt;div class="g-c-R webstore-test-button-label"gt;  Add to Chrome  lt;/divgt;  lt;/divgt;  lt;/divgt; lt;/divgt;  

Ниже приведен HTML-код кнопки после нажатия:

 lt;div role="button" class="dd-Va g-c-wb g-eg-ua-Uc-c-za g-c g-c-oa" aria-label="Checking..." aria-disabled="true" style="user-select: none;"gt;  lt;div class="g-c-Hf"gt;  lt;div class="g-c-x"gt;  lt;div class="g-c-R webstore-test-button-label"gt;  Checking...  lt;/divgt;  lt;/divgt;  lt;/divgt; lt;/divgt;  

При поиске функции JavaScript, которая привела к появлению этого всплывающего окна, я обнаружил следующее:

Нажмите На Меня, Чтобы Получить Изображение!

При поиске определения этой функции/метода Javascript я обнаружил следующее:

 ep = function() {  var a = gp  , b = function(c) {  return a.call(b.src, b.listener, c)  };  return b }  

Хотя это, очевидно, не сильно помогло, и отсюда я решил обратиться за помощью ко всем программистам «Господь и спаситель переполнения стека».

Комментарии:

1. Это приглашение находится за пределами DOM. (Вы не можете щелкнуть по нему без вмешательства пользователя или класса типа «робот».) Это собственное приглашение браузера…. аналогично тем, которые позволяют получить доступ к местоположению или камере/аудио. Если вам нужно, чтобы это расширение было установлено в браузере, вам необходимо установить его при запуске драйвера. (Или используйте существующий профиль с уже установленным?)

2. @pcalkins прав. Но если вам интересно, вызов, который, кажется, создает всплывающее окно, — это chrome.webstorePrivate.beginInstallWithManifest3(объект вызова, обратный вызов(результат, неизвестный) {}, аргументы). Вы можете просмотреть дополнительную информацию в отладчике, если поставите точку останова перед этим оператором в функции beginInstall.

3. @pcalkins Потрясающе, большое вам спасибо, я не знал, что вы можете загружать chrome с установленным расширением через Selenium. Это ответ на мой вопрос.

4. @Kevin Я буду продолжать изучать это, большое вам спасибо за ваш ответ!