webbrowser not opening new windows

浪尽此生 提交于 2020-05-29 07:34:15

问题


I just got a new job working remotely and I have to start my day by opening a bunch of pages and logging into them. I would love to automate this process as it can be kind of tedious. I would like to leave my personal browsing window alone and open a new window with all of the pages I need. Here is the gist of what I'm trying to do:

import webbrowser
first = True
chromePath = 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe %s'
URLS = ("first page", "second page", "third page")
for url in URLS:
    if first:
        webbrowser.get(chromepPath).open(url)
        first = False
    else:
        webbrowser.open(url, new=2)

For some reason this code is just opening new tabs in my current browser, which is basically the opposite of what I want it to be doing. What is going on?


回答1:


I ran into a similar issue. I just used os.system() to open a new instance of chrome. Also I registered the chrome.exe as a new browser using:

#register the browser
chrome_path = "C:\\Users\\cj9250\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe"
webbrowser.register('chrome', None,webbrowser.BackgroundBrowser(chrome_path),1)

There is guidance in other posts on using .get to call the path to chrome. Despite trying this method and many other different methods, I just could not get chrome to open a new window and session.

Finally I came to os.system to open a new instance of chrome. So for your code it would look like this:

import webbrowser
import os #use for new instance of chrome

#urls I want to open in array
URLS = (
        "first page", 
        "second page", 
        "third page"
        )

#register the browser
chrome_path = "YOUR PATH TO CHROME\\chrome.exe" #note the double \ syntax
webbrowser.register('chrome', None,webbrowser.BackgroundBrowser(chrome_path),1)

#open new instance of chrome
os.system(r'YOUR PATH TO CHROME\chrome.exe')

#open each url
for url in URLS:
    webbrowser.get('chrome').open(url)

Looking at what you're trying to do, I think that Selenium would be much better suited. I too use a web application daily for work, and I took the time to run through some Selenium tutorials. It has been much simpler for automation.




回答2:


I don't have Chrome installed, but there seem to be multiple problems:

  1. According to the docs, webbrowser.get expects the name of the browser, not the path.
  2. You should save the return value of webbrowser.get() and use it to open the remaining urls.

import webbrowser
URLS = ("first page", "second page", "third page")
browser= webbrowser.get('chrome')
first= True
for url in URLS:
    if first:
        browser.open_new(url)
        first = False
    else:
        browser.open_new_tab(url)



回答3:


May be too late, but probably will help others.

As per the docs, you should try with new=1

webbrowser.open(url, new=0, autoraise=True)

Display url using the default browser. If new is 0, the url is opened in the same browser window if possible. If new is 1, a new browser window is opened if possible. If new is 2, a new browser page (“tab”) is opened if possible. If autoraise is True, the window is raised if possible (note that under many window managers this will occur regardless of the setting of this variable).

Doc link: Webbrowser docs




回答4:


The solution is much simpler. Assuming that you have standard path ubication for chrome.exe (and your OS is windows), this is the solution (it opens a new chrome window even if you already had one previously opened). subprocess instead of os.system is mandatory bc otherwise it doesn't open a new chrome window if had one already opened. regards

import subprocess
urL         ='https://www.google.com'
chrome_path ="C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe"
child       = subprocess.Popen(chrome_path, shell=True)


来源:https://stackoverflow.com/questions/38574629/webbrowser-not-opening-new-windows

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!