Digital Farmer
Digital Farmer

Reputation: 2107

Opening a new unfocused tab in Chrome or Firefox with Python on Windows OS

My OS → Microsoft Windows 11

GOOGLE CHROME:

I have Google website open and I want to open the Stack Overflow website in a new tab but the screen keeps showing the Google website, like this:

enter image description here

My first attempt was trying it with the webbrowser module and its autoraise argument:

sof = 'https://stackoverflow.com'

webbrowser.open(sof, new=0, autoraise=False)

webbrowser.open(sof, new=2, autoraise=False)

webbrowser.open_new_tab(sof)

None of the above options caused the tab in Chrome to open in the background keeping focus on the tab that was already open.

So I went for another try using subprocess and its getoutput function:

r = subprocess.getoutput(f"google-chrome-stable https://stackoverflow.com")
r

That option didn't even open a new tab in my browser.




MOZILLA FIREFOX:

enter image description here

My attempt was trying it with the webbrowser module and its autoraise argument (As my default browser is different I need to set the browser):

sof = 'https://stackoverflow.com'
webbrowser.register('firefox',
                    None,
                    webbrowser.BackgroundBrowser("C://Program Files//Mozilla Firefox//firefox.exe"))
webbrowser.get('firefox').open(sof, new=0, autoraise=False)



In neither of the two I managed to make this functionality work.

How should I proceed?

Upvotes: 3

Views: 1381

Answers (4)

Tsefo
Tsefo

Reputation: 409

Simpliest is to switch to -1 window_handles with chromedriver

from selenium import webdriver
driver = webdriver.Chrome('chrome/driver/path')
driver.switch_to.window(driver.window_handles[-1])

Upvotes: -1

Yarin_007
Yarin_007

Reputation: 1598

Are you familiar with CDP and Selenium?

Option A:

CDP Via Selenium Controlled browser:

from selenium import webdriver
driver = webdriver.Chrome('/path/bin/chromedriver')

driver.get("https://example.com/")

driver.execute_cdp_cmd(cmd="Target.createTarget",cmd_args={"url": 'https://stackoverflow.com/', "background": True})

"background": True is key

EDIT:

On linux the browser doesn't close, at least for me. If it dies when the code dies, try the following:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

CHROME_DRIVER_PATH = '/bin/chromedriver'

chrome_options = Options()
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option("detach", True)
driver = webdriver.Chrome(CHROME_DRIVER_PATH, chrome_options=chrome_options)

driver.get("https://example.com/")

driver.execute_cdp_cmd(cmd="Target.createTarget",cmd_args={"url": 'https://stackoverflow.com/', "background": True})


Option B:

Manually run chrome with a debug port (via cmd, subprocess.popen or anything else)

chrome.exe --remote-debugging-port=4455

and then either use a python CDP Client such as trio

or tell selenium to use your existing browser:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:4455")
# Change chrome driver path accordingly
CHROME_DRIVER_PATH= r"C:\chromedriver.exe"
driver = webdriver.Chrome(CHROME_DRIVER_PATH, chrome_options=chrome_options)

driver.get("https://example.com/")

driver.execute_cdp_cmd(cmd="Target.createTarget",cmd_args={"url": 'https://stackoverflow.com/', "background": True})

Upvotes: 1

Hieu Le Chi
Hieu Le Chi

Reputation: 11

maybe you can try to stimulate the keyboard using pynput library, then stimulating crtl + Tab to change to the new open website?

*edit: to open the previous tab, press crtl + shift + tab

import webbrowser, time
from pynput.keyboard import Key,Controller
keyboard = Controller()
webbrowser.open("https://www.youtube.com/")
time.sleep(3)
keyboard.press(Key.ctrl)
keyboard.press(Key.shift)
keyboard.press(Key.tab)
keyboard.release(Key.ctrl)
keyboard.release(Key.shift)
keyboard.release(Key.tab)

Upvotes: 1

HeyMan
HeyMan

Reputation: 1855

Chrome:

I don't think it is feasible (at least not w/ chrome). See this StackExchange answer for details. Especially the mentioned bug that most likely will never get fixed.

Firefox:

Same here, did some research and the only solution to get it to work is changing the config option 'browser.tabs.loadDivertedInBackground' to 'true'

launch background tab like this (or from py with os or subprocess module):

"C:\Program Files\Mozilla Firefox\firefox.exe" -new-tab "https://stackoverflow.com/"

See https://stackoverflow.com/a/2276679/2606766. But again I don't think this solves your problem, does it?

Upvotes: 3

Related Questions