Mark K
Mark K

Reputation: 9376

Chromedriver to pickup existing Chrome browser session in Python

I want to open several weblinks under a website in 1 browser (several tabs). The website requires login and password.

When login and password keyed in. it turns to a verification page, asks for the verification code sent to me by email.

I checked the email and key in verification code on the verification page. Login is successful.

The existing browser is in front of me.

However the codes are not picking it up, and open another tab as wanted. Seems a certain connection is lost.

How can I continue? (or as an alternative, how can Python to reuse the existing Chrome browser?)

The codes usually works well but comes to this case (login, enter verification code), it doesn't.

import os, time
from selenium.webdriver import ChromeOptions, Chrome
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

chromedriver = "C:\\Python27\\Scripts\\chromedriver.exe"
os.environ["webdriver.chrome.driver"] = chromedriver

opts = ChromeOptions()                                         # leave browser open after code
opts.add_experimental_option("detach", True)                   # leave browser open after code
opts.add_argument('disable-infobars')
driver = webdriver.Chrome(chromedriver, chrome_options=opts)  # leave browser open after code

driver.maximize_window()

verificationErrors = []
accept_next_alert = True

time.sleep(5)

base_url = "https://awebsite.com/"
driver.get(base_url)
window_0 = driver.window_handles[0]
driver.switch_to_window(window_0)
driver.find_element_by_id("username").clear()
driver.find_element_by_id("username").send_keys("username")
driver.find_element_by_id("password").clear()
driver.find_element_by_id("password").send_keys("password")
driver.find_element_by_id("Submit").click()

time.sleep(60)

driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + 't')
window_1 = driver.window_handles[1]
driver.switch_to_window(window_1)
time.sleep(3)
driver.get('https://anotherwebsite.com')
time.sleep(3)

sys.exit()

Upvotes: 2

Views: 2906

Answers (1)

Andersson
Andersson

Reputation: 52685

You can try below to perform some actions on two different pages/tabs:

# Handle base page
base_url = "https://awebsite.com/"
driver.get(base_url)
window_0 = driver.current_window_handle
...

# Handle new page
driver.execute_script('window.open("https://anotherwebsite.com");')
window_1 = [window for window in driver.window_handles if window != window_0][0]
driver.switch_to_window(window_1)
# driver.close() # To close new tab
...

# Switch back to base page
driver.switch_to_window(window_0)

Upvotes: 2

Related Questions