Как загрузить куки и открыть несколько вкладок с селеном? - PullRequest
0 голосов
/ 08 апреля 2020

Если я укажу путь к профилю firefox для программы, он откроет несколько windows, но без него откроется несколько вкладок. Мне нужно, чтобы открыть несколько вкладок. Есть идеи?

# driver = webdriver.Firefox(firefox_profile = r"C:\Users\Aron\AppData\Roaming\Mozilla\Firefox\Profiles\azz050gk.default-release")
driver = webdriver.Firefox(r'C:\Users\Aron\AppData\Roaming\Mozilla\Firefox\Profiles\azz050gk.default-release')
driver.get(sites['site'][0])
for i in range(size - 1,0, -1):
    driver.execute_script("window.open('" + sites['site'][i] +"');")

1 Ответ

1 голос
/ 08 апреля 2020

Я использую это для сохранения и загрузки куки:

# ===========================================================
def save_cookies(driver, site_name):
    cookies = driver.get_cookies()

    for cookie in cookies:
        if isinstance(cookie.get('expiry'), float):
            cookie['expiry'] = int(cookie['expiry'])
    pickle.dump(cookies, open(site_name + ".pkl", "wb"))


# =================================================================================
def load_cookies(driver, site_name):
    if not os.path.isfile(site_name + ".pkl"):
        return

    cookies = pickle.load(open(site_name + ".pkl", "rb"))
    for cookie in cookies:
        driver.add_cookie(cookie)

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

from selenium import webdriver
import os
import pickle
import time

# ==============================================================
def save_cookies(driver, site_name):
    cookies = driver.get_cookies()

    for cookie in cookies:
        if isinstance(cookie.get('expiry'), float):
            cookie['expiry'] = int(cookie['expiry'])
    pickle.dump(cookies, open(site_name + ".pkl", "wb"))


# ===============================================================
def load_cookies(driver, site_name):
    if not os.path.isfile(site_name + ".pkl"):
        return

    cookies = pickle.load(open(site_name + ".pkl", "rb"))
    for cookie in cookies:
        driver.add_cookie(cookie)


# ==========================================================

# open the web driver ----------------------------------
project_dir = os.path.split(os.getcwd())[0] + '/../'
driver = webdriver.Chrome(executable_path=os.path.join(project_dir, 'chromedriver.exe'))

site_url = 'https://bol.com'
site_name = 'bol.com'

driver.get(site_url)  # site must be loaded before cookies can be loaded
load_cookies(driver, site_name)
driver.get(site_url)  # now the site is reloaded using the cookies

# get some time to manually accept the cookies the first run
time.sleep(10)

# do your scraping 

save_cookies(driver, site_name)

driver.close()

В следующий раз не будет отображаться «принимать куки».

Это работает для меня, открывая новую вкладку для драйвера chrome на windows:

driver.get("http://www.google.com/")

#open tab
driver.execute_script('''window.open("http://bings.com","_blank");''')

driver.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...