Использование Selenium для закрытия всплывающего окна браузера - PullRequest
0 голосов
/ 30 июня 2019

Я собираю некоторые данные с веб-сайта (Investing.com) и иногда получаю всплывающее окно. Я искал нажимаемую кнопку в элементах, но ничего не нашел.

Вот сегмент страницы элемента, где элемент <"i"> - это все, что я могу найти относительно закрытия X.

...
<div class="right">
    <i class="popupCloseIcon largeBannerCloser">
        ::after
    </i>
...

Код, который я пробовал, находится ниже:

from selenium.webdriver import ChromeOptions as Options
import selenium.webdriver as webdriver

chrome_options = Options()
#chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')

d = webdriver.Chrome('chromedriver', options=chrome_options)
d.get("https://www.investing.com/currencies/eur-usd-technical")

iElements = d.find_elements_by_tag_name("i")
for name in iElements:
    print(name.get_attribute("class"))
    if name.get_attribute("class") == "popupCloseIcon largeBannerCloser":
        print("im here")
        name.click()

Я печатаю свой текст и попадаю туда, поэтому знайте, что я нашел свой элемент, но я получаю следующую ошибку:

selenium.common.exceptions.ElementNotInteractableException: Сообщение: элемент не взаимодействует

Не можете найти что-нибудь еще для взаимодействия, хотя?

Ответы [ 2 ]

1 голос
/ 30 июня 2019

Обнаружено, что я могу обойти это, удалив элемент div, содержащий весь баннер.Мне удалось найти его с помощью селектора CSS, а затем удалить его с помощью некоторого Javascript (скопированного / вставленного).

Это позволяет моим кликам регистрироваться, чтобы я мог получать свои элементы по мере необходимости.

Приведенный ниже код пытается подождать всплывающее окно в течение 5 секунд, в этом случае он удаляет элемент, в противном случае он продолжает пытаться щелкнуть.

delay = 5
try:
    myElem = WebDriverWait(d, delay).until(EC.presence_of_element_located(
        (By.CSS_SELECTOR, 'body > div.generalOverlay.js-general-overlay.displayNone.js-promotional')))
    element = d.find_element_by_css_selector('body > div.generalOverlay.js-general-overlay.displayNone.js-promotional')
    d.execute_script("var element = arguments[0];element.parentNode.removeChild(element);", element)
    print("Pop-Up Negated")
except TimeoutException:
    print("No Pop-Up Detected")
aElements = d.find_elements_by_tag_name("a")
for name in aElements:
    if name.get_attribute("href") is not None and "javascript:void" in name.get_attribute("href"):
        if (name.text == i):
            print(name.text)
            name.click()
            break

Любые комментарии по улучшению могут быть высоко оценены.

0 голосов
/ 30 июня 2019

Вы уверены, что это не оповещение? Один из способов проверки состоит в том, чтобы попытаться проверить элементы в окне оповещения.

Вы можете попробовать любой из этих:

driver.switchTo().alert().dismiss();
driver.switchTo().alert().accept();

Если это вызывает исключение NoAlertPresentException, снимок экрана всплывающего окна может помочь нам помочь вам лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...