#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 Я буду продолжать изучать это, большое вам спасибо за ваш ответ!