#python #selenium-webdriver #popup
#python #selenium-webdriver #всплывающее окно
Вопрос:
Я использую Selenium в Python 3 для доступа к веб-страницам, и я хочу нажать на всплывающую кнопку, но я не могу найти ее с помощью Selenium.
То, что я описываю ниже, относится к ряду сайтов с всплывающим окном, поэтому я использую простой пример.
url = "https://www.google.co.uk"
from selenium import webdriver
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get(url)
На странице есть всплывающее окно для согласия на использование файлов cookie.
Я хочу, чтобы скрипт нажал на кнопку «Я согласен», но я не могу ее найти.
Я нашел несколько вопросов и сообщений об этом в Интернете (в том числе в Stackoverflow), но все предложения, которые я нашел, похоже, попадают в одну из следующих категорий и, похоже, не работают для меня.
- Подождите дольше, пока всплывающее окно действительно загрузится.
Я пытался добавить задержки, и на самом деле я тестирую это в интерактивном режиме, поэтому я могу сколько угодно ждать загрузки страницы, прежде чем пытаться найти кнопку, но это не имеет никакого значения.
- Используйте что-то вроде
driver.switch_to.alert
Я получаю NoAlertPresentException
. Всплывающее окно, похоже, не является предупреждением.
- Найдите элемент с помощью
driver.find_element
.
Это тоже не работает, независимо от того, какой подход я использую (xpath, имя класса, текст и т.д.). Я могу найти элементы со страницы под всплывающим окном, но ничего из самого всплывающего окна. Например,
# Elements in main page (under pop-up)
driver.find_element_by_partial_link_text("Sign in") # returns FirefoxWebElement
driver.find_element_by_class_name("gb_g") # returns FirefoxWebElement
# Elements on the pop-up
driver.find_element_by_partial_link_text("I agree") # NoSuchElementException
driver.find_element_by_class_name("RveJvd snByac") # NoSuchElementException
Всплывающее окно, похоже, просто отсутствует в источнике страницы. На самом деле, если я попытаюсь просмотреть источник загруженной страницы из браузера, я не могу найти ничего, связанного с всплывающим окном. Я понимаю, что многие сайты используют клиентские скрипты для динамической загрузки элементов, поэтому многие элементы не будут отображаться в исходном коде, но в этом и был смысл использования Selenium: для загрузки страницы, интерпретации скриптов и доступа к конечному результату.
Итак, что я делаю не так? Откуда появляется всплывающее окно и как я могу получить к нему доступ?
Комментарии:
1. используется
--headless
ли опция или вам нужно окно?2. приведите пример ссылки в коде .. я не вижу всплывающего окна.
3. @AbrarAhmed, мне не нужно видеть окно, но мне нужен браузер, который может интерпретировать JS и т.д. чтобы загрузить содержимое, к которому я хочу получить доступ с помощью скрипта. Я считаю, что я не могу использовать
--headless
для этого.4. @AbrarAhmed, я включил в вопрос как URL-адрес страницы, так и скриншот с всплывающим окном. Чтобы получить всплывающее окно, вам может потребоваться выйти из любых учетных записей Google и очистить файлы cookie.
5. Вы пробовали использовать инструменты отладки браузера? Я мог видеть (в Firefox) следующую строку, когда я использовал инспектор на кнопке «Я согласен»:
<span class="RveJvd snByac">I agree</span>
.