Как щелкнуть по значку X, чтобы закрыть iframe, используя Seleniumv3 и Python3 - PullRequest
0 голосов
/ 17 сентября 2018

Мне трудно закрыть всплывающее окно iframe на https://www.kariyer.net/ используя python3.

iframe

Когда я пытаюсь проверить код внутри браузера, создается впечатление, что ссылка находится внутри тега <i>, и внутри этого тега нет href. Я предполагаю, что это ссылка на javascript, и я совсем не такой уж парень по javascript.

Я не смог ничего найти в Google, потому что каждая ситуация, которая возникает в Google, кажется, включает либо кнопку, либо тег href.

iframe code inspection

Поскольку это живой сайт, я не делюсь html-кодом, но, если вам это нужно, пожалуйста, дайте мне знать. Я довольно новичок в Selenium, и любая помощь будет оценена. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

В соответствии с URL-адресом, который вы указали для click() на значке X , вы должны заставить WebDriverWait сделать фрейм доступным и переключиться на него и затем снова вызовите WebDriverWait , чтобы желаемый элемент был активным , и вы можете использовать следующее решение:

  • Кодовый блок:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait 
    from selenium.webdriver.support import expected_conditions as EC
    
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_argument('disable-infobars')
    driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get("https://www.kariyer.net/")
    
    # xpath
    WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@class='sp-fancybox-iframe adaptive-resolution']")))
    
    # css_selector
    # WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe.sp-fancybox-iframe.adaptive-resolution")))
    
    # xpath
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='element-content']/i[@class='fa fa-times element-close-button']"))).click()
    
    # css_selector
    # WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.element-content > i.fa.fa-times.element-close-button"))).click()
    
  • Снимок браузера:

kariyer

0 голосов
/ 17 сентября 2018

Код ниже ждет фрейм и переключается на него, затем нажимает кнопку «Закрыть» и переключается обратно на главный. Смотрите селекторы, которые я использовал, если у вас есть проблемы с их поиском.

WebDriverWait(driver, 10)
    .until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "iframe.sp-fancybox-iframe")))
driver.find_element_by_css_selector("i.element-close-button").click()
driver.switch_to.default_content()

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

...