Scrapy 模拟登陆(验证码破解)

网上的一些案例比如模拟登陆豆瓣,其实已经不适用了因为验证码已经不是以前的那种看图输文字。这次我们以自己学校的教务网为案例,大家也可以去尝试一下

  • 重点一 scarpy中的post提交:scrapy.FormRequest
 def start_request(self):
        url=''#提交的网页
        data={'email':'aaa','password':'aaa'}#提交的data参数
        request=scrapy.FormRequest(url,formdata=data,callback=self.parse)#post提交
        yield request#s
  • 重点二 scarpy中的传递登陆的cookie
重难点在传递cooki的值上,比如下载二维码每次访问的值都是不同我们要传递某次访问二维码的cookie去登陆
(即登陆页面的二维码与下载的二维码是同一个)
 
在发送请求时cookie的操作, meta={'cookiejar':1}表示开启cookie记录,首次请求时写在Request()里
meta={'cookiejar':response.meta['cookiejar']}表示使用上一次response里的cookiex
写在FormRequest.from_response()里post授权
meta={'cookiejar':True}表示使用上一个请求后响应的cookie(授权后的cookie访问需要登录查看的页面)
  • 实践才是真理
class SpiderSpider(scrapy.Spider):
    name = 'spider'
    allowed_domains = ['kdjw.hnust.cn']
    #获取二维码
    def start_requests(self):#这里重写了start_requests方法:strat_url请求的方法
        yield scrapy.Request("http://kdjw.hnust.cn/kdjw/verifycode.servlet",callback=self.pic_download,meta={'cookiejar':1})
    #下载二维码并登陆
    def pic_download(self, response):
        #获取图片的下载内容
        print("*" * 30)
        print(response)
        print("*"*30)
        fp=open('验证码.png','wb')
        fp.write(response.body)
        fp.flush()
        fp.close()
        yanzhengma=input('请输入验证码')
        data = {'dlfl': '0', "USERNAME": '1608050156', "PASSWORD": '1608050156', 'RANDOMCODE': yanzhengma, 'useDogCode': '',
                'x': '37', 'y': '13'}
        yield scrapy.FormRequest(url='http://kdjw.hnust.cn/kdjw/Logon.do?method=logon',meta={'cookiejar': response.meta['cookiejar']},formdata=data,callback=self.post_parse)
    #请求登陆后的页面显示
    def post_parse(self,response):
        print("*" * 30)
        #print(response.body)
        print(response.text)
        ke = 'http://kdjw.hnust.cn/kdjw/tkglAction.do?method=goListKbByXs&istsxx=no&xnxqh=2018-2019-1&zc=&xs0101id=1608050156'
        print("*" * 30)
        yield scrapy.Request(ke,callback=self.detail,meta={'cookiejar':True})
    def detail(self,response):
        print("*" * 30)
        print(response.text)
        print("*" * 30)
   当然setting中还要设置headers和user-agent 否则一切都是浮云

以上的账号密码非正确只是演示以下具体过程,请自行去自己学校的教务网尝试

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值