Не удается щелкнуть вспомогательную кнопку во всплывающем окне

#python #selenium

#python #селен

Вопрос:

У меня проблема с selenium:

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

     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
    from selenium.webdriver.firefox.options import Options

    # Webdriver
    browser = webdriver.Chrome('C:\Users\zlell\PycharmProjects\PyroLello\Userbot\chromedriver.exe')
    browser.get("https://www.eventbrite.com/e/120621788015")

    # This button originates a pop-up
    python_button = browser.find_element_by_xpath('//*[@id="eventbrite-widget-modal-trigger-120621788015"]')

    # Click
    python_button.click()

    # The pop-up with the new button appears

    # Try to find the button included in the pop-up - Doesn't work
    python_button_2 = browser.find_element_by_css_selector("button.eds-btn.eds-btn--button.eds-btn--fill")

    # Click - Doesn't Work
    python_button_2.click()
  

Ошибка:

 // TRACEBACK:
Message: no such element: Unable to locate element: {"method":"css selector","selector":"button.eds-btn.eds-btn--butt
on.eds-btn--fill"}
 (Session info: chrome=86.0.4240.111)
Traceback (most recent call last):
 File "C:UserszlellAppDataLocalPackagesPythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0LocalCachelocal-pack
agesPython38site-packagespyrogramdispatcher.py", line 208, in handler_worker
   await handler.callback(self.client, *args)
 File "C:userszlellPycharmProjectsPyroLelloUserbotpyro.py", line 318, in test
   python_button_2 = browser.find_element_by_css_selector("button.eds-btn.eds-btn--button.eds-btn--fill")
 File "C:UserszlellAppDataLocalPackagesPythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0LocalCachelocal-pack
agesPython38site-packagesseleniumwebdriverremotewebdriver.py", line 598, in find_element_by_css_selector
   return self.find_element(by=By.CSS_SELECTOR, value=css_selector)
 File "C:UserszlellAppDataLocalPackagesPythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0LocalCachelocal-pack
agesPython38site-packagesseleniumwebdriverremotewebdriver.py", line 976, in find_element
   return self.execute(Command.FIND_ELEMENT, {
 File "C:UserszlellAppDataLocalPackagesPythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0LocalCachelocal-pack
agesPython38site-packagesseleniumwebdriverremotewebdriver.py", line 321, in execute
   self.error_handler.check_response(response)
 File "C:UserszlellAppDataLocalPackagesPythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0LocalCachelocal-pack
agesPython38site-packagesseleniumwebdriverremoteerrorhandler.py", line 242, in check_response
   raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css
selector","selector":"button.eds-btn.eds-btn--button.eds-btn--fill"}
 (Session info: chrome=86.0.4240.111)
  

Вторая кнопка — включена во всплывающее окно:

Вторая кнопка - включена во всплывающее окно

Комментарии:

1. я думаю, вы используете неправильный селектор. вы уверены, что селектор css должен быть похож на button.class1.class2.class3?

2. Я уже пробовал использовать: — XPath, — Class, — CSS Селектор

3. Используйте ожидание webdriver между щелчками. А также перейти в iframe.

4. Не могли бы вы привести пример?

Ответ №1:

Добавьте ожидание после загрузки страницы. Возьмите iframe и переключитесь на него.

 iframe = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.TAG_NAME, "iframe")))
browser.switch_to.frame(iframe)
python_button_2 =WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "button.eds-btn.eds-btn--button.eds-btn--fill")))
  

Импорт

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