渍渍渍~来一发豆瓣自动登录玩玩~

  今天来一个比较屌的自动化登陆工具,selenium模块,这个模块,比较装逼啦~具体自行百度吧!这篇博客实现了什么功能呢~可以自动使用用户名和密码登录,当然,豆瓣对登录次数还有ip地址做了一些策略,例如当同一个ip地址过于频繁的登录,这个时候就会生成一个随机的验证码,有了验证码的话,我们在用用户和密码登录就挂掉了,肯定是提交不成功,登陆不到豆瓣个人页面!!!!怎么办,怎么办呢,慌NMB呀~想办法搞定验证码就是咯~ok.废话不多说,来看本次博文内容,教你搞定豆瓣的验证码!搞定验证码有两种方式,一种是手动打码,也就是通过抓取到登录页面中验证码的地址,然后把图片下载到本地打开以后,手动输入以后传递给浏览器验证码的地方(LOW B方法),虽然这种方法比较的LOW B,本次主要是为了教会大家利用selenium搞定豆瓣的登录,so..whatever,不要在乎low不 low了。另外一种办法,就是通过在线的打码平台搞(高大上),百度上找自动打码,有很多,我用过云打码和超级鹰都不错~,so...我是比较推荐用云打码的,具体怎么用,自行百度吧,本次博客不过多介绍!

  说下本次代码需要环境:

  1. python 3.6.1
  2. scrapy 1.4
  3. selenium 3.4.3
  4. Pillow 4.2.1
  5. os
  6. requests

  我们可以使用selenium中的webdriver驱动来驱动本地的chrome浏览器,然后实现自动输入用密码和密码的效果~,OK,先来一发效果图

  

   ok,看完上面的效果觉得还可以的话,您往下继续看,你要是觉得这玩意太LOW B,右上角x,好走不送~,要实现这个效果很简单,但是我们需要做的是分析登录页面,然后把用户名,密码包括验证码传递进去,然后点击登录就可以登录了,但是这玩意怎么搞,往下看!

  首先先导入一下我们所需的模块!

 

1 import os
2 import requests
3 from PIL import Image
4 from time import sleep
5 from selenium import webdriver
6 from scrapy.selector import Selector
View Code

 

  简单的说下上面模块中导入的方法Image可以操作图片,因为我们要把验证码下载到本地打码,so...我们需要操作图片。这个使用就用得Image了~。Selector选择器是scrapy给我们提供的方法,支持xpath,css等~,很是牛逼!requests呢,去验证码的地址抓取图片返回并保存为文件,然后通过Image去操作打开这个验证码的图片。

  本次代码分为两个函数,get_captcha函数用户获取验证码,browser_login函数操作chrome自动登录。

  get_captcha函数的实现:

 

 1 def get_captcha(captcha_image_url):
 2     headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'}
 3     captcha_image = requests.get(captcha_image_url, headers=headers).content
 4     captcha_file = 'captcha.jpg'
 5     with open(captcha_file, 'wb') as f:
 6         f.write(captcha_image)
 7     image = Image.open(captcha_file)
 8     image.show()
 9     captcha_code = input('请输入验证码:').strip()
10     return captcha_code
View Code

 

  简单的说下上面函数分别实现了那些功能,requests.get()这个方法,第一个参数是我们要访问的url地址,后面需要加上headers,不然有些网站是不让访问的,当然,后面还可以加上代理,不让跳转等参数,具体的请看requests的源码,可以通过调用content(requests.get(url,headers).content)获取url的二进制文件,还可以获取当前访问页面的html源码,怎么用呢,也很简单(requests.get(url,headers).text),这里我们获取了验证码地址上的图片文件,with这个方法可以操作文件,打开一个文件,写入文件内容或者读取文件内容都是可以的,包括可以读取二进制,写入二进制文件都是ok,这里我们通过with这个方法来把获取到的图片二进制写入到文件中,图片的名称为capthca.jpg,该文件在与代码的同层目录下,当然,可以自己设置保存的位置,这里一切从简~。Image这个呢,上面也提到过一下下,就是操作图片的,通过Image.open(图片文件的路径)在调用show方法就可以打开这个验证码的图片了,我们有了验证码的图片,就可以通过本地的输入以后,然后传递回去。如果想要函数的返回结果部位None,返回我们需要的结果,这里就要用到return了。基础不好的话,自己去补习吧,阿西吧!

   ok,前戏做足了,我们获取了验证码以后,用户名,密码以及验证码都准备齐全了~,这个时候,我们只需要把这些值填入到chrom打开的豆瓣登录也中需要的位置即可,怎么搞呢,往下看,我们需要通过browser_login函数来实现这个功能呢

  browser_login函数实现

 

 1 def browser_login(account, password):
 2     login_url = 'https://accounts.douban.com/login'
 3     browser = webdriver.Chrome()
 4     browser.get(login_url)
 5     browser.set_window_size(1000, 700)
 6     browser.find_element_by_id('email').send_keys(account)
 7     browser.find_element_by_id('password').send_keys(password)
 8     try:
 9         browser.find_element_by_id('captcha_image')
10         response = browser.page_source
11         selector = Selector(text=response)
12         captcha_image_url = selector.xpath('//*[@id="captcha_image"]/@src').extract()[0]
13     except:
14         browser.find_element_by_name('login').click()
15     else:
16         captcha_code = get_captcha(captcha_image_url)
17         browser.find_element_by_id('captcha_field').send_keys(captcha_code)
18         sleep(1)
19         browser.find_element_by_name('login').click()
20         browser.get('https://www.douban.com/accounts/')
21         sleep(5)
View Code

 

  说一下上面的代码实现了那些功能

  1.   webdriver.Chrome()                    #启动一个Chrome的浏览器
  2.   browser.get()                             #chrome浏览器要访问的网址
  3.   browser.find_element_by_id()     #这个查找到我们登录html中的用户名的输入框,后面的都是一个意思,为啥要用id呢,因为id这个样式是全局唯一的,所需我们能最快速的定位用户名密码的位置
  4.       send_keys()                          #这个方法是干嘛用得呢,我们通过id定位到了输入框的位置,但是我们不传递值进去,并没有卵用,怎么传递值,就是通过这个方法搞的,把用户名密码传递进去,搞定!
  5.       click()                                      #这个方法呢,就是点击事件,我们需要通过这个方法触发登录,为毛要这样搞,卧槽,大哥!你自己想想吧~想不出来,放弃吧!

   两段代码就介绍完成了,需要注意一点的是,我们既然需要自己从键盘输入验证码,so...在验证码输入之前,不要让它selenium去触发登录按钮,这也就是上面那段代码中sleep的意义,我们需要时间把值传递进去,不然值没传递进去,你点你妹的登录呀,能TMD登录么~!好了,这篇lowb版本的豆瓣登录就介绍完毕了~想实现requests带cookie信息的登录加上自动打码的么!哈哈哈~~我就不教你玩。你来打我呀,打我呀,你咬我 你咬我呀~

  附上完整的代码~

  

 1 # _*_ coding:utf-8 _*_
 2 import requests
 3 from PIL import Image
 4 from time import sleep
 5 from selenium import webdriver
 6 from scrapy.selector import Selector
 7 
 8 __author__ = 'demon'
 9 
10 def get_captcha(captcha_image_url):
11     headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'}
12     captcha_image = requests.get(captcha_image_url, headers=headers).content
13     captcha_file = 'captcha.jpg'
14     with open(captcha_file, 'wb') as f:
15         f.write(captcha_image)
16     image = Image.open(captcha_file)
17     image.show()
18     captcha_code = input('请输入验证码:').strip()
19     return captcha_code
20 
21 def browser_login(account, password):
22     login_url = 'https://accounts.douban.com/login'
23     browser = webdriver.Chrome()
24     browser.get(login_url)
25     browser.set_window_size(1000, 700)
26     browser.find_element_by_id('email').send_keys(account)
27     browser.find_element_by_id('password').send_keys(password)
28     try:
29         browser.find_element_by_id('captcha_image')
30         response = browser.page_source
31         selector = Selector(text=response)
32         captcha_image_url = selector.xpath('//*[@id="captcha_image"]/@src').extract()[0]
33     except:
34         browser.find_element_by_name('login').click()
35     else:
36         captcha_code = get_captcha(captcha_image_url)
37         browser.find_element_by_id('captcha_field').send_keys(captcha_code)
38         sleep(1)
39         browser.find_element_by_name('login').click()
40         browser.get('https://www.douban.com/accounts/')
41         sleep(5)
42 
43 if __name__ == '__main__':
44     browser_login('登录豆瓣的用户名', '密码')

   放一波自动登录的效果图~,怎么玩,自己去想吧,啊哈哈哈哈哈!!!

  

 

转载于:https://www.cnblogs.com/demon89/p/douban.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/369892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis数据库入门学习(下载与安装、常用命令、在Java中操作Redis)

简介 下载与安装 数据类型 常用命令 1.字符串操作命令 2.哈希操作命令 3.列表操作命令 push是将元素总是插入到第一个 0表示第一个,1表示第二个。-1表示倒数第一个,-2表示倒数第二个。当前命令的意思是第一个到倒数第一个,即就是全部元素 rpo…

.NET使用Office Open XML导出大量数据到 Excel

我相信很多人在做项目的都碰到过Excel数据导出的需求,我从最开始使用最原始的HTML拼接(将需要导出的数据拼接成TABLE标签)到后来happy的使用开源的NPOI, EPPlus等开源组件导出EXCEL,但不久前,我在一个项目碰到一个需求…

CSS自定义消息提示

1.效果 2.源码 <% page contentType"text/html;charsetUTF-8" language"java" %> <html> <head><style type"text/css">#confirm{position: absolute;z-index: 1;display: inline-block;border: 1px solid black;backgr…

file 选择的文件胖多有多大_如何删除 macOS 压缩包中的隐藏文件?

如何删除 macOS 压缩包中的隐藏文件&#xff1f;在工作中&#xff0c;压缩打包文件是不可缺少的一项工作。为了避免文件的损坏和缺失&#xff0c;我们通常在macOS系统中&#xff0c;把多个文件或文件夹压缩后进行传输&#xff0c;我们一般使用访达&#xff08;Finder&#xff0…

CSS画各种二维图形

1.效果 2.源码 <% page contentType"text/html;charsetUTF-8" language"java" %> <html> <head><style type"text/css">#triangle_top{display: inline-block;width:0;height:0;border-left:50px solid transparent;bor…

数据库的开启与关闭

今天&#xff0c;为了一些原因&#xff0c;要重启数据库&#xff0c;但因为当时安装的时候&#xff0c;同学随便装了&#xff0c;导致很多文件都找不到&#xff0c;想使用绝对路径重启数据的计划卡死在了路上。以下&#xff0c;我写下我的数据库开启、关闭的方法&#xff0c;方…

leetcode怎么用时间刷_刷完700多题后的首次总结:LeetCode应该怎么刷?

推荐观看&#xff1a;java技术进阶&#xff1a;膜拜&#xff01;字节大神总结的666页大师级算法宝典&#xff0c;分分钟团灭LeetCode​zhuanlan.zhihu.com2020最新马士兵老师联手左程云老师丨数据结构与算法丨面试BATJ必备​www.bilibili.com我是大二的时候开始接触LeetCode的&…

IntelliJ IDEA:使用Google Guava生成equals,hashCode和toString

问题 在Java领域&#xff0c;我们经常需要编写equals &#xff0c; hashCode和toString方法。 老实说&#xff0c;这通常只是一个样板义务。 得益于智能IDE&#xff0c;我们通常不再自己这样做。 我们只是让和IDE一起努力。 不过有一个问题。 生成的代码通常非常丑陋。 让我们…

Appscan_web安全测试工具 (含修改启动浏览器的方法)

安全测试应该是测试中非常重要的一部分&#xff0c;但他常常最容易被忽视掉。 尽管国内经常出现各种安全事件&#xff0c;但没有真正的引起人们的注意。不管是开发还是测试都不太关注产品的安全。当然&#xff0c;这也不能怪我们苦B的“民工兄弟”。因为公司的所给我们的时间与…

传说之下地图素材_【开阔眼界】地图上的史记——名著轻松读

购买链接&#xff1a;https://j.youzan.com/Zns-38我读了无数次《史记》&#xff0c;每次都是读了开头没几页就放弃&#xff0c;文言文看不懂&#xff0c;翻译的白话文内容又太枯燥&#xff0c;现在居然有图画版的史记&#xff0c;还附有说明&#xff0c;真是太好了&#xff0c…

go int 转切片_「快学 Go 语言」第 4 课——低调的数组

数组就是一篇连续的内存&#xff0c;几乎所有的计算机语言都有数组&#xff0c;只不过 Go 语言里面的数组其实并不常用&#xff0c;这是因为数组是定长的静态的&#xff0c;一旦定义好长度就无法更改&#xff0c;而且不同长度的数组属于不同的类型&#xff0c;之间不能相互转换…

从XaaS到Java EE – 2012年哪一种该死的云最适合我?

您是否曾经想过要让Java EE在某个地方启动和运行需要什么&#xff1f; 是的 多年。 从托管我自己的主机开始&#xff0c;转到一些托管产品 &#xff0c;最后偶然发现了PaaS运动。 老实说&#xff0c;我并没有太认真。 我只是想把我的东西放到某个地方&#xff0c;而不在乎解决…

正方体最快最简单画_素描新手入门第一幅画可不只是“正方体”

很多素描教程都把正方体作为入门第一幅画学习内容。这种现象也成了约定俗成的规矩但是&#xff0c;学过画画的人大概都知道有很多人画了多年石膏几何形、静物、人头像甚至半身像全身像。到最后落得只会画这些学过的东西。这就说明学习出了问题。绘画练习一定要弄清楚每个物体练…

VS2015配置内核WDK7600环境,32位下.

VS2015配置内核WDK7600环境,32位下. 学习内核驱动的编写,就要会配置环境.不然总是用记事本编写.比较不方便. 环境配置如下. 1.首先下载WDK7600, 课堂资料代码中已经上传.链接&#xff1a;https://pan.baidu.com/s/1o9PjpUU 密码&#xff1a;k5sp 2.VS2015下载. 这个网络上有很多…

我的改进版2048(1)

&#xff08;假设有谁想要这个软件的话&#xff0c;在评论中留一个邮箱吧。&#xff09; 前几天好几次看到有朋友晒出玩2048刷高分的截图。我就想我能不能也做一个2048呢&#xff1f;细致想了想2048游戏的规律&#xff0c;发现事实上逻辑上非常easy&#xff0c;也不用研究什么算…

2020年市场最缺什么_2020年聚合氯化铝市场评述

2020年聚合氯化铝市场评述一、行情概述&#xff1a;今年聚合氯化铝价格整体呈下滑趋势&#xff0c;接近年底价格才有小幅反弹。但不同时期价格有小幅起伏&#xff0c;主要受疫情影响&#xff0c;在下游需求不佳的影响下价格出现下滑。1月受疫情影响&#xff0c;前期停产企业短期…

通过反射来将一个类的内容转换到另外一个类里

主函数&#xff1a; import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.serializer.ValueFilter;import com.google.common.base.Preconditions; import java.lang.reflect.Field;import java.lang.reflect.Modifier; public class leijun {public static void ma…

开发辅助 | 阿里图标库iconfont入门使用

目前大多数的互联网公司&#xff0c;前端开发和UI设计师配合中&#xff0c;针对设计师给图的效果图&#xff0c;前端开发工程师不再像往常一样对于细小图标进行切图&#xff0c;取而代之的是引用阿里图标库&#xff08;http://iconfont.cn/&#xff09;&#xff1b;简单的临时开…

计量经济学建模_一分钟看完计量经济学

建模是计量的灵魂&#xff0c;所以就从建模开始。一、建模步骤建模步骤&#xff1a;A&#xff0c;理论模型的设计: a&#xff0c;选择变量b&#xff0c;确定变量关系c&#xff0c;拟定参数范围B&#xff0c;样本数据的收集: a&#xff0c;数据的类型b&#xff0c;数据的质量C&a…

制图折断线_【机械制图】机械设计中的尺寸标注,看懂复杂机械图纸!

专注于机械行业、专业、职业信息分享服务于制造业百万工程师推荐阅读【机械制图】画图这么久&#xff0c;线型都没搞懂&#xff1f;【机械制图】机械图纸知识解析&#xff0c;这个总结溜溜的【机械制图】机械图纸尺寸标注规则&#xff0c;通过动图复习一下&#xff01;知名机械…