如何在selenium-python中点击shadowbox内的Accept Cookies按钮
错误原因
- 执行查询脚本时,Cookie弹窗对应的Shadow DOM节点尚未完成渲染,
querySelector返回空值,最终拿到None对象调用click方法触发报错 - Shadow DOM内部元素返回到Python Selenium环境时,可能存在序列化兼容问题,也会导致返回结果为
None
修复方案
方案1:添加显式等待+在JS侧直接完成点击
无需将Shadow DOM元素返回至Python侧,同时加等待确保节点已加载:
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait driver = webdriver.Chrome('chromedriver') driver.get(r'https://www.studydrive.net/') # 最多等待10秒,确保Shadow Root容器已加载 WebDriverWait(driver, 10).until( lambda d: d.execute_script('return document.querySelector("#usercentrics-root") !== null') ) # 直接在JS内部执行点击操作 driver.execute_script(''' const root = document.querySelector('#usercentrics-root').shadowRoot; const acceptBtn = root.querySelector('button[aria-label="Accept All"]'); if (acceptBtn) acceptBtn.click(); ''')
方案2:调试确认选择器正确性
如果按上述方案仍无法触发点击,可执行以下脚本打印Shadow Root内所有按钮的属性,确认选择器是否匹配:
driver.execute_script(''' const root = document.querySelector('#usercentrics-root').shadowRoot; const allBtns = root.querySelectorAll('button'); allBtns.forEach(btn => { console.log('aria-label:', btn.getAttribute('aria-label'), '文本内容:', btn.textContent.trim()) }) ''')
执行后在浏览器控制台查看输出,替换成对应正确的属性值即可。
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

