You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Selenium WebDriver+Python打开本地HTML多标签并解决权限错误

解决Selenium在Firefox中打开本地HTML文件新标签的权限错误

这个错误是Firefox的安全策略在搞鬼——它默认会阻止JavaScript脚本访问file://协议下的其他本地文件,避免潜在的安全风险。下面给你几个实用的解决办法:

方法1:修改Firefox的安全配置

直接在初始化WebDriver时添加偏好设置,关闭file协议的跨文件访问限制,这样JS就能正常打开新标签加载本地文件了:

from selenium import webdriver
from selenium.webdriver.firefox.options import Options

# 配置Firefox选项
firefox_options = Options()
# 禁用file协议的严格源策略限制
firefox_options.set_preference('security.fileuri.strict_origin_policy', False)

firefox_path = r'C:\geckodriver.exe'
driver = webdriver.Firefox(executable_path=firefox_path, options=firefox_options)

page1 = "file://<path for 1.html>"  # 注意路径用正斜杠或原始字符串,比如r"file://C:/test/1.html"
page2 = "file://<path for 2.html>"

driver.get(page1)
# 现在执行JS打开新标签不会报错
driver.execute_script(f'''window.open("{page2}", "_blank");''')

方法2:用键盘快捷键+标签切换绕开JS限制

如果不想修改浏览器安全设置,可以用Selenium模拟键盘操作开新标签,再切换标签后直接加载第二个文件——这种方式是浏览器主动加载,不是脚本触发的,不会被安全策略拦截:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

firefox_path = r'C:\geckodriver.exe'
driver = webdriver.Firefox(executable_path=firefox_path)

page1 = "file://<path for 1.html>"
page2 = "file://<path for 2.html>"

# 打开第一个页面
driver.get(page1)
time.sleep(1)  # 等待页面加载完成,避免操作过早失效

# 模拟Ctrl+T打开新标签
driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + 't')
# 切换到新创建的标签(window_handles列表的第二个元素)
driver.switch_to.window(driver.window_handles[1])
# 加载第二个本地文件
driver.get(page2)

方法3:用本地HTTP服务器托管文件(最推荐)

把本地HTML文件放到HTTP服务器里,用http://localhost访问,这样就和普通网页环境一致,完全没有file协议的限制,还能正常处理HTML依赖的外部资源(比如CSS、JS):

  1. 打开命令行,导航到你的HTML文件所在文件夹:
cd C:\path\to\your\html\files
  1. 启动Python内置HTTP服务器:
# Python 3版本
python -m http.server 8000
# Python 2版本
python -m SimpleHTTPServer 8000
  1. 在Selenium中使用HTTP路径访问:
from selenium import webdriver

firefox_path = r'C:\geckodriver.exe'
driver = webdriver.Firefox(executable_path=firefox_path)

page1 = "http://localhost:8000/1.html"
page2 = "http://localhost:8000/2.html"

driver.get(page1)
# 直接用JS打开新标签,完全不受限制
driver.execute_script(f'''window.open("{page2}", "_blank");''')

内容的提问来源于stack exchange,提问作者abhi1610

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:41:21