Selenium webdriver chrome,无法使用 CSS 选择器或 XPath 定位按钮

Selenium webdriver chrome, unable to locate button using CSS selector or XPath

我正在使用 python3 和 webdriver 加载此页面:

driver.get("https://epaper.handelsblatt.com")

一个 cookie-window 正在出现,我想找到并单击“Zustimmen”按钮将其关闭。以前我用ActionChains按TAB直到按钮被选中然后回车(不漂亮,但完成了工作)。现在 Chrome 正在跳过按钮(即使在手动使用 TAB 时)我提到这一点是因为它可能与我无法使用 selenium 定位按钮有关。

ActionChains(driver).send_keys(Keys.TAB *2, Keys.RETURN).perform() #close popup by two tabs and one enter 

因此尝试使用 CSS 选择器或 XPath 定位按钮。但是我做不到。

HTML 按钮代码:

<div class="message-component message-row" style="padding: 15px 0px; margin: 0px; border-width: 0px; border-color: rgb(0, 0, 0); border-radius: 0px; border-style: solid; width: calc(100% - 0px); height: auto; justify-content: center; align-items: center;"><button title="EINSTELLUNGEN" class="message-component message-button no-children focusable sp_choice_type_12" style="padding: 15px; margin: 10px 5px 10px 10px; border-width: 1px; border-color: rgb(102, 102, 102); border-radius: 0px; border-style: solid; font-size: 16px; font-weight: 500; color: rgb(102, 102, 102); font-family: arial, helvetica, sans-serif; width: calc(100% - 45px); background: rgb(255, 255, 255);">EINSTELLUNGEN</button><button title="ZUSTIMMEN" class="message-component message-button no-children focusable sp_choice_type_11" style="padding: 15px; margin: 10px 10px 10px 5px; border-width: 0px; border-color: rgb(0, 0, 0); border-radius: 0px; border-style: solid; font-size: 16px; font-weight: 500; color: rgb(255, 255, 255); font-family: arial, helvetica, sans-serif; width: calc(100% - 45px); background: rgb(239, 124, 0);">ZUSTIMMEN</button></div>

我尝试了 CSS 选择器:

cookie = driver.find_element_by_css_selector("#notice > div:nth-child(3) > div > div.message-component.message-row > button.message-component.message-button.no-children.focusable.sp_choice_type_11")

XPath:

cookie = driver.find_element_by_xpath("/html/body/div[2]/div[2]/div[2]/div/div[4]/div[2]/div/div[11]/div[1]")

我什至尝试用按钮的文本定位它。

cookie = driver.find_element_by_xpath('//button[text()="ZUSTIMMEN"]')

感谢任何帮助!

此元素位于 iframe 内。因此,在与该元素交互之前,您需要切换到该 iframe,否则它将无法工作。您可以在 dom 中看到标题为“iframe title”的 iframe 可用。

driver.get("https://epaper.handelsblatt.com/storefront/11")
WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"#sp_message_iframe_648626")))
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//button[@title='ZUSTIMMEN']"))).text)
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//button[@title='ZUSTIMMEN']"))).click()
sleep(10)
driver.quit()

进口:

from time import sleep
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC