Python webrowser打开URL,带有www.something.com/file.html#top等书签

时间:2011-06-16 15:51:23

标签: python html browser

我正在使用hmtl文件作为我程序的帮助文档,并且非常希望能够在特定点打开该文件。我假设我可以使用内置的webbrowser模块通过指定带书签的URL来完成此操作。

这是我的html文件名:help.html 我以为我可以使用:help.html #top

这是我用来打开文件的代码,这很好用:

webbrowser.open("Files\help.html")

这是我一直试图在特定点打开的代码,ie9显然无法显示(不知道为什么它试图加载ie9因为chrome是我的默认浏览器,并且上面的工作加载了铬):

webbrowser.open("Files\help.html#2.1.0")

任何想法的人?

2 个答案:

答案 0 :(得分:3)

webbrowser.open()从命令行调用浏览器。所以你可能先尝试自己做。如果这不起作用,那么您的浏览器可能不支持本地文件或其他内容。

以Ubuntu + Firefox为例,webbrowser.open()可以满足您的要求。 (但是 - 正如Dave Webb在他的回答中所说的那样 - 你必须提供file:网址,而不仅仅是文件名。 (目前不在Windows上,所以没有在那里检查)

至于为什么它不加载chrome而是ie9 :(如果你愿意,你可以自己查看webbrowser.py代码)我认为它确实尝试使用你的默认webbrowser,通过os.startfile(url)。当您在命令行中键入help.html(根据需要调整路径)时双击help.html文件会发生什么?它也应该这样做。

编辑:

似乎并不总是使用命令行。在Windows上,当尝试使用默认浏览器时,它使用os.startfile(),后者又使用win32 ShellExecute api。 ShellExecute可用于对文件,文件夹或URL执行某些操作,例如“打开”,“编辑”或“打印”及其默认应用程序。在这种情况下,系统会要求ShellExecute“打开”该网址。

但是,ShellExecute似乎在打开#网址时忽略了片段标识符(file:之后的部分)。奇怪的是,http:网址不是这种情况。据推测,file: url最初只是转换为普通文件名。

除了:

之外,你几乎无能为力
  • 自己写一些“做正确的事”(并将其注册为webbrowser模块的浏览器控制器,并使用webbrowser.get()获取控制器,请参阅docs)< / LI>
  • 尽可能多的应用程序:配置您要使用的浏览器(或让您的用户可以这样做)。最简单的方法是设置BROWSER环境变量(请参阅webbrowser module docs
  • 通过localhost http服务器提供文件,然后打开http url,这将是“http://。”http:// localhost:8000 / help.html#2.1.0“。( SimpleHttpServer模块可能会派上用场)

或者,最简单的方法:因为您似乎在Windows上:只是尝试专门打开Internet Explorer:

  try:
      browser = webbrowser.get('c:\\Program Files\\Internet Explorer\\IEXPLORE.EXE')
  except Webbrowser.Error:
      browser = webbrowser.get()
  browser.open(url)

(这将回退到使用默认值,因此您的代码仍可在其他平台上运行)

答案 1 :(得分:1)