Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用selenium加载Cookie并打开多个选项卡?_Python_Selenium_Cookies_Web Crawler - Fatal编程技术网

Python 如何使用selenium加载Cookie并打开多个选项卡?

Python 如何使用selenium加载Cookie并打开多个选项卡?,python,selenium,cookies,web-crawler,Python,Selenium,Cookies,Web Crawler,如果我向程序提供firefox配置文件的路径,它将打开多个窗口,但如果没有,它将打开多个选项卡。我需要它来打开多个选项卡。有什么想法吗 # 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\

如果我向程序提供firefox配置文件的路径,它将打开多个窗口,但如果没有,它将打开多个选项卡。我需要它来打开多个选项卡。有什么想法吗

# 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] +"');")

我使用此选项保存和加载Cookie:

# ===========================================================
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)
你需要获取站点,加载cookies,重新加载,保存cookies。第一次您必须手动接受cookies。在那之后,它应该被保存

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()
下次“接受cookies”不应该出现

在windows上打开chrome驱动程序的新选项卡对我来说很有用:

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

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

driver.close()

这就是我实现的方式,但似乎不起作用:S driver=webdriver.Firefox()driver.get(sites['site'][0])加载cookies(driver,'0')输入(“Enter”)保存cookies(driver,'0')范围内的I(size-1,0,-1):driver.execute_脚本(“window.open”(“+sites['site'][I]+');”)加载cookies(驱动程序,str(i))输入(“输入”)保存cookies(驱动程序,str(i))我必须打开多个站点,所以我一个接一个地打开它们,然后每次加载然后保存cookies,但第二次打开时它仍然要求接受它们。它不起作用,你是对的。我添加了一行额外的内容。驱动程序在加载cookies之前首先需要加载一个页面,然后才能加载cookies。如果你然后重新加载页面,我t具有所需的cookies,并且应该可以。当第二个驱动程序.get()时打开网站,它不会要求我接受cookies,但当我再次运行程序时,它不会打开cookies,因此我必须再次接受它们。你说的“它不会打开cookies”是什么意思?它们是否消失了?它们在我保存它们的文件夹中,但当我重新运行程序时,我仍然必须接受我以前接受的cookies。