注册 X
提交 注:点击提交后系统会发送邮件到邮箱验证!(仅支持中国大陆邮箱)
我已阅读并同意 服务条款
首页 > IT技术笔记 > 查看笔记

Python Selenium操作Cookies

写爬虫的时候免不了操作Cookies,使用Selenium可以很方便的读取浏览器已有Cookies,管理Cookies也很方便。

1.selenium读取浏览器已有Cookies

浏览器已有Cookies有一个好处是我们的真实行为,里面保存的数据都是我们经常使用的账号数据,这在抓取网站时有较大好处,因为对这些老账号,真实Cookies,被爬网站会对你的抓取行为宽松一些。

比如你在浏览器登陆和访问过微博的话,使用selenium读取操作老cookies,访问微博的话,你就不需要再登陆啦。

如何操作老Cookie呢?使用add_argument()方法,看代码演示。拿Chrome浏览器举例,代码在Python 3.6里测试通过。



		        
from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument("user-data-dir=C:\\Users\\HN\\AppData\\Local\\Google\\Chrome\\User Data")

options.add_experimental_option("excludeSwitches",["ignore-certificate-errors"])

driver = webdriver.Chrome(executable_path="C:/chromedriver.exe",options=options)

driver.maximize_window()

driver.get('https://www.weibo.com')

print(driver.get_cookies())
		      

add_argument()方法里填你Chrome浏览器保存Cookies的路径。
add_experimental_option()方法是访问https的网站,Selenium可能会报错,使用这个方法可以忽略报错。
get_cookies()方法可以得到当前访问网站的Cookies。

上述例子就可以使用浏览器已有Cookies了,并且你后续使用Selenium的访问操作网站记录也会保存在这个Cookies理。

PS:电脑内存不够或已经打开了Chrome,再用Selenium打开一个Chrome时,可能会报:unable to move cache folder ShaderCache/GPUCache错误。
这时要把之前的Chrome关闭才行。

2.selenium保存cookies

上面介绍了如何读取老cookies并免登陆访问网站,还有一种情况有些网站对单个账号有访问频率限制,所以你准备了多个账号,想要每隔一段时间换一个账号来访问网站。

这样如果让浏览器自己来保存Cookies的话,会把你之前的账户Cookie覆盖一部分,会导致之前的账号访问网站时要求你输入账号密码登陆。

这种情况就要来管理Cookies,让每个账号都保存在不同文件里,这个过程要借助pickle库来序列化数据(把格式数据存入文件和加载到内存)。看下面实例:


	        
#coding=utf-8
from selenium import webdriver
import pickle
import time

driver = webdriver.Chrome(executable_path="C:/chromedriver.exe")
driver.maximize_window()
driver.get('https://www.douban.com')

time.sleep(60)

cookies = driver.get_cookies()
with open('D:/test_cookies/db_cookie_1','wb') as f:
    pickle.dump(cookies,f)
print ('done')
	      

上面示例演示通过selenium打开豆瓣网,你要在豆瓣网上输入账号密码点击登录,程序会把登录成功后的豆瓣网cookie保存到指定文件夹下面。保存cookies到文件是用pickle库的dump方法来完成的,它可以帮助你序列化数据,很方便。

上面睡眠60秒是给你足够时间输入账号密码。

接下来的程序就来调用我们刚才保存的cookies来登录豆瓣。


	        
#coding=utf-8
from selenium import webdriver
import pickle
import time

driver = webdriver.Chrome(executable_path="C:/chromedriver.exe")
#不带cookies访问豆瓣
driver.get('https://www.douban.com')
#删掉cookies
driver.delete_all_cookies()

with open('D:/test_cookies/db_cookie_1','rb') as f:
    cookies = pickle.load(f)
for cookie in cookies:
    driver.add_cookie(cookie)
    print(cookie)

#带我们保存的cookie访问豆瓣
driver.get('https://www.douban.com')

print('done')
	      

是不是能够自动登陆豆瓣了?
这里面还是用到pickle库的load()方法来载入cookie,使用add_cookie()方法来把保存的cookie加入到浏览器里。
注意上面的流程,先是不带cookie访问网站,然后把网站的cookies删掉,把保存的cookie加入到浏览器中,再重新访问网站,这样就能带我们自己的cookie访问了。

不安上面的流程,直接带我们的cookies访问网站,可能会失败。

上面的两个程序示例,就实现了把cookies按单个账户来保存到我们指定的文件夹中,不同的账户,你只需要按不同的账户名来保存文件就,这样方便管理。 以后就可以实现切换不用的账户来访问网站。

3.Selenium操作cookies总结

回顾一下,添加cookie的方法是add_cookie(),一般一个网站会有多个cookie,所以需要按上面的方法循环把cookie都加入。

另外删除cookies的方法是delete_all_cookies()

还有使用Selenium操作浏览器,如果你退出程序时不保存cookies,那cookies是不会被保存到文件的。



 打赏        分享



评论

邮箱: 昵称: