Selenium Error: Element not interactable (coockie and other pop up)

Selenium Error: Element not interactable (coockie and other pop up)

我正在尝试使用 selenium 按下按钮,因为之后我需要检查网站的完整 html。这是我正在使用的代码:

driver = webdriver.Chrome()
driver.get('https://www.quattroruote.it/listino/audi/a4-allroad')
time.sleep(10)
html = driver.find_element_by_id('btnallestimenti')
html.click()

但是我得到这个错误: selenium.common.exceptions.ElementNotInteractableException:消息:元素不可交互

当页面打开时,会显示 cookie 和其他内容,有没有办法阻止所有这些,以便我可以处理 html?

非常感谢!

如您所见,“cookies”横幅本身就是一个 HTML 元素,它包含一个可以单击的“关闭”(“Chiudi”)按钮。

如果您检查页面源代码,您会发现与该按钮相关的代码:

<button type="button" class="iubenda-cs-close-btn" tabindex="0" role="button" aria-pressed="false" style="font-size:16px!important;">Chiudi</button>

您的脚本需要修改为通过可见文本搜索元素(使用 XPath)并单击它以关闭横幅:

close_button = driver.find_element_by_xpath("//*[text()='Chiudi']")

close_button.click()

我可以看到这种横幅出现了 2 次(一次用于 cookie,一次用于“Informativa”),但是一旦您点击它,您就会被重定向到正确的页面。

当然,您需要测试脚本并根据页面行为进行调整。

此外,请注意,每次页面因开发人员更改而更改时,您的脚本都会中断,您将需要重新调整它。

编辑

在这里发布完整的代码,尝试使用它并从这里继续:

import time
from selenium.webdriver import Chrome

driver = Chrome()

driver.get("https://www.quattroruote.it/listino/audi/a4-allroad")
time.sleep(6)

driver.find_element_by_xpath("//button[text()='Accetta']").click()
time.sleep(6)

driver.switch_to.frame("promo-premium-iframe")
driver.find_element_by_xpath("//a[normalize-space()='Non sono interessato']").click()
time.sleep(6)

driver.switch_to.default_content()

driver.find_element_by_id("btnallestimenti").click()

input()

您可以尝试接受cookie并继续下一步,检查下面的代码行。

options = Options()
options.add_argument("--disable-notifications")


driver = webdriver.Chrome(options=options,"ChromeDriver_Path")
driver.maximize_window()
driver.get('https://www.quattroruote.it/listino/audi/a4-allroad')
sleep(10)

cookie_btn = driver.find_element_by_xpath("//button[text()='Accetta']")
cookie_btn.click()
sleep(3)

WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"promo-premium-iframe")))
register_btn = driver.find_element_by_xpath("//a[normalize-space()='Accedi o Registrati']")
register_btn.click()

iframe 可用所以刚切换到 iframe,尝试执行注册。