Открытый веб-браузер Python с такими закладками, как www.something.com/file.html#top - PullRequest
2 голосов
/ 16 июня 2011

Я использую файл hmtl в качестве справочного документа для моей программы и очень хотел бы иметь возможность открыть файл в определенный момент. я предполагал, что смогу сделать это, используя встроенный модуль веб-браузера, указав URL с закладкой.

это мое имя файла html: help.html я предполагал, что смогу использовать: help.html # top

это код, который я использую для открытия файла, он отлично работает:

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

и это код, который я пытался использовать для открытия в определенной точке, которую ie9, по-видимому, не может отобразить (не уверен, почему он пытается загрузить в ie9, так как chrome - мой браузер по умолчанию, а рабочий выше загружает в хром):

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

есть идеи, ребята?

Ответы [ 2 ]

3 голосов
/ 16 июня 2011

webbrowser.open() вызывает браузер из командной строки. Таким образом, вы могли бы попытаться сделать это самостоятельно в первую очередь. Если это не сработает, скорее всего, ваш браузер просто не поддерживает это для локальных файлов или чего-то еще.

Например, в Ubuntu + Firefox webbrowser.open() делает то, что вы просите. (но, как сказал Дейв Уэбб в своем ответе, вы должны предоставить file: URL, а не просто имя файла). (на данный момент не на Windows, поэтому не проверял там)

Что касается того, почему он не загружает Chrome, но ie9: (вы можете посмотреть в коде webbrowser.py самостоятельно, если хотите) Я думаю, что он действительно пытается использовать ваш браузер по умолчанию, выполнив os.startfile(url). Что происходит, когда вы дважды щелкаете файл help.html, или когда вы просто набираете help.html (при необходимости измените путь) в командной строке? Он должен сделать то же самое.

РЕДАКТИРОВАТЬ:

Кажется, что он не всегда использует командную строку. В Windows при попытке использовать браузер по умолчанию он использует os.startfile(), который, в свою очередь, использует api win32 ShellExecute. ShellExecute может использоваться для выполнения определенных действий с файлом, папкой или URL-адресом, таких как «открыть», «изменить» или «распечатать» в приложении по умолчанию. В этом случае ShellExecute просят «открыть» URL.

Однако, похоже, что ShellExecute игнорирует идентификатор фрагмента (часть после #) при открытии file: URL. Как ни странно, это не так с http: URL. Предположительно, file: url сначала преобразуется в простое имя файла.

Кажется, вы мало что можете с этим поделать, кроме:

  • напишите что-нибудь, что "делает правильно" самостоятельно (и зарегистрируйте это как контроллер браузера для модуля webbrowser, и используйте webbrowser.get(), чтобы получить свой контроллер, см. docs )
  • как делают многие приложения: настройте браузер, который вы хотите использовать (или сделайте так, чтобы ваши пользователи могли это сделать). Самый простой способ - установить переменную окружения BROWSER (см. документация модуля веб-браузера )
  • подайте файл через http-сервер localhost и откройте 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 голос
/ 16 июня 2011

Я думаю, webbrowser ожидает URL, поэтому вы пробовали что-то вроде:

webbrowser.open("file://c:/path/to/files/html.html#2.1.0")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...