Estou tentando usar o Selenium para clicar no botão Aceitar tudo ou Rejeitar tudo em um pop-up de cookie para o site autotrader.co.uk , mas não consigo fazer o pop-up desaparecer por algum motivo.
Este é o pop-up:
e aqui está o html:
<button title="Reject All" aria-label="Reject All" class="message-component message-button no-children focusable sp_choice_type_13" style="opacity: 1; padding: 10px 5px; margin: 10px 5px; border-width: 2px; border-color: rgb(5, 52, 255); border-radius: 5px; border-style: solid; font-size: 14px; font-weight: 400; color: rgb(255, 255, 255); font-family: arial, helvetica, sans-serif; width: calc(35% - 20px); background: rgb(5, 52, 255);">Reject All</button>
O código que tentei é o seguinte:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
path_to_driver = r"C:\path_to_project\chromedriver.exe"
service = Service(executable_path=path_to_driver)
driver = webdriver.Chrome(service=service)
driver.get("https://www.autotrader.co.uk")
time.sleep(5)
WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.CLASS_NAME, 'message-component message-button no-children focusable sp_choice_type_13'))).click()
time.sleep(10)
driver.quit()
Alguém pode ajudar aqui?
Como você pode ver, a janela pop-up está incorporada dentro de um
<iframe>
Selenium. Primeiro, é necessário alternar o contexto do driver para esse iframe antes de tentar localizar ou interagir com quaisquer elementos contidos nele.aguarde até que o elemento iframe desejado esteja disponível para alternar para ele:
Observação : como o
id
atributo do iframe parece ser gerado dinamicamente, é recomendável localizar o iframe usando uma estratégia de correspondência parcial, comoCSS selector
ouXPath
com acontains()
função ou estratégia de correspondência parcial ( https://stackoverflow.com/a/56844649/11179336 )Veja como você pode fazer:
Ao usar vários nomes de classe no Selenium, você precisa usar um seletor CSS ou XPath em vez de By.CLASS_NAME. Então, aqui está:
Editar:
Não usei
XPath
porque, se eu abrir o site aqui (Índia), não aparece o pop-up de cookies. Siga o código a seguir, que corrigi comXPath
. VerifiqueXPath
o botão e altere para o original.Se o problema persistir, verifique se o conteúdo do cookie está em iframe. Em caso afirmativo, altere da seguinte forma: