豆瓣模拟登录(双层html)
一.豆瓣模拟登录(双层html)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#author tom
import time
from selenium import webdriver #构造浏览器,请求数据
bro=webdriver.Chrome()
bro.get('https://www.douban.com/')
time.sleep(2) #他的登录页面是双层嵌套的,要先转入里面那个页面,标签才能定位到
iframe=bro.find_element_by_tag_name('iframe')
bro.switch_to_frame(iframe) #点击密码登录
pslogin=bro.find_elements_by_css_selector('body > div.account-body.login-wrap.login-start.account-anonymous > div.account-body-tabs > ul.tab-start > li.account-tab-account')[0]
print(pslogin)
print(type(pslogin))
pslogin.click() time.sleep(2) #填入密码
bro.find_element_by_id('username').send_keys('xxx')
bro.find_element_by_id('password').send_keys('xxx') time.sleep(2)
#点击登录
btn=bro.find_element_by_xpath('//a[@class="btn btn-account btn-active"]')
btn.click()
cookies={i['name']:i['value']for i in bro.get_cookies()}
print(cookies)
time.sleep(3)
bro.quit(
二.人人模拟登录
'''
1.http://www.yundama.com/demo.html
2.注册普通用户和开发者用户
3.登录普通用户 查看余额
4.登录开发者用户:查看appid和key '''
import requests
from lxml import etree
from renrenlogin.Code import YDMHttp def get_code_img_text(userName,passWord,imgPath,imgType):
result = None
# 用户名
username = userName # 密码
password = passWord # 软件ID,开发者分成必要参数。登录开发者后台【我的软件】获得!
appid = 7442 # 软件密钥,开发者分成必要参数。登录开发者后台【我的软件】获得!
appkey = '1ef33b4c6cde16c03c510239c58506ed' # 图片文件
filename = imgPath # 验证码类型,# 例:1004表示4位字母数字,不同类型收费不同。请准确填写,否则影响识别率。在此查询所有类型 http://www.yundama.com/price.html
codetype = imgType # 超时时间,秒
timeout = 20 # 检查
if (username == 'username'):
print('请设置好相关参数再测试')
else:
# 初始化
yundama = YDMHttp(username, password, appid, appkey) # 登陆云打码
uid = yundama.login();
print('uid: %s' % uid) # 查询余额
balance = yundama.balance();
print('balance: %s' % balance) # 开始识别,图片路径,验证码类型ID,超时时间(秒),识别结果
cid, result = yundama.decode(filename, codetype, timeout);
print('cid: %s, result: %s' % (cid, result)) return result headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}
#实现携带验证码的模拟登录
#1.获取验证码图片
url = 'http://www.renren.com/'
page_text = requests.get(url=url,headers=headers).text
#2.解析出验证码图片
tree = etree.HTML(page_text)
code_img_url = tree.xpath('//*[@id="verifyPic_login"]/@src')[0] #将验证码图片存储到本地
code_img_data = requests.get(url=code_img_url,headers=headers).content
with open('./code.jpg','wb') as fp:
fp.write(code_img_data) #识别验证码图片中的数据值
code_text = get_code_img_text('自己普通用户','自己的普通密码','./code.jpg',2004)
# print(code_text) #模拟登录
url = 'http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=201934120373' #data的数据可以通过fiddle抓包工具,在浏览器登录的试试抓包获得
data={
'captcha_type':'web_login',
'domain':'renren.com',
'email':'302624476@qq.com',
'f':'http%3A%2F%2Fwww.renren.com%2F323264874%2Fprofile',
'icode':code_text,
'key_id':'',
'origURL':'http://www.renren.com/home',
'password':'xxxxxx',
'rkey':'6d7d2086ddd44c39ae683b6d93c0a39f'
} #创建一个session:session也可以发送请求.session可以自动保存cookie
session = requests.session()
#使用session进行的请求发送,如果请求成功后会产生cookie,则该cookie会被自动存储在该session对象中
session.post(url=url,data=data,headers=headers) #携带cookie对个人主页的url发起请求
pesonal_url = 'http://www.renren.com/323264874/profile'
person_page_text = session.get(url=pesonal_url,headers=headers).text with open('./renren.html','w',encoding='utf-8') as fp:
fp.write(person_page_text)
print('over!!!')
code:
'''
1.http://www.yundama.com/demo.html
2.注册:普通用户和开发者用户
3.登录操作:
3.1 普通用户:查看余额.
3.2 开发者用户:
- 创建一个软件:
- 下载示例程序:开发文档->下载新版本的DLL->pythonHTTP
'''
import http.client, mimetypes, urllib, json, time, requests ###################################################################### class YDMHttp:
apiurl = 'http://api.yundama.com/api.php'
username = ''
password = ''
appid = ''
appkey = '' def __init__(self, username, password, appid, appkey):
self.username = username
self.password = password
self.appid = str(appid)
self.appkey = appkey def request(self, fields, files=[]):
response = self.post_url(self.apiurl, fields, files)
response = json.loads(response)
return response def balance(self):
data = {'method': 'balance', 'username': self.username, 'password': self.password, 'appid': self.appid,
'appkey': self.appkey}
response = self.request(data)
if (response):
if (response['ret'] and response['ret'] < 0):
return response['ret']
else:
return response['balance']
else:
return -9001 def login(self):
data = {'method': 'login', 'username': self.username, 'password': self.password, 'appid': self.appid,
'appkey': self.appkey}
response = self.request(data)
if (response):
if (response['ret'] and response['ret'] < 0):
return response['ret']
else:
return response['uid']
else:
return -9001 def upload(self, filename, codetype, timeout):
data = {'method': 'upload', 'username': self.username, 'password': self.password, 'appid': self.appid,
'appkey': self.appkey, 'codetype': str(codetype), 'timeout': str(timeout)}
file = {'file': filename}
response = self.request(data, file)
if (response):
if (response['ret'] and response['ret'] < 0):
return response['ret']
else:
return response['cid']
else:
return -9001 def result(self, cid):
data = {'method': 'result', 'username': self.username, 'password': self.password, 'appid': self.appid,
'appkey': self.appkey, 'cid': str(cid)}
response = self.request(data)
return response and response['text'] or '' def decode(self, filename, codetype, timeout):
cid = self.upload(filename, codetype, timeout)
if (cid > 0):
for i in range(0, timeout):
result = self.result(cid)
if (result != ''):
return cid, result
else:
time.sleep(1)
return -3003, ''
else:
return cid, '' def report(self, cid):
data = {'method': 'report', 'username': self.username, 'password': self.password, 'appid': self.appid,
'appkey': self.appkey, 'cid': str(cid), 'flag': ''}
response = self.request(data)
if (response):
return response['ret']
else:
return -9001 def post_url(self, url, fields, files=[]):
for key in files:
files[key] = open(files[key], 'rb');
res = requests.post(url, files=files, data=fields)
return res.text
三.关于验证码识别登录
####验证码识别
- 验证码图片url不变,验证码不变
- 请求验证码图片获得验证码图片, 通过打码品台识别
- 验证码url不变,验证码会变
- 思路:对方服务器在返回烟验证码的时候,会和每个用户信息进行一个对应,之后再用户发起post请求的时候,会对比post请求的中的验证码和当前用户真正存储在服务器端的验证码是否相同
- 操作:
- 实例化session
- 使用session请求登录页面获得验证的地址
- 使用session请求验证码,识别
- 使用session发送post请求
- 使用selenniu登录,遇到验证码
- url不变,验证码不变,同上
- url不变,验证码会变
- 使用selenium请求登录页面,同时拿到验证码地址
- 获取登录页面中的cookie,就是实例化的浏览器中使用get——cookies,交给request模块去请求,识别
- 输入验证码识别
豆瓣模拟登录(双层html)的更多相关文章
- Java豆瓣电影爬虫——模拟登录的前世今生与验证码的爱恨情仇
前言 并不是所有的网站都能够敞开心扉让你看个透彻,它们总要给你出些难题让你觉得有些东西是来之不易的,往往,这也更加激发你的激情和斗志! 从<为了媳妇的一张号,我与百度医生杠上了>里就有网友 ...
- python爬虫实战(四)--------豆瓣网的模拟登录(模拟登录和验证码的处理----scrapy)
在利用scrapy框架爬各种网站时,一定会碰到某些网站是需要登录才能获取信息. 这两天也在学习怎么去模拟登录,通过自己码的代码和借鉴别人的项目,调试成功豆瓣的模拟登录,顺便处理了怎么自动化的处理验证码 ...
- selenium模拟登录豆瓣和qq空间
selenium模拟登录豆瓣和qq空间今天又重新学习了下selenium,模拟登录豆瓣,发现设置等待时间真的是很重要的一步,不然一直报错:selenium.common.exceptions.NoSu ...
- Python模拟登录实战(二)
目标:1.模拟登录豆瓣,2.自动更改签名和发表说说. 代码如下: #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'ziv·chan ...
- Python 爬虫之模拟登录
最近应朋友要求,帮忙爬取了小红书创作平台的数据,感觉整个过程很有意思,因此记录一下.在这之前自己没怎么爬过需要账户登录的网站数据,所以刚开始去看小红书的登录认证时一头雾水,等到一步步走下来,最终成功, ...
- Python模拟登录淘宝
最近想爬取淘宝的一些商品,但是发现如果要使用搜索等一些功能时基本都需要登录,所以就想出一篇模拟登录淘宝的文章!看了下网上有很多关于模拟登录淘宝,但是基本都是使用scrapy.pyppeteer.sel ...
- python中使用cookie进行模拟登录
背景:使用cookie模拟登录豆瓣->我的豆瓣网页 [准备工作] 1.通过Fiddler抓取“我的豆瓣”url: 2.通过Fiddler抓取“我的豆瓣”cookie值. import urlli ...
- PHP cURL 使用cookie 模拟登录
cURL是什么 cURL: http://php.net/manual/zh/book.curl.php PHP 支持 Daniel Stenberg 创建的 libcurl 库,能够连接通讯各种服务 ...
- 【Python数据分析】Python模拟登录(一) requests.Session应用
最近由于某些原因,需要用到Python模拟登录网站,但是以前对这块并不了解,而且目标网站的登录方法较为复杂, 所以一下卡在这里了,于是我决定从简单的模拟开始,逐渐深入地研究下这块. 注:本文仅为交流学 ...
随机推荐
- pymysql模块使用---Python连接MySQL数据库
pymysql模块使用---Python连接MySQL数据库 浏览目录 pymysql介绍 连接数据库 execute( ) 之 sql 注入 增删改查操作 进阶用法 一.pymysql介绍 1.介绍 ...
- Django框架 之 form组件的钩子
Django框架 之 form组件的钩子 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 3 ...
- sublime text3安装后html:5+Tab不能快速生成html头部信息的解决办法
sublime text3安装后html:5+Tab不能快速生成html头部信息的解决办法: 需要下载Emmet插件,按网上写的步骤按ctrl+shift+P打开命令面板,输入install,鼠标点击 ...
- jQuery对象与DOM对象及互相转化
<p id=‘’hello”></p> 普通处理,通过标准JavaScript处理: var p = document.getElementById('hello'); p.i ...
- POJ - 2965 The Pilots Brothers' refrigerator(压位+bfs)
The game “The Pilots Brothers: following the stripy elephant” has a quest where a player needs to op ...
- WC 代码统计 java
GitHub地址 项目需求 实现一个wc统计程序,可以对文本进行相关功能的统计与分析 基本功能 -c 统计字符数 -w 统计文件词数 -l 统计行数 扩展功能 -s 递归搜索目录下面的文件 -a 返回 ...
- window phone 8资源管理器打开文件
一.打开安装包里面文件: StorageFolder sf = Package.Current.InstalledLocation;//ApplicationData.Current.LocalFol ...
- android和.net webservice中的DES加密算法
也是看了一堆的例子,本身并不会写加密算法,好在只要会用就行了,我们把在app中使用的参数加密,然后在.net端的webservice中进行解密,本身并没有什么问题,但是android下和.net下的d ...
- Windows + python + pywinauto 搭建自动化测试环境
最近公司在搞测试, 单纯的人工去测试需要花费太多的人力物力以及时间, 所以准备用Python做一套自动化测试来使用. 本文中使用的是Python3.6.8 和 pywin32-224.win-amd ...
- Winform中的DatagridView显示行号
1.设置 RowPostPaint 为true 2.启用RowPostPaint事件 /// <summary> /// DataGridView显示行号 /// </summary ...