作者:Harkerbest
声明:本文章为原创文章,本文章永久链接:https://www.harkerbest.cn/?p=73,转载请注明原文地址,盗版必究!!!
警告:本文章仅用于技术交流,禁止将本文章内容用于违法犯罪活动,违者后果自负!!!
今天站长将教大家Python selenium使用cookies实现自动登陆。随着爬虫技术的不断发展,越来越多网站使用了各式各样难以破解的验证码,面对需要登陆才能获取的信息,相比于传统的填写账号密码和识别验证码的登陆方式,使用cookie登陆无疑是一种既方便有快捷的方式。同时,使用cookies登陆还具有无需使用机器识别或人工识别对验证码进行处理的优点。selenium是Python一个强大的第三方库,能够模拟操纵浏览器,使用它进行自动登陆是不错的选择,下面开始今天的教程。
(一)安装Selenium和ChromeDriver
(1)Selenium
安装Selenium的方法比较简单,使用Python自带的pip安装即可。在命令提示符输入如下命令:
pip install selenium
安装后进入Python交互式界面,输入import selenium,没有报错即为安装成功。(如图)
(2)ChromeDriver
本教程采用谷歌浏览器(或chrome内核的浏览器)进行自动登陆,如果需要使用Firefox等其他浏览器请自行下载其他WebDriver(其他版本的WebDriver使用方法与本教程相似,只需要修改一行代码即可)。
安装ChromeDriver的方法分为两步,首先到浏览器的设置页面查看chrome的内核版本,接着访问http://npm.taobao.org/mirrors/chromedriver/下载对应版本的zip压缩包(如图1),解压后得到chromedriver.exe。将chromedriver.exe与需要运行的py文件放到同一目录即可(如图2)。
到此,环境已搭建完成,下面开始自动登陆。
(二)使用Selenium进行自动登陆
不管是什么网站,登陆方法都大同小异,这里用网易云音乐进行演示。
(1)获取网站Cookies
既然是使用Cookies进行登陆,那么肯定是要先获取网站的Cookies了。如果有使用过Python的requests库通过Cookies进行自动登陆的朋友就会知道,使用requests登陆时Cookies是写在请求头里的,但是Selenium不相同,Selenium需要网站完整的Cookies。为了方便倒出网站的完整Cookies,站长给推荐大家一个很实用的chrome浏览器插件——EditThisCookie(如图),这个插件可以一键将网站Cookies的json格式复制到剪切板。大家可自行百度进行下载。
使用该插件获取网站Cookies的方法很简单,首先启用该插件,接着访问网易云音乐官网并登陆,然后点击浏览器上方的插件图标(如图)
接着看到插件弹出的界面,点击如图位置的按钮即可将网站Cookies复制到剪切板。
然后新建一个txt文件将网站Cookies粘贴下来(如图),这里将txt文件命名为cookies.txt。
保存Cookies完成,开始自动登陆!
(2)自动登陆
实例化对象:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import Chrome,ChromeOptions
import warnings
#消除警告(如果使用的是chrome内核的浏览器而不是chrome,Python会报警告)
warnings.filterwarnings("ignore")
#chromedriver .exe的路径
driver_path = r"chromedriver.exe"
#浏览器exe路径(如果使用的是chrome内核的浏览器而不是chrome,则这行代码一定不能忽略)
broswer_path = r"C:\Program Files (x86)\ChromeCore\ChromeCore.exe"
Options = ChromeOptions()
Options.binary_location = broswer_path
#更换头部,防止被网站识别
Options.add_argument('user-agent="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"')
#启动chromedriver,根据浏览器路径启动浏览器
driver = Chrome(chrome_options=Options, executable_path = driver_path)
正确执行代码后就会发现浏览器已启动,接下来使用get()函数来访问目标网站:
driver.get('https://music.163.com/')
执行后就会发现浏览器自动访问了网易云音乐首页。下一步就是使用Cookies登陆了。
更换Cookies:
(接着上一段实例化的代码)
#首先从cookies.txt中读取保存好的Cookies
import json
cookies_path=r'cookies.txt'#txt文件的路径
#将文本中的Cookies的json文件先读取为字符串
with open(cookies_path,'r',encoding='ANSI') as f:
cookies_str=f.read()
#使用json将字符串解析为包含字典的列表,每一个字典即为一个Cookies
cookies_list=json.loads(cookies_str)
#接下来删掉原来的Cookies并添加Cookies完成Cookies的更换
url='https://music.163.com/'#网易云音乐首页的网址
#在更换前一定要先使用get()函数访问网页,否则Selenium无法获取网站Cookies
driver.get(url)
#删除原来的Cookies
driver.delete_all_cookies()
#使用add_cookie()函数添加新的Cookies,由于该函数一次只能够添加一条Cookies,因此需要使用for循环进行迭代,依次添加
for i in cookies_list:
driver.add_cookie(i)
#重新访问网页后发现已登录成功
driver.get(url)
执行后发现已成功完成登录(如图):
到这里已经完成了自动登陆,接下来就可以完成如获取网页源码之类的爬取操作了。注意:程序执行完毕后浏览器不会自动退出,需要在最后加上代码driver.quit()才能使浏览器自动退出。
(三)注意事项
这里一定要强调一下几个比较容易栽进去的大坑!!!
(1)更改Cookies前一定要先访问一次网页
再次强调,要先使用get()函数访问一次网页后再更换Cookies,然后再进行第二次访问网页!!!
(2)要先删除Cookies再添加Cookies
第一次访问网页后会留下Cookies,需要使用driver.delete_all_cookies()删除Cookies后才能进行添加Cookies。
(3)添加Cookies要使用for循环
add_cookie一次只能够添加一条Cookies,因此需要使用for循环展开列表一条一条添加Cookies。
(四)全部代码
最后附上全部代码,写文章不容易,如果大家觉得这篇文章有帮助,请转发给更多有需要的人,谢谢!!!
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import Chrome,ChromeOptions
import json
import warnings
#消除警告(如果使用的是chrome内核的浏览器而不是chrome,Python会报警告)
warnings.filterwarnings("ignore")
#chromedriver .exe的路径
driver_path = r"chromedriver.exe"
#浏览器exe路径(如果使用的是chrome内核的浏览器而不是chrome,则这行代码一定不能忽略)
broswer_path = r"C:\Program Files (x86)\ChromeCore\ChromeCore.exe"
Options = ChromeOptions()
Options.binary_location = broswer_path
#更换头部,防止被网站识别
Options.add_argument('user-agent="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"')
#启动chromedriver,根据浏览器路径启动浏览器
driver = Chrome(chrome_options=Options, executable_path = driver_path)
#首先从cookies.txt中读取保存好的Cookies
cookies_path=r'cookies.txt'#txt文件的路径
#将文本中的Cookies的json文件先读取为字符串
with open(cookies_path,'r',encoding='ANSI') as f:
cookies_str=f.read()
#使用json将字符串解析为包含字典的列表,每一个字典即为一个Cookies
cookies_list=json.loads(cookies_str)
#接下来删掉原来的Cookies并添加Cookies完成Cookies的更换
url='https://music.163.com/'#网易云音乐首页的网址
#在更换前一定要先使用get()函数访问网页,否则Selenium无法获取网站Cookies
driver.get(url)
#删除原来的Cookies
driver.delete_all_cookies()
#使用add_cookie()函数添加新的Cookies,由于该函数一次只能够添加一条Cookies,因此需要使用for循环进行迭代,依次添加
for i in cookies_list:
driver.add_cookie(i)
#重新访问网页后发现已登录成功
driver.get(url)