热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python怎么模拟登陆网站

这篇文章主要介绍了python怎么模拟登陆网站,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大

这篇文章主要介绍了python怎么模拟登陆网站,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

使用已有COOKIE登陆

使用浏览器登陆,获取浏览器中的COOKIE信息,来进行登陆。

我们以博客园为例,先登录博客园账号。我们访问随笔列表,在控制台我们可以看到我们登陆后浏览器的COOKIE

python怎么模拟登陆网站

剔除一些数据统计及分析的COOKIE,剩下的就是登陆可能需要的.CNBlogsCOOKIE和.Cnblogs.AspNetCore.COOKIEs

# _ga google分析 COOKIE
# UM_distinctid 友盟COOKIE
# CNZZxxx CNZZCOOKIE
# __utma,__utmc,__utmz google统计网站
# Hm_lvt_xxx 百度统计网站
import urllib.request

url = 'https://i.cnblogs.com/posts'

user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36'

#浏览器登录后得到的COOKIE,也就是刚才复制的字符串
COOKIE_str = '.CNBlogsCOOKIE=xxx; .Cnblogs.AspNetCore.COOKIEs=xxx'

headers = {
 'User-Agent': user_agent,
 'COOKIE':COOKIE_str
}

req = urllib.request.Request(url,headers=headers)
resp = urllib.request.urlopen(req).read().decode('utf-8')

print(resp)

python怎么模拟登陆网站

登陆获取COOKIE

登陆的表单一般是使用的form data,现在也有些表单使用request payload使用json格式传参。

form data如药智网

python怎么模拟登陆网站

request payload如博客园

python怎么模拟登陆网站

form data

博客园的登陆需要拖动验证所以略过。我们以药智网为例,我们打开控制台可以看到登陆需要传的表单参数,这里是使用的form data表单。我们模拟登陆后获取到登陆后的COOKIE,然后访问登录后的个人中心页面。

python怎么模拟登陆网站

import urllib.request
import http.COOKIEjar

url = 'https://www.yaozh.com/login'

user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36'

# formData数据
data = {'username': '用户名',
  'pwd': '密码',
  'formhash': 'C3086BBA84',
  'backurl': 'https%3A%2F%2Fwww.yaozh.com%2F'}

post_data = urllib.parse.urlencode(data).encode('utf-8')

# 请求头设置
headers = {
 'User-Agent': user_agent
}

# 构造登陆请求
req = urllib.request.Request(url, headers=headers, data=post_data)

# COOKIE
COOKIE = http.COOKIEjar.COOKIEJar()

# 构造一个opener携带登录后的COOKIE
opener = urllib.request.build_opener(urllib.request.HTTPCOOKIEProcessor(COOKIE))

# 发送登陆请求
resp = opener.open(req)

print(resp)

# 登录后个人中心
url = 'https://www.yaozh.com/member/'

# 构造访问请求
req = urllib.request.Request(url, headers=headers)

resp = opener.open(req).read().decode('utf-8')

print(resp)

python怎么模拟登陆网站

request payload

如果登陆需要request payload我们需要将参数转为json字符串并在头部设置Content-Type

import json
...

data = {'loginType': '1',
  'pwdOrVerifyCode': '密码',
  'userIdentification': '账号',
  'uaToken': '',
  'webUmidToken':''}

headers = {
 'Content-Type': 'application/json;charset=UTF-8',
 'User-Agent': user_agent
}


req = urllib.request.Request(url, headers=headers, data=json.dumps(data))
...

登陆后用session保持登陆状态

我们用requests模块的Session对象来保存回话信息

import requests

url = 'https://www.yaozh.com/login'

user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36'

# formData数据
data = {'username': 'chenjy1225',
  'pwd': '19931225yjy',
  'formhash': 'C3086BBA84',
  'backurl': 'https%3A%2F%2Fwww.yaozh.com%2F'}


#构造Session
session = requests.Session()

# 发送post请求
resp = session.post(url, data)

# 登录后个人中心
url = 'https://www.yaozh.com/member/'

# 发送请求访问个人中心
resp = session.get(url).content.decode('utf-8')

print(resp)

python怎么模拟登陆网站

调用浏览器登陆

我们也可以在程序中调用一个浏览器来访问登陆网站。在python中使用Selenium库就能轻松实现调用浏览器,被控制的浏览器可以是chrome、firefox等。
以前较常用的还是PhantomJS但是PhantomJS被python弃用了。

UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead
warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless '

firefox对应的geckodriver

chrome对应的chrnpm.taobao.org/mirrors/chromedriveromedriver

1.下载Selenium、firefox浏览器及firefox驱动。

2.将下载的firefox驱动geckodriver放在firefox浏览器安装目录

3.将firefox浏览器安装目录添加到path中

4.重启ide

我们找到需要登陆时候输入的元素id及登陆button id。

python怎么模拟登陆网站

from selenium import webdriver
import time

# 新建selenium浏览器对象,后面是geckodriver.exe下载后本地路径
browser = webdriver.Firefox()

url = 'https://www.yaozh.com/login'

# 浏览器访问登录页面
browser.get(url)

# 等待3s用于加载脚本文件
browser.implicitly_wait(3)

# 输入用户名
username = browser.find_element_by_id('username')
username.send_keys('chenjy1225')

# 输入密码
password = browser.find_element_by_id('pwd')
password.send_keys('19931225yjy')

# 点击登录按钮
login_button = browser.find_element_by_id('button')
login_button.submit()

# 网页截图
browser.save_screenshot('screenshot.png')

# 强制等待5s,等待登录后的跳转
time.sleep(5)

url = 'https://www.yaozh.com/member/'

browser.get(url)

# 网页截图个人中心
browser.save_screenshot('screenshot1.png')

# 关闭浏览器
browser.quit()

screenshot.png:

python怎么模拟登陆网站

screenshot1.png:

python怎么模拟登陆网站

感谢你能够认真阅读完这篇文章,希望小编分享的“python怎么模拟登陆网站”这篇文章对大家有帮助,同时也希望大家多多支持编程笔记,关注编程笔记行业资讯频道,更多相关知识等着你来学习!


推荐阅读
  • 文章目录简介HTTP请求过程HTTP状态码含义HTTP头部信息Cookie状态管理HTTP请求方式简介HTTP协议(超文本传输协议)是用于从WWW服务 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • Python脚本编写创建输出数据库并添加模型和场数据的方法
    本文介绍了使用Python脚本编写创建输出数据库并添加模型数据和场数据的方法。首先导入相应模块,然后创建输出数据库并添加材料属性、截面、部件实例、分析步和帧、节点和单元等对象。接着向输出数据库中添加场数据和历程数据,本例中只添加了节点位移。最后保存数据库文件并关闭文件。文章还提供了部分代码和Abaqus操作步骤。另外,作者还建立了关于Abaqus的学习交流群,欢迎加入并提问。 ... [详细]
  • Python爬取豆瓣数据实现过程解析
    这篇文章主要介绍了Python爬取豆瓣数据实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值, ... [详细]
  • AFNetworking、MKNetworkKit和ASIHTTPRequest比较
    2019独角兽企业重金招聘Python工程师标准之前一直在使用ASIHTTPRequest作为网络库,但是由于其停止更新,iOS7上可能出现更多的 ... [详细]
  • 博主使用代理IP来自于网上免费提供高匿IP的这个网站用到的库frombs4importBeautifulSoupimportrandomimporturllib.re ... [详细]
  • 发现一个好看的手机壁纸网站,撸代码的手已经饥渴难耐了
    本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。最近有同学的爬虫代码出了bug,给问我怎么改于 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • Window10+anaconda+python3.5.4+ tensorflow1.5+ keras(GPU版本)安装教程 ... [详细]
  • IamgettingaUnicodeerror:UnicodeEncodeError:charmapcodeccantencodecharacteru\xa9in ... [详细]
author-avatar
鱼氵摆摆和叮叮猫琅_246
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有