Reopen same browser window using selenium python a

2019-05-28 19:12发布

Hey i'm trying to make an automatic program to send Whatsapp messages. I'm currently using python, Firefox and selenium to achieve that. The problem is that every time i'm calling driver.get(url) it opens a new instance of the firefox browser, blank with no memories of the last run. It makes me scan the bar code every time I run it.

from selenium import webdriver
from selenium.webdriver.firefox.webdriver import FirefoxProfile

cp_profile = webdriver.FirefoxProfile("/Users/Hodai/AppData/Roaming/Mozilla/Firefox/Profiles/v27qat5d.whatsapp_profile")
driver = webdriver.Firefox(executable_path="/Users/Hodai/Desktop/geckodriver",firefox_profile=cp_profile)
driver.get('http://web.whatsapp.com')

#Scan the code before proceeding further
input('Enter anything after scanning QR code')

I've tried to use profile but it seems like it has no affect.

cp_profile = webdriver.FirefoxProfile("/Users/Hodai/AppData/Roaming/Mozilla/Firefox/Profiles/v27qat5d.whatsapp_profile")
driver = webdriver.Firefox(executable_path="/Users/Hodai/Desktop/geckodriver",firefox_profile=cp_profile)

3条回答
Explosion°爆炸
2楼-- · 2019-05-28 19:58

It should not be like that. It only opens the new window when initialized with new variable or the program starts again. Here is the code for chrome. It doesn't matter how many times you call driver.get(url) it would open the url in the same browser window

from selenium import webdriver
import selenium.webdriver.support.ui as ui
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome(executable_path=r"C:\new\chromedriver.exe")
driver.get('https://www.olx.com.pk/lahore/apple/q-iphone-6s/?search%5Bfilter_float_price%3Afrom%5D=40000&search%5Bfilter_float_price%3Ato%5D=55000')
time.sleep(10)
driver.get('https://www.olx.com.pk/lahore/apple/q-iphone-6s/?search%5Bfilter_float_price%3Afrom%5D=40000&search%5Bfilter_float_price%3Ato%5D=55000')
time.sleep(10)
driver.get('https://www.olx.com.pk/lahore/apple/q-iphone-6s/?search%5Bfilter_float_price%3Afrom%5D=40000&search%5Bfilter_float_price%3Ato%5D=55000')
time.sleep(10)

Let me know if the issue is resolved or you are trying to do something else.

查看更多
闹够了就滚
3楼-- · 2019-05-28 19:59

At the end I used chromedriver to achive my goal. I tried cookies with pickle but it was a bit tricky because it remembered the cookies just for the same domain. So I used user data for chrome. now it works like a charm. thank you all.

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

options = Options()
options.add_argument("user-data-dir=C:/Users/Designer1/AppData/Local/Google/Chrome/User Data/Profile 1")
driver = webdriver.Chrome(chrome_options=options,executable_path="C:\webdrivers\chromedriver.exe")
查看更多
我欲成王,谁敢阻挡
4楼-- · 2019-05-28 20:06

The easiest way I think is to save your cookies after scanned the qrcode and push them to Selenium manually.

# Load page to be able to set cookies
driver.get('http://web.whatsapp.com')

# Set saved cookies
cookies = {'name1': 'value1', 'name2', 'value2'}
for name in cookies:
    driver.add_cookie({
        'name': name,
        'value': cookies[name],
    })

# Load page using cookies
driver.get('http://web.whatsapp.com')

To get your cookies you can use the console (F12), Network tab, right click on the request, Copy => Copy Request Headers.

查看更多
登录 后发表回答