#python #selenium #selenium-webdriver #seleniumwire
Вопрос:
Я новичок в python и selenium, и мне нужна помощь. Я не могу принять файл cookie в iframe
Кто-нибудь может мне помочь, пожалуйста?
Спасибо
from selenium.webdriver.firefox.options import Options
from seleniumwire import webdriver
options = Options()
options.binary_location = r'C:\Program Files\Mozilla Firefox\firefox.exe'
driver = webdriver.Firefox(executable_path=r'C:\geckodriver.exe', firefox_options=options)
driver.get('https://autoscout24.de/')
time.sleep(5)
# go to iframe accept cookies
driver.switch_to.frame("gdpr-consent-notice")
driver.find_element_by_css_selector("button[class='mat-focus-indicator solo-button mat-button mat-button-base mat-raised-button cdk-focused cdk-mouse-focused'] div[class='action-wrapper']").cick()
# back to previous frame
driver.switch_to.parent_frame()
time.sleep(5)
driver, quit()
Ответ №1:
Я вижу, что идентификатор уникален, тогда вам вообще не нужен CSS Selector
.
Вы должны вызвать явное ожидание для переключения iframe
.
Они позволяют вашему коду останавливать выполнение программы или замораживать поток до тех пор, пока условие, которое вы передадите, не разрешится. Условие вызывается с определенной частотой до тех пор, пока не истечет время ожидания. Это означает, что до тех пор, пока условие возвращает ложное значение, оно будет продолжать пытаться и ждать.
Код :
driver = webdriver.Firefox(executable_path=r'C:\geckodriver.exe', firefox_options=options)
driver.maximize_window()
wait = WebDriverWait(driver, 20)
driver.get('https://autoscout24.de/')
wait.until(EC.frame_to_be_available_and_switch_to_it((By.ID, "gdpr-consent-notice")))
button = driver.find_element_by_id('save')
driver.execute_script("arguments[0].click();", button)
# back to previous frame
driver.switch_to.parent_frame()
time.sleep(5)
Импорт :
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC