selenium保存浏览器cookie并使用

## 记录一次自己使用selenium获取浏览器的cookies保存,并使用cookies实现免密登录

在遇到无法正常拿到登录接口时,可以尝试我这种操作!!

webdriver.Chrome().get_cookies() 获取的cookies 是列表类型,是由字典组成的list.字典中包含 domain,name,value等信息。主要需要的是每一个cookies 内的name,value 项,其他项相同

话不多说,直接上代码:

"""练习selenium获取cookies后保存并使用"""

import os
import pickle
import time
import pprint
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

chromeOptions = webdriver.ChromeOptions()
chromeOptions.add_argument('--proxy-server=http://11.239.249.42:51201')
driver = webdriver.Chrome(chrome_options=chromeOptions)
wait = WebDriverWait(driver,6)
driver.maximize_window()

class Cookies_operation:
"""封装一个方法,以便以后调用"""
    def getCookies(self):
    """获取cookies并保存到一个文件中"""
        #get logion taobap cookies
        url = "www.taobao.com" #这里是不用来验证的地址
        driver.get('https://login.taobao.com/member/login.jhtml') #这是用来登录的地址
        if True:
            print("plase login in 淘宝")
            time.sleep(5)
            #下面为登录步骤,可自己去操作自己的网站
            # driver.find_element_by_xpath('//div[@id="u1"]/a[@name="tj_login"]').click()
            # time.sleep(2)
            # driver.find_element_by_id("TANGRAM__PSP_10__footerULoginBtn").click()
            WebDriverWait(driver, 3).until(EC.visibility_of_element_located((By.ID, 'account')))
            driver.find_element_by_id("account").send_keys("user")
            WebDriverWait(driver, 3).until(EC.visibility_of_element_located((By.ID,'password')))
            driver.find_element_by_id("password").send_keys("password")
            driver.find_element_by_xpath('//button[text()="登 录"]').click()
            # time.sleep(6)           WebDriverWait(driver,6).until(EC.visibility_of_element_located((By.XPATH,'//button[text()="管理模块"]')))
            #if login in successfully,url jump to
            while driver.current_url == url:
                Cookies = driver.get_cookies()
                pprint.pprint(Cookies)
                driver.quit()
                cookies = {}
                for itme in Cookies:
                    cookies[itme['name']] = itme['value']
                    outputPath = open('sgCookies.pickle','wb') #新建一个文件
                    pickle.dump(cookies,outputPath)
                    outputPath.close()
                    return cookies

    def readCookies(self):
    """这是读取cookies的操作"""
        #if have cookies file,use it
        #if not,getCSDNCkooies()
        if os.path.exists('sgCookies.pickle'):
            readPath = open('sgCookies.pickle','rb')
            Cookies = pickle.load(readPath)
            # print(Cookies)
        else:
            Cookies = Cookies_operation().getCookies()
        return Cookies


"""下面是调用方法,使用cookies实现免密登录的操作"""
cookies = Cookies_operation().readCookies()
print(cookies)
driver.get("www.taobao.com")
driver.maximize_window()
for cookie in cookies:
    driver.add_cookie({
        "domain": "www.taobao.com",
        "name":cookie,
        "value":cookies[cookie],
        "path":'/',
         # "secure":True
        "expires":None
        })
driver.get("www.taobao.com")
# driver.refresh()  这步刷新应该是可以代替再次输入网址的操作,但是我没有实现,之前我用其他的网址实现过,应该是可以,难道再弄,有兴趣可以自己尝试下
    # print(driver.get_cookies())

emmm…我来再加一点:就是为什么要把cookies弄出来保存到文件夹的原因:主要是,我现在需要实现不登录直接调接口去操作,不要问我为什么不登录直接传cookies,你以为我不想嘛!!我是没有登录接口啊,接口都加密了,,无法找到开发,,没得办法,就像了这种操作,把cookies保存去操作,嘎嘎嘎(笑出了鹅叫声),下面是怎么操作的方法:

requests.request('get',url=11,cookies=tbCookies,data={name:value} )

我查询了源码:这种方法很实用,几乎时满足了你在登录时所需要的一切,简单解释下,get是该接口的方法;url是该接口;cookies就是你抓取的cookies,要字典格式或者CookieJar包形式,传进来就完事;data是代表你接口所需要传递的参数,要字典格式
CookieJar具体是那种我还没有试过,我搜了一下没有搜到,都是关于CookieJar库的,登录下次找时间在研究下,那位同学如果知道的话也请告诉我一声。

本文,借鉴处
,这位大哥写的很详细,他的懂了,看我的也就懂了

你可能感兴趣的:(python,selenium)