#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