Selenium Python Chrome webdriver非Headless模式下如何仅禁用CSS
Chrome Webdriver非Headless模式禁用CSS的可行方案
原有配置失效的原因
managed_default_content_settings属于企业策略托管配置键,本地非托管启动的Chrome实例默认不会优先读取该配置- Selenium 4+版本已弃用
webdriver.Chrome()的chrome_options传参写法,原有代码传入的配置实际上未被加载
方案一:修正原有prefs配置
替换原有代码为以下写法,无需额外拦截逻辑即可生效:
from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() # 值为2代表禁止加载CSS prefs = { "profile.default_content_settings.css": 2, "profile.managed_default_content_settings.css": 2 } chrome_options.add_experimental_option("prefs", prefs) # 关闭扩展避免覆盖自定义配置 chrome_options.add_argument("--disable-extensions") # Selenium 4+必须使用options关键字传参,旧版chrome_options参数已失效 driver = webdriver.Chrome(options=chrome_options)
方案二:CDP协议拦截CSS请求(版本兼容性更强)
该方法不受Chrome策略变动影响,跨版本稳定性更高,非Headless模式完全可用:
from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() driver = webdriver.Chrome(options=chrome_options) # 拦截所有外部CSS文件请求 driver.execute_cdp_cmd("Network.setBlockedURLs", {"urls": ["*.css", "*.css?*"]}) driver.execute_cdp_cmd("Network.enable", {})
可选:完全禁用所有内联/行内样式
上述配置仅会屏蔽外部CSS文件,如果需要连页面内的<style>标签、元素自带的style属性也一并禁用,可在DOM加载完成后执行如下JS:
driver.execute_script(""" document.querySelectorAll('style').forEach(el => el.remove()); document.querySelectorAll('*').forEach(el => el.removeAttribute('style')); document.querySelectorAll('link[rel="stylesheet"]').forEach(el => el.remove()); """)
内容的提问来源于stack exchange,提问作者A..
相关产品推荐
相关产品推荐

