Нажмите кнопку, которая открывает всплывающее окно

URL: https://efun.toronto.ca/torontofun/Activities/ActivitiesCourseDetails.asp?aid=18830&cid=6455687

При нажатии кнопки «Добавить» открывается всплывающее окно, в котором необходимо ввести свои учетные данные. Я пробовал разные способы нажатия кнопки с помощью Selenium / Python для создания всплывающего окна, но, похоже, ничего не работает.

Фрагмент моего кода:

from selenium import webdriver
import xpath
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

PATH = "C:\Program Files (x86)\chromedriver.exe"

driver = webdriver.Chrome(PATH)

driver.get('https://efun.toronto.ca/torontofun/Activities/ActivitiesCourseDetails.asp?aid=18830&cid=6455687')

add_buttom_try1 = WebDriverWait(driver,10).until(
    EC.presence_of_element_located((By.CLASS_NAME, "Add"))).click()

add_buttom_try2 = WebDriverWait(driver,10).until(
    EC.presence_of_element_located((By.CLASS_NAME, "ui-state-active ui-corner-all link-button ajax-request from-full-page focus-child need-focus-pageobject")))

person Arty    schedule 17.02.2021    source источник


Ответы (2)


Взгляните на это: стратегии для поиска элементов на странице

Вот несколько способов найти кнопку «Добавить»:

Использование XPATH:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("start-maximized")
chrome_options.add_argument("--disable-infobars")
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--disable-popup-blocking")

# disable the banner "Chrome is being controlled by automated test software"
chrome_options.add_experimental_option("useAutomationExtension", False)
chrome_options.add_experimental_option("excludeSwitches", ['enable-automation'])

driver = webdriver.Chrome('/usr/local/bin/chromedriver', options=chrome_options)

driver.get('https://efun.toronto.ca/torontofun/Activities/ActivitiesCourseDetails.asp?aid=18830&cid=6455687')

add_button = driver.find_elements_by_xpath("//a[contains(@href,'Add')]")
add_button[0].click()

Использование CSS_SELECTOR:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("start-maximized")
chrome_options.add_argument("--disable-infobars")
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--disable-popup-blocking")

# disable the banner "Chrome is being controlled by automated test software"
chrome_options.add_experimental_option("useAutomationExtension", False)
chrome_options.add_experimental_option("excludeSwitches", ['enable-automation'])

driver = webdriver.Chrome('/usr/local/bin/chromedriver', options=chrome_options)

driver.get('https://efun.toronto.ca/torontofun/Activities/ActivitiesCourseDetails.asp?aid=18830&cid=6455687')

add_button = driver.find_elements_by_css_selector('.ui-state-active')
add_button[2].click()

ИСПОЛЬЗУЯ LINK_TEXT:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("start-maximized")
chrome_options.add_argument("--disable-infobars")
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--disable-popup-blocking")

# disable the banner "Chrome is being controlled by automated test software"
chrome_options.add_experimental_option("useAutomationExtension", False)
chrome_options.add_experimental_option("excludeSwitches", ['enable-automation'])

driver = webdriver.Chrome('/usr/local/bin/chromedriver', options=chrome_options)

driver.get('https://efun.toronto.ca/torontofun/Activities/ActivitiesCourseDetails.asp?aid=18830&cid=6455687')

add_button = driver.find_element_by_link_text('Add')
add_button.click()

Иногда ваш код может выполняться до того, как кнопка станет активной. Когда это произойдет, будет выдана ошибка. Добавление оператора WebDriverWait - хорошая практика при поиске элемента, на который можно щелкнуть.

ref: операторы ожидания selenium

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

chrome_options = Options()
chrome_options.add_argument("start-maximized")
chrome_options.add_argument("--disable-infobars")
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--disable-popup-blocking")

# disable the banner "Chrome is being controlled by automated test software"
chrome_options.add_experimental_option("useAutomationExtension", False)
chrome_options.add_experimental_option("excludeSwitches", ['enable-automation'])

driver = webdriver.Chrome('/usr/local/bin/chromedriver', options=chrome_options)

driver.get('https://efun.toronto.ca/torontofun/Activities/ActivitiesCourseDetails.asp?aid=18830&cid=6455687')

# one method
wait = WebDriverWait(driver, 30)
add_button = wait.until(EC.element_to_be_clickable((By.LINK_TEXT, "Add")))
add_button.click()

# another method
# wait = WebDriverWait(driver, 30)
# wait.until(EC.element_to_be_clickable((By.LINK_TEXT, "Add"))).click()

введите описание изображения здесь

person Life is complex    schedule 17.02.2021

Чтобы щелкнуть элемент Добавить, вы можете использовать любой из следующих Стратегии поиска:

  • Использование CSS_SELECTOR:

    driver.get("https://efun.toronto.ca/torontofun/Activities/ActivitiesCourseDetails.asp?aid=18830&cid=6455687")
    driver.find_element(By.CSS_SELECTOR, "a[title='Add To My Cart'] > span").click()
    
  • Использование XPATH:

    driver.get("https://efun.toronto.ca/torontofun/Activities/ActivitiesCourseDetails.asp?aid=18830&cid=6455687")     
    driver.find_element(By.XPATH, "//span[text()='Add']").click()
    

Желаемый элемент - это элемент с поддержкой AJAX, поэтому в идеале, чтобы щелкнуть элемент, который вы необходимо вызвать WebDriverWait для element_to_be_clickable() и вы можете использовать любую из следующих стратегий поиска:

  • Использование CSS_SELECTOR:

    driver.get("https://efun.toronto.ca/torontofun/Activities/ActivitiesCourseDetails.asp?aid=18830&cid=6455687")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a[title='Add To My Cart'] > span"))).click()
    
  • Использование XPATH:

    driver.get("https://efun.toronto.ca/torontofun/Activities/ActivitiesCourseDetails.asp?aid=18830&cid=6455687")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Add']"))).click()
    
  • Примечание. Вам необходимо добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • Снимок браузера:

добавить

person DebanjanB    schedule 17.02.2021