首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >bugku&github自动签到脚本

bugku&github自动签到脚本

作者头像
R0A1NG
发布于 2022-02-19 02:07:04
发布于 2022-02-19 02:07:04
1K00
代码可运行
举报
文章被收录于专栏:R0A1NG 技术分享R0A1NG 技术分享
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# coding:utf-8
# @Time : 2021/4/1 21:59 
# @Author : R0A1NG
# @File : bugku自动签到.py 
# @Software: PyCharm
import requests
import urllib3
import re
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import time


def mailfs(nr):
    from_addr = 'xxxx1@qq.com'  # 邮件发送账号
    to_addrs = 'xxxx2@qq.com'  # 接收邮件账号
    qqCode = 'xxxxxxxxxxx'  # 授权码(这个要填自己获取到的)
    smtp_server = 'smtp.qq.com'  # 固定写死
    smtp_port = 465  # 固定端口
    
    # 配置服务器
    stmp = smtplib.SMTP_SSL(smtp_server, smtp_port)
    stmp.login(from_addr, qqCode)

    # 组装发送内容
    message = MIMEText(nr, 'plain', 'utf-8')  # 发送的内容
    message['From'] = Header("R0A1NG", 'utf-8')  # 发件人名字
    message['To'] = Header("R0A1NG", 'utf-8')  # 收件人名字
    message['Subject'] = Header('bugku签到任务', 'utf-8')  # 邮件标题

    try:
        stmp.sendmail(from_addr, to_addrs, message.as_string())
    except Exception as e:
        print('邮件发送失败--' + str(e))
    print('邮件发送成功')


urllib3.disable_warnings()

headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
                  "Chrome/87.0.4280.141 Safari/537.36 "
}


def checkin(s, bugkucookie):
    bugkucookie = bugkucookie.strip()
    global headers
    headers['cookie'] = bugkucookie
    url_qd = 'https://ctf.bugku.com/user/checkin'  # 签到页面
    req = requests.get(url=url_qd, headers=headers)
    if '签到成功' in req.text:
        with open('log/' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + '.txt', 'w') as f:
            f.write('签到成功' + req.text)
        aa = '签到成功'
    elif '已经签到' in req.text:
        with open('log/' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + '.txt', 'w') as f:
            f.write('你已签到' + req.text)
        aa = '你已签到'
    else:
        with open('log/' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + '.txt', 'w') as f:
            f.write('签到失败' + req.text)
        aa = '签到失败'

    r = requests.get('https://ctf.bugku.com/user/info/id/538.html', headers=headers)  # 个人信息页面
    r = r.text.replace('\n', '').replace('\r', '').replace(' ', '')

    mz = r'class="rounded-circle"alt="image"></figure><h5class="d-flexalign-items-centerjustify-content-center">(' \
         r'.*?)</h5><div> '
    mingz = re.compile(mz, re.S).findall(r)
    mingz = ''.join(mingz)

    zd = r'class="link-1">(.*?)</a></dd></dl><dl><dt>注册时间:</dt><dd>'
    zhand = re.compile(zd, re.S).findall(r)
    zhand = ''.join(zhand)

    jf = r'<h6>积分</h6><h4class="mb-0font-weight-bold">(.*?)</h4></div><divclass="col-6text-center"><h6>金币</h6>'
    jif = re.compile(jf, re.S).findall(r)
    jif = ''.join(jif)

    pm = r'<span>积分</span></div><divclass="col-4text-success"><h4class="font-weight-bold">(.*?)</h4><span>排名</span>'
    paim = re.compile(pm, re.S).findall(r)
    paim = ''.join(paim)

    jb = r'<span>排名</span></div><divclass="col-4text-warning"><h4class="font-weight-bold">(' \
         r'.*?)</h4><span>金币</span></div></div></div></div> '
    jinb = re.compile(jb, re.S).findall(r)
    jinb = ''.join(jinb)

    slnr = '用户名:' + mingz + '\r\n所属战队:' + zhand + '\r\n积分:' + jif + '\r\n排名:' + paim + '\r\n金币:' + jinb + '\r\n签到:' + aa
    print(slnr)
    # mailfs(slnr)


def main(git_cookie):
    s = requests.Session()
    global headers
    githubloginurl = "https://github.com" + \
                     s.get("https://ctf.bugku.com/login", headers=headers, verify=False, timeout=40).text.split(
                         'https://github.com')[1].rsplit('"')[0]
    # 填写你的github cookie 理论只需以下两段就行,并且以下两段的值是相同的。
    githubcookie = "user_session="+git_cookie+";" \
                   "__Host-user_session_same_site="+git_cookie+";"
    headers['cookie'] = githubcookie
    if (s.get("https://github.com/settings/profile", headers=headers, verify=False, timeout=30,
              allow_redirects=False).status_code != 200):
        print("github Cookie 失效")
    res = s.get(githubloginurl, headers=headers, verify=False, timeout=30)
    if "登录成功" in res.text:
        print("成功获取到Cookie")
        for bugkucookie in res.headers['Set-Cookie'].split(','):
            # print(bugkucookie)
            if ('PHPSESSID' in bugkucookie):
                checkin(s, bugkucookie)
                break
    elif "github.githubassets.com" in res.text:
        print("github 二次点击校验")
        form = res.text.split('<form action="')[1].split('<input type="hidden" name="scope"')[0]
        p = re.compile('name="(.*?)".*?value="(.*?)"')
        formdata = p.findall(form)
        data1 = {}
        for x in formdata:
            data1[x[0]] = x[1]
        data1['authorize'] = 1
        formurl = "https://github.com" + form.split('"')[0]
        headers = {
            "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
                          "Chrome/87.0.4280.141 Safari/537.36",
            "cookie": githubcookie
        }

        res = s.post(formurl, data=data1, headers=headers, verify=False, timeout=30)
        if "登录成功" in res.text:
            print("成功获取到Cookie")
            for bugkucookie in res.headers['Set-Cookie'].split(','):
                print(bugkucookie)
                if 'PHPSESSID' in bugkucookie:
                    checkin(s, bugkucookie)
                    break
        else:
            print("签到失败!")
            # mailfs('签到失败!')
    else:
        print("签到失败!")
        # mailfs('签到失败!)


if __name__ == '__main__':
    git_cookie = 'github的cookie'
    main(git_cookie)

建议脚本运行在国内,因为bugku貌似把国外屏蔽了。但是GitHub在国内经常被墙,需要自定义一下host,或者用github的镜像站,

脚本中需要设置github的cookie,如果需要邮箱提醒的话,需要设置收件人和发件人(默认已注释)。

  • 获取GitHub的cookie方法:
  • qq邮箱获取授权码:

进入设置-账户,开启POP3/SMTP服务,输入手机令牌或手机验证码,获得授权码,填入到代码中

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021 年 05 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
[Python] 超星学习通作业批量下载
# -*- coding: utf8 -*- #coder:nianboy #time:2022-7-14 import os import re import requests import pandas as pd class ChaoXingWork: def __init__(self, user, password): self.password = password self.user = user self.work_da
纯情
2023/04/27
4470
Python爬虫源码,抓取腾讯视频所有电影
Python现在非常火,语法简单而且功能强大,很多同学都想学Python!所以小的给各位看官们准备了高价值Python学习视频教程及相关电子版书籍,都放在了文章结尾,欢迎前来领取!
python学习教程
2019/07/10
1.2K0
Python爬虫源码,抓取腾讯视频所有电影
python3爬电影天堂
经常在里面用迅雷下电影天堂,为了让自己省事写了个爬虫按照排名下载地址 import requests import re #changepage用来产生不同页数的链接 def changepage(url,total_page): page_group = ['https://www.dygod.net/html/gndy/jddy/index.html'] for i in range(2,total_page+1): link = re.sub('jddy/index',
IT架构圈
2018/06/01
6290
Python爬取美女图片 爬虫基础
作为一个考研狗,每天除了日复一日的复习外,偶尔也想给自己寻找一些生活的小乐趣,今天突然想到了自己曾经稍微接触的爬虫,想看看可以爬取些图片放到电脑上,就花了些时间改了改之前的爬虫代码,爬取了一部分照片先量一下战绩吧。照片不多但也算是自己的一次爬虫小经验。
全栈程序员站长
2022/09/13
7490
python爬虫入门之爬万本书籍
Python现在非常火,语法简单而且功能强大,很多同学都想学Python!所以小的给各位看官们准备了高价值Python学习视频教程及相关电子版书籍,都放在了文章结尾,欢迎前来领取!
python学习教程
2019/07/10
9660
python爬虫入门之爬万本书籍
python爬虫与数据可视化书(python大数据可视化)
之前写过篇爬取前程无忧职位信息并保存到Excel的博客, 这里仔细的讲讲并且增加可视化内容
全栈程序员站长
2022/07/28
9480
python爬虫与数据可视化书(python大数据可视化)
python爬虫实例
参考: https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/#find-all
cuijianzhe
2022/06/14
6270
python爬虫实例
正则表达式
pat=re.compile(r"Python",re.I) #模式修正符:忽略大小写
yuanshuai
2022/08/22
3830
python爬虫,从sohu上抓小说《人形软件》
上次发的从sina上抓小说的代码,这次来一个sohu的,不过总结python爬虫的方法,其实无外乎urllib和正则表达式的使用。掌握了这俩,基本就是有了就抓。 直接上代码了,以下代码仅供参考,切不可用于非法用途。
the5fire
2019/02/28
5850
爬虫 | urllib入门+糗事百科实战
所谓爬虫(crawler),是指一只小虫子,在网络中爬行,见到有用的东西就会把它拿下来,是我们获取信息的一个重要途径。平常使用的浏览器,它的背后就是一个巨大的爬虫框架,输入我们想要查找的信息,帮我们爬取下来。今天就从较为简单的urllib爬虫开始介绍。
小小詹同学
2021/04/19
4030
爬虫 | urllib入门+糗事百科实战
爱看小说的有福了......
利用Python3 编写爬虫,从笔趣阁爬小说,可以下载到手机看。 运行截图: 程序实现如下: ---有点小bug,不过无所谓了。。。 import re import urllib.request i
张树臣
2018/05/15
8930
python爬取电影信息
小王不头秃
2024/06/19
2830
Python爬虫获取豆瓣TOP250电影详情
偶然间看到豆瓣电影的TOP250榜单,于是突发奇想写了这个爬虫脚本。将通过爬取豆瓣电影TOP250的榜单列表获取电影详情页的URL,然后再爬取电影详情页URL中的内容,最终获得电影的名称,导演,演员,类别,制片国家/地区,语言,上映日期,片长和剧情简介等信息,经过一系列的处理后输出。
泰坦HW
2020/07/22
2.2K0
Python爬虫获取豆瓣TOP250电影详情
闯越顶岗实习app自动签到小脚本 python
今天下午摸鱼的时候突发奇想搞个顶岗实习签到小脚本玩玩,说干就干,造就完了 下面是完整的代码,基本改改就能用了,需要在同级目录下准备一个1.txt文件,存放用户名和密码, 用空格分隔 账号和密码 例子如下 username password 如果不需要邮件通知可以直接在最后面吧email函数注释即可 其中re用于提取用户以及签到状态记录日志邮件通知 calendar用于获取月份最后一天用于月报提交 random 随机抽取签到留言 time 计时 没了 # -*- coding: utf-8 -*-
kirin
2020/12/07
3.4K1
pyhton爬虫学习
data参数如果要传必须传bytes(字节流)类型的,如果是一个字典,先用urllib.parse.urlencode()编码。
Echo_Wish
2023/11/30
1600
pyhton爬虫学习
一文带你了解Python爬虫(二)——四种常见基础爬虫方法介绍
–Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库 –urllib还是非常不方便的,而Requests它会比urllib更加方便,可以节约我们大量的工作。 –requests是python实现的最简单易用的HTTP库,建议爬虫使用requests库。 –默认安装好python之后,是没有安装requests模块的,需要单独通过pip安装
诡途
2020/10/16
1.4K0
Python网络爬虫(正则, 内涵段子,猫眼电影, 链家爬取)
正则表达式(re模块): 数据的分类: 结构化数据 有固定的格式 如HTML、XML、JSON 非结构化数据 图片、音频、视频 这类数据一般存储为二进制 正则: 使用流程: 创建编译对象:p = re.compile("正则表达式") 对字符串匹配:r = p.match("字符串") 获取匹配结果:print(r.group()) 常用方法: match(str) 字符串开头的第一个 返回对象 search(str) 从头开始匹配 只匹配一个 返回对象 group() 从match或search对象中取值
wo.
2021/06/15
6300
Python爬虫(全)
里面的parse方法,这个方法有两个作用 1.负责解析start_url下载的Response 对象,根据item提取数据(解析item数据的前提是parse里全部requests请求都被加入了爬取队列) 2.如果有新的url则加入爬取队列,负责进一步处理,URL的Request 对象 这两点简单来说就是编写爬虫的主要部分
yuanshuai
2022/08/22
13.3K0
Python爬虫(全)
python网络爬虫--简单爬取糗事百科
  刚开始学习python爬虫,写了一个简单python程序爬取糗事百科。   具体步骤是这样的:首先查看糗事百科的url:http://www.qiushibaike.com/8hr/page/2/
用户2038589
2018/09/06
5190
python网络爬虫--简单爬取糗事百科
Python实现超简单【抖音】无水印视频批量下载
导读:本文介绍了如何使用简单的Python爬虫爬取抖音上你喜欢的拍客的所有视频(包含有水印和无水印两种)。
我被狗咬了
2020/05/29
5.3K1
Python实现超简单【抖音】无水印视频批量下载
相关推荐
[Python] 超星学习通作业批量下载
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档