爬虫需要登陆怎么办?这份python登陆代码请收下
模拟登陆思路
通过selenium中的webdriver控制浏览器登录目标网站,然后获取模拟登陆需要的Cookie,再利用此Cookie来达到登录的效果。本次我们使用webdriver来驱动火狐浏览器插件。在登录网站时,cookie保存在发起请求的客户端中,网站服务器利用cookie来区分不同的客户端。cookie里面记录了“访问登录后才能看到的页面”这一行为的信息,含有能够向服务器证明:“我刚才登录过”。因此cookie可以用来标识客户端的身份,以存储它的信息。
登录步骤
导入模块
from selenium import webdriver
import requests
import json
启动浏览器
通过webdriver驱动火狐浏览器,然后在加载将要访问的目标网站
driver = webdriver.Firefox()
driver.get('目标网站')
点击登录
找到网页中登录按钮所在的位置,通过浏览器模拟点击打开登录框,然后找到用户名和密码框的位置,输入用户名及密码,在寻找按钮以及密码输入框时可鼠标右键然后找到“查看元素”选项,点击之后可在网页源码中寻找。
代码如下:
#清空登录框
driver.find_element_by_xpath("./*//input[@name='username']").clear()
#自动填入登录用户名
driver.find_element_by_xpath("./*//input[@name='username']").send_keys(user)
#清空密码框
driver.find_element_by_xpath("./*//input[@name='password']").clear()
#自动填入登录密码
driver.find_element_by_xpath("./*//input[@name='password']").send_keys(password)
time.sleep(8)
#点击登录按钮进行登录
driver.find_element_by_xpath("./*//button[@name='loginsubmit']").click()
time.sleep(10)
记录cookie
经过上面几步,如果没有报错的话就说明已经登录成功了,接下来我们再次加载网页获取登录cookie。
代码如下:
driver.get('目标网站')
#获取cookies
cookie_items = driver.get_cookies()
for cookie_item in cookie_items:
post[cookie_item['name']] = cookie_item['value']
cookie_str = json.dumps(post)
with open('cookie.txt', 'w', encoding='utf-8') as f:
f.write(cookie_str)
f.close()
通过cookie登录
获得cookie之后,模拟登陆就跟之前一样用requests请求网站,只需要将cookie内容加到请求中即可。
代码如下:
header = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64;rv:53.0) Gecko/20100101 Firefox/53.0"}
with open('cookie.txt', 'r', encoding='utf-8') as f:
cookie = f.read()
cookies = json.loads(cookie)
res = requests.get(url=url, cookies=cookies, headers=header)
对于有些网站来说,cookie的生命期较长,所以在第一次登陆获取cookie后,在以后模拟登陆时只需要调用此cookie即可,十分方便。
具体代码如下:
from selenium import webdriver
import time
import json user="用户名"
password="密码" driver = webdriver.Firefox()
driver.get('目标网站')
time.sleep(5)
driver.find_element_by_xpath("./*//button[@type='submit']").click()
print("正在输入用户名和密码")
#清空登录框
driver.find_element_by_xpath("./*//input[@name='username']").clear()
#自动填入登录用户名
driver.find_element_by_xpath("./*//input[@name='username']").send_keys(user)
#清空密码框
driver.find_element_by_xpath("./*//input[@name='password']").clear()
#自动填入登录密码
driver.find_element_by_xpath("./*//input[@name='password']").send_keys(password) time.sleep(8)
#点击登录按钮进行登录
driver.find_element_by_xpath("./*//button[@name='loginsubmit']").click()
time.sleep(10)
driver.get('目标网站')
#获取cookies
cookie_items = driver.get_cookies() #获取到的cookies是列表形式,将cookies转成json形式并存入本地名为cookie的文本中
for cookie_item in cookie_items:
post[cookie_item['name']] = cookie_item['value']
cookie_str = json.dumps(post)
with open('cookie.txt', 'w', encoding='utf-8') as f:
f.write(cookie_str)
f.close()
print("登录完成")
爬虫需要登陆怎么办?这份python登陆代码请收下的更多相关文章
- 干货 | 请收下这份2018学习清单:150个最好的机器学习,NLP和Python教程
机器学习的发展可以追溯到1959年,有着丰富的历史.这个领域也正在以前所未有的速度进化.在之前的一篇文章中,我们讨论过为什么通用人工智能领域即将要爆发.有兴趣入坑ML的小伙伴不要拖延了,时不我待! 在 ...
- JAVA工程师必学技能,进阶&涨薪的推进器!这份实战教程请收下
Netty 作为互联网中间件的基石,是 JAVA 工程师进阶为高级程序员必备的能力之一.也是目前是互联网中间件领域使用最广泛最核心的网络通信框架. Netty是一个高性能.异步事件驱动的NIO框架,它 ...
- Python的22个编程技巧,请收下!
1. 原地交换两个数字 Python 提供了一个直观的在一行代码中赋值与交换(变量值)的方法,请参见下面的示例: x,y= 10,20 print(x,y) x,y= y,x print(x,y) # ...
- 这份Koa的简易Router手敲指南请收下
上一期链接--也就是本文的基础,参考KOA,5步手写一款粗糙的web框架 本文参考仓库:点我 Router其实就是路径匹配,通过匹配路径,返回给用户相应的网站内容. 以下方例子为例,主要通过提取req ...
- 购买二手iPhone需要注意什么?这份避坑指南请收好!
iPhone二手机市场一直非常火热,有时甚至出现供不应求的情况.主要是因为新机的价格不便宜,没什么性价比,很多小伙伴会选择低价购买二手iPhone,价格基本只要新机的二到五折.不过二手机的水深相信大家 ...
- Python登陆人人网
#!coding:utf-8 import urllib2 import urllib import cookielib def renrenBrower(url,user,password): #登 ...
- 非常全的一份Python爬虫的Xpath博文
非常全的一份Python爬虫的Xpath博文 Xpath 是 python 爬虫过程中非常重要的一个用来定位的一种语法. 一.开始使用 首先我们需要得到一个 HTML 源代码,用来模拟爬取网页中的源代 ...
- python登陆,注册小程序
def login(username,password): ''' 用于用户登录 :param username: 用户输入用户名 :param password: 用户输入密码 :return: T ...
- python登陆接口编写
#coding:utf-8 import getpass,sys i=0 j=0 while i<3: username=raw_input('username:') #输入用户名 life_1 ...
随机推荐
- mysql5.6配置文件详解(一)
mysqld Ver 5.6.11 for Linux on x86_64 (Source distribution)Copyright (c) 2000, 2013, Oracle and/or ...
- python运算符&条件语句
运算符 算术运算符:+ ,- , *, /, %, **,// 赋值运算符:= ,+=,-=, *=,/=,%=, **= 比较运算符:==,!=, >, <, >=,<= 成 ...
- sql 模块 pymysql 数据库操作
1. 添加一个部门. import pymysql def main(): no = int(input('编号: ')) name = input('名字: ') loc = input('所在地: ...
- XDebug的配置和使用
简介 XDebug是一个开放源代码的PHP程序调试器(即一个Debug工具) 可以用来跟踪,调试和分析PHP程序的运行状况 功能强大的神器,对审计有非常大的帮助. 官网:http://www.xdeb ...
- 分享一款一直在维护的【网络开发运维|通用调试工具】: http请求, websocket,cmd, RSA,DES, 参数签名工具,脚本批量生成工具,google动态口令,端口检测,组件注册,js混淆...
首先发下下载地址:https://files.cnblogs.com/files/taohuadaozhu/ConfigLab.Test.ex.rar 日常开发,运维,跨部门跨公司对接中. 想快速调 ...
- SQL Server中STATISTICS IO物理读和逻辑读的误区
SQL Server中STATISTICS IO物理读和逻辑读的误区 大家知道,SQL Server中可以利用下面命令查看某个语句读写IO的情况 SET STATISTICS IO ON 那么这个命令 ...
- vue+springboot后台实现页面按钮权限
思路 1.用户跟角色关联 2.角色跟菜单关联 3.菜单跟菜单下的按钮关联 4.后端返回每个菜单下的按钮,前端通过自定义事件,在每个按钮上加上相应的事件 打字麻烦,还是看图吧! 建立btn.js 然后在 ...
- 在vue项目中封装echarts的正确姿势
为什么需要封装echarts 每个开发者在制作图表时都需要从头到尾书写一遍完整的option配置,十分冗余 在同一个项目中,各类图表设计十分相似,甚至是相同,没必要一直做重复工作 可能有一些开发者忘记 ...
- Maven快照版本要这样用才真的香!
Bug的身世之谜 今天又分享一个问题解决的故事.请看下图框起来的错误,明显就是找不到这个class嘛! 下面我们按照正常人的思路去排查这个问题,既然找不到class那就先看这个依赖的jar包有没有,如 ...
- Scratch 第3课神奇画笔
素材及视频下载 链接:https://pan.baidu.com/s/1qX0T2B_zczcLaCCpiRrsnA提取码:xfp8