豆瓣模拟登录(双层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模拟登录网站,但是以前对这块并不了解,而且目标网站的登录方法较为复杂, 所以一下卡在这里了,于是我决定从简单的模拟开始,逐渐深入地研究下这块. 注:本文仅为交流学 ...
随机推荐
- sencha:日期选择组件datepicker
来源于<sencha touch权威指南> ------------------------------- 除app.js外,其它内容都与上一篇博客里的内容相同.app.js代码如下: E ...
- Luogu 3265 [JLOI2015]装备购买
BZOJ 4004 把所有不能相互表示出来的向量都买下,一定能得到最大能买的方案数. 求解线性无关向量可以高斯消元,最后没有变成$0$向量的就是基底. 本题还要求代价最小怎么办?我们只要先把所有向量按 ...
- 下载特定区域内街景照片数据 | Download Street View Photos within Selected Region
作者:姜虹,刘子煜,王玥瑶,杨安琪,天靖居士 街景图片可以通过api下载,但需要提供参数,参数中的poiid.panoid.location可以用来确定位置或全景图片的ID以确定对应的街景图片.优先级 ...
- 转Delphi中XLSReadWrite控件的使用(1)---简介
XLSReadWrite控件简介: 一个你需要的,能在Delphi和.NET下访问Excel文件的完美解决方案. 一个经典的读写Excel的控件,对于使用Excel 开发很有帮助 官方网站: http ...
- Flask写web时cookie的处理
本文来自网易云社区 作者:孙圣翔 flask是一个微型web开发框架,别看他微型,在github上排名还是挺高的. A microframework based on Werkzeug, Jinja2 ...
- Jquery的动画
$下载链接详情点击Jquery-day01查看官方网站下载地址 Jquery-day02 1.Jquery动画使用animate-(JQ-2.1) <!DOCTYPE html> < ...
- stegsolve的功能
- nginx负载均衡tomcat和配置ssl
目录 tomcat 组件功能 engine host context connector service server valve logger realm UserDatabaseRealm 工作流 ...
- gluster peer probe: failed: Probe returned with unknown errno 107解决方法
当在glusterfs中将服务器加到存储池中,及运行”gluster peer probe server”命令, 遇到peer probe: failed: Probe returned with u ...
- maven设置------settings.xml文件学习
https://blog.csdn.net/tomato__/article/details/13025187 快速预览 maven的配置文件为settings.xml,在下面路径中可以找到这个文件, ...