如何阻止Selenium Python中AdBlock扩展自动打开新标签页?
阻止Selenium中AdBlock扩展自动打开新标签页
我用以下代码给Chrome驱动加载AdBlock扩展,代码能正常运行且扩展加载成功,但每次启动都会自动打开AdBlock的欢迎新标签页,怎么阻止这个行为?
from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from webdriver_manager.chrome import ChromeDriverManager def navigate_to_url(url): options = Options() options.add_argument('start-maximized') options.add_extension('adblock.crx') options.add_experimental_option('detach', True) options.add_experimental_option('excludeSwitches', ['enable-logging']) driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options) driver.get(url) return driver if __name__ == '__main__': driver = navigate_to_url('https://www.google.com') print(driver.current_url)
解决方案
1. 使用已配置好的AdBlock扩展文件
AdBlock弹出欢迎页是首次加载的默认行为,你可以先在本地Chrome浏览器安装AdBlock,完成首次设置(关闭欢迎页提示、配置好偏好),再导出该扩展的crx文件替换当前的adblock.crx:
- 打开Chrome的
chrome://extensions/页面,开启「开发者模式」 - 找到已安装的AdBlock,点击「打包扩展程序」
- 选择扩展所在的本地文件夹(可通过扩展详情页的「加载已解压的扩展程序」路径定位)
- 生成的crx文件就是跳过了欢迎页的版本
2. 通过Chrome偏好禁用首次运行弹窗
在ChromeOptions中添加用户偏好,强制关闭AdBlock的首次运行提示:
options = Options() options.add_argument('start-maximized') # 添加偏好设置,禁用AdBlock欢迎页 options.add_experimental_option("prefs", { "extensions.adblockplus.settings": { "show_first_run_page": False, "show_statsinicon": False } }) options.add_extension('adblock.crx') options.add_experimental_option('detach', True) options.add_experimental_option('excludeSwitches', ['enable-logging'])
注:不同AdBlock版本的偏好键可能有差异,如果上述配置不生效,可通过Chrome的chrome://extensions/查看AdBlock的存储数据,找到对应的偏好键。
3. 加载扩展后自动关闭多余标签页
如果前两种方法不生效,可以在驱动初始化后,检查并关闭自动弹出的标签页:
def navigate_to_url(url): options = Options() options.add_argument('start-maximized') options.add_extension('adblock.crx') options.add_experimental_option('detach', True) options.add_experimental_option('excludeSwitches', ['enable-logging']) driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options) # 短暂等待标签页加载 driver.implicitly_wait(2) # 保留主标签页,关闭其余标签页 main_window = driver.current_window_handle for window in driver.window_handles: if window != main_window: driver.switch_to.window(window) driver.close() driver.switch_to.window(main_window) driver.get(url) return driver
内容的提问来源于stack exchange,提问作者YasserKhalil
相关产品推荐
相关产品推荐

