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,尝试执行注册。
我正在尝试使用 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,尝试执行注册。