Python selenium使用cookies实现自动登陆


作者: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,没有报错即为安装成功。(如图)

%title插图%num
import selenium没有报错即为安装成功

(2)ChromeDriver

  本教程采用谷歌浏览器(或chrome内核的浏览器)进行自动登陆,如果需要使用Firefox等其他浏览器请自行下载其他WebDriver(其他版本的WebDriver使用方法与本教程相似,只需要修改一行代码即可)。

  安装ChromeDriver的方法分为两步,首先到浏览器的设置页面查看chrome的内核版本,接着访问http://npm.taobao.org/mirrors/chromedriver/下载对应版本的zip压缩包(如图1),解压后得到chromedriver.exe。将chromedriver.exe与需要运行的py文件放到同一目录即可(如图2)。

%title插图%num
图1:ChromeDriver下载页面
%title插图%num
图2:Chromedriver与需要运行的py文件放在同一目录

  到此,环境已搭建完成,下面开始自动登陆。

(二)使用Selenium进行自动登陆

  不管是什么网站,登陆方法都大同小异,这里用网易云音乐进行演示。

%title插图%num

(1)获取网站Cookies

  既然是使用Cookies进行登陆,那么肯定是要先获取网站的Cookies了。如果有使用过Python的requests库通过Cookies进行自动登陆的朋友就会知道,使用requests登陆时Cookies是写在请求头里的,但是Selenium不相同,Selenium需要网站完整的Cookies。为了方便倒出网站的完整Cookies,站长给推荐大家一个很实用的chrome浏览器插件——EditThisCookie(如图),这个插件可以一键将网站Cookies的json格式复制到剪切板。大家可自行百度进行下载。

%title插图%num
EditThisCookie

  使用该插件获取网站Cookies的方法很简单,首先启用该插件,接着访问网易云音乐官网并登陆,然后点击浏览器上方的插件图标(如图)

%title插图%num
点击浏览器上方的插件图标

  接着看到插件弹出的界面,点击如图位置的按钮即可将网站Cookies复制到剪切板。

%title插图%num
点击按钮将网站Cookies复制到剪切板

  然后新建一个txt文件将网站Cookies粘贴下来(如图),这里将txt文件命名为cookies.txt。

%title插图%num
将复制下来的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)

  执行后发现已成功完成登录(如图):

%title插图%num
成功登陆页面

  到这里已经完成了自动登陆,接下来就可以完成如获取网页源码之类的爬取操作了。注意:程序执行完毕后浏览器不会自动退出,需要在最后加上代码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)

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

CAPTCHAis initialing...