GithubHelp home page GithubHelp logo

auto-submit's Introduction

auto-submit

禁止任何人使用此项目提供付费的代挂服务

今日校园每日自动提交疫情上报py脚本,支持邮件推送提交结果消息,支持几乎所有学校(今日校园)

使用了此脚本或者参考了这个项目,请自觉给项目点个star

本项目仅供学习交流使用,如作他用所承受的任何直接、间接法律责任一概与作者无关

如果此项目侵犯了您或者您公司的权益,请立即联系我删除

99%的问题都可以通过仔细阅读readme(使用说明,也叫项目说明)解决

欢迎各位同学加入交流群:870967170 进群答案:子墨

因为一些原因,今日校园疫情收集表,签到,查寝等相关项目不再维护和更新

项目说明

  • config.yml 默认配置文件
  • config_xxxx.yml xx学校的配置文件,xxxx是学校英文简称
  • index.py 完成自动提交的py脚本
  • generate.py 帮助生成默认项配置的py脚本
  • requirements.txt py依赖库以及版本说明文件
  • currentcy 通用脚本

导航

  1. 信息收集,此项目
  2. 签到,auto-sign项目
  3. 查寝,auto-attendance项目

使用方式

首先确定云端系统是否可使用

大部分学校没有禁用学生账号登录云端系统,只有少部分学校禁用了

方式一:速查

在readme的比较靠后的位置,我写了一个我测试过的云端系统被禁用或者没被禁用的表格,部分学校的同学,直接搜索就可以知道你们学校是否被禁用云端系统

方式二:自查

  1. config.yml中填好学校名称
  2. 执行index.py,会报错,因为你只填了学校信息,不用管他,然后你会得到类似下面这样的输出
    2020-09-18 10:35:35 {'login-url': 'http://authserver.yibinu.edu.cn/authserver/login?service=https%3A%2F%2Fyibinu.cpdaily.com%2Fportal%2Flogin', 'host': 'yibinu.cpdaily.com'}
    
    从这个里面拿出host的值yibinu.cpdaily.com
  3. 打开浏览器(最好是chrome内核的浏览器),输入上面拿到的host的值,按enter
  4. 尝试使用用户名(学号或者工号)密码登录,如果登录成功,代表没有被禁用,如果看到了类似于下面这样的提示,代表被禁用 云端被禁用

方式三:模拟登陆api的返回结果

  1. config.yml中填好用户名(学号或者工号),密码,学校等
  2. 执行index.py,大概率会报错,因为你没有配置表单默认值信息,不用管他,然后你会得到类似下面这样的输出
    2020-09-18 10:57:05 {'msg': 'login failed! 登陆失败,cookies返回为null', 'code': 1, 'cookies': None}
    
    从这个里面拿出msg的值login failed! 登陆失败,cookies返回为null
  3. cookies返回为null就代表云端系统被禁用了
  4. 如果你得到的msg是请联系开发者,这代表模拟登陆api可能暂时不适用于你们学校,这时候如果你有能力自行改写适配,可以参考模拟登陆api的项目设计思路,自己完成适配;如果没有,可以联系我,捐赠适配,Q:461009747

然后分情况使用

第一种情况,云端系统可用,那么你可以直接看下面的云端系统可用(配合腾讯云函数)的操作步骤,或者如果你自己有服务器,也完全可以使用定时任务挂在你自己的服务器上

云端系统可用(配合腾讯云函数)

  1. clone 或者 下载 此仓库到本地
    git clone https://github.com/ZimoLoveShuang/auto-submit.git
  2. 打开本地仓库文件夹,配置config.yml中对应的学号(username)和密码(password)还有地址(address)等等信息,详情请看config.yml中的注释说明,注意这里的学号和密码都是智慧校园的学号和密码
  3. 打开百度搜索腾讯云函数,注册认证后,进入控制台,点击左边的层,然后点新建,名称随意,然后点击上传zip,选择release中的dependency.zip上传,然后选择运行环境python3.6,然后点击确定,耐心等待一下,上传依赖包需要花费的时间比较长 新建腾讯云函数依赖
  4. 点左边的函数服务,新建云函数,名称随意,运行环境选择python3.6,创建方式选择空白函数,然后点击下一步 新建腾讯云函数
  5. 提交方法选择在线编辑,把本地修改好的index.py直接全文复制粘贴到云函数的index.py,然后点击文件->新建,文件名命名为config.yml,然后把本地配置好的config.yml文件中的内容直接全文复制粘贴到云函数的config.yml文件,点击下面的高级设置,设置超时时间为60秒,添加层为刚刚新建的函数依赖层,然后点击完成 配置腾讯云函数
  6. 进入新建好的云函数,左边点击触发管理,点击创建触发器,名称随意,触发周期选择自定义,然后配置cron表达式,下面的表达式表示每天中午十二点整执行
    0 0 12 * * * *
  7. 然后就可以测试云函数了,绿色代表云函数执行成功,红色代表云函数执行失败(失败的原因大部分是由于依赖造成的)。返回结果是success.,代表自动提交成功,如遇到问题,请仔细查看日志
  8. enjoy it!
  9. 也可配合Windows计划任务或者使用linux定时任务,将脚本挂在自己的云服务器上,不会就搜索一下,过程不再赘述

第二种情况,云端系统不可用(被禁用),这种情况就只能使用通用脚本了,同样可以挂在腾讯云函数,或者你自己的服务器上

云端系统不可用,需使用通用脚本,参考步骤如下

  1. clone 或者 下载 此仓库到本地
    git clone https://github.com/ZimoLoveShuang/auto-submit.git
  2. 进入auto-submit目录下,安装依赖,命令pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple
  3. 打开本地仓库文件夹下的currency文件夹,配置config.yml
  4. 本地执行python login.py获取到sessionTokenacw_tcMOD_AUTH_CASCpdailyInfo,填入currency/index.py对应位置
  5. 配置腾讯云函数,依赖层配置和上面一样,提交方法选择提交文件夹,请选择currency文件夹,触发管理和上面一样
  6. enjoy it!!!
  7. 注意:如果你本地有多个python环境,请使用python3和pip3

一些使用建议(非常重要,请仔细阅读)

如果你不会配置表单组默认选项配置,请先配置好user信息之后本地执行generate.py,根据提示信息手动输入,然后将分割线下的内容复制到配置文件中对应位置

如果问题中有省市县三级联动的位置,按xx省/xx市/xx县这个格式输入文本即可

除非问题和答案都完全一样,否则不建议使用多用户配置

目前测试发现云端系统未被禁用的学校

学校名称 学校英文简称 加入今日校园的方式
宜宾学院 yibinu NOTCLOUD
安徽农业大学经济技术学院 jjjs CLOUD
**矿业大学 cumt NOTCLOUD
惠州市技师学院 hzti CLOUD
西南大学 swu NOTCLOUD
长江师范学院 yznu NOTCLOUD
新乡医学院 xxmu CLOUD
天津天狮学院 tianshi CLOUD
河南大学 henu NOTCLOUD
韩山师范学院 hstc CLOUD
白城师范学院 bcnu NOTCLOUD
成都师范学院 cdsf CLOUD
江西理工大学 jxust NOTCLOUD
南京农业大学 njau NOTCLOUD
贵州医科大学 gmc NOTCLOUD
大连海洋大学 dlou CLOUD
广东工贸职业技术学院 gdgm NOTCLOUD
合肥工业大学 hfut CLOUD
河南中医药大学 hactcm NOtCLOUD
新乡学院 xxu CLOUD
华侨大学 hqu NOTCLOUD
滁州职业技术学院 chzc CLOUD
大连大学 dlu CLOUD
江西理工大学应用科学学院 jxust NOTCLOUD
四川建筑职业技术学院 scac NOTCLOUD
福建医科大学 fjmu NOTCLOUD
四川信息职业技术学院 scitc NOTCLOUD
广州大学华软软件学院 sise CLOUD
贵州交通职业技术学院 gzjtzy NOTCLOUD
南京城市职业学院 ncc CLOUD
云南财经大学 ynufe NOTCLOUD
**财经大学 xjufe NOTCLOUD
安阳师范学院 aynu NOTCLOUD
华北电力大学(保定) ncepu NOTCLOUD
重庆医科大学 cqmu CLOUD

目前测试发现云端系统被禁用的学校

未通过的原因是由于学生账号被禁用云(web)端系统,而不是模拟登陆api不适用金智统一认证系统,不过这没有关系,依然可以使用currency下的通用脚本(重点:可能是完全通用,请注意完全通用这四个字,毕竟我模拟了整个今日校园app的认证和提交行为)

学校名称 学校英文简称 加入今日校园的方式
福州大学 fzu NOTCLOUD
临沂大学 lyu NOTCLOUD
桂林师范高等专科学校 glnc NOTCLOUD

说明

  1. 此项目默认配置适用于宜宾学院学子,也欢迎其他学校同学提交适合自己学校的配置,命名为config_学校英文简称.yml,示例:config_hzti.yml,hzti是惠州市技师学院的英文简称,不需要抓包
  2. 此项目依赖python3.8运行环境,如没有,自行安装
  3. 此项目依赖PyYAML oss2 urllib requests json 等python库,如没有,自行安装,参考命令
    pip install -r requirements.txt -t . -i https://mirrors.aliyun.com/pypi/simple
  4. 此项目依赖上一个爬虫项目宜宾学院教务系统成绩爬虫,开放的登陆api
  5. 此项目默认提交全部正常的情况,如果有其他情况,请自行在今日校园app上提交

设计思路

  1. 模拟登陆
  2. 获取表单
  3. 填充表单
  4. 提交表单
  5. 推送消息

关于模拟登陆API的说明

请看wisedu-unified-login-api项目

关于金智教务系统的说明

  1. 学校接入金智系统的方式有两种:CLOUDNOTCLOUD
  2. CLOUD方式对应的教务系统登陆页通常以/iap/login结尾
  3. NOTCLOUD方式对应的教务系统登陆页通常以/authserver/login结尾
  4. 目前以上两种接入方式,我提供的模拟登陆API都能支持
  5. 以上两种接入方式,登陆原理均为CAS,接口略有一点不同,但大同小异

其他

  1. 关于Cpdaily-Extension:今日校园APP的处理是登陆时获取,每台设备唯一,但是有个空子就是,只要你不退出登陆,这个就会一直被维持,一直有效,换句话说,就是在APP上手动退出后失效,所以无需重复抓包获取
  2. 关于抓包:今日校园APP某些接口启动了ssl pinning机制,一般的方法无法抓包
  3. 提供一个参考的 绕过 ssl pinning机制的方法:使用逍遥安卓4.4.4模拟器,配合xposed框架,使用justtrustme模块hook掉验证证书的函数即可抓包
  4. 此项目为自动提交疫情收集表,自动签到请参考另一个开源项目auto-sign

反馈bug或者小问题 请提供完整运行日志

更新日志

  • 2020-09-18 新增表单适配类型type5,新增自行验证云端系统是否被禁用的说明
  • 2020-09-08 更新自动获取今日校园api的函数,抛出异常
  • 2020-08-28 适配**矿业大学更新后的认证系统
  • 2020-08-27 可能这次真的通用所有在今日校园提交信息收集表学校了
  • 2020-08-23 修复云南财经大学自动获取的登陆地址不正确问题
  • 2020-08-07 账号和密码都统一使用英文单引号引起来,避免某些账号会出现yml读取的内容错误的问题
  • 2020-08-05 福州大学的学子不再需要手动抓包,基本完美使用
  • 2020-07-31 修复某些学校校验了非必填项导致提交失败的问题
  • 2020-07-25 新增针对福州大学的一些脚本,不完美
  • 2020-07-17 优化自动获取登陆地址的函数,处理某些学校转发到另一个域名去进行登陆认证的情况
  • 2020-07-12 新增对配置文件默认项不正确的检查,并提示
  • 2020-07-09 由于根据joinType确定的登陆地址不准确,所以将自动确定登陆地址的方式,改为根据关键字确定
  • 2020-07-07 新增帮助生成默认项配置的脚本,进一步降低使用难度
  • 2020-07-05 打包好云函数依赖,便于将脚本部署在腾讯云函数上定时执行
  • 2020-07-04 完善自动填写表单函数,增加对文本,多选,图片等表单内容的支持;其他学校的学子不需要再自己抓包,通过简化的配置文件配置完成之后即可使用,降低使用难度
  • 2020-06-15 加入多用户配置,去掉容易死的休眠策略,配置文件改为yml方式,更直观,恢复默认值配置,配合log输出日志,方便debug
  • 2020-06-03 去掉比较难配置的微信消息推送,改为开放邮件服务,由邮件推送消息
  • 2020-05-31 由于高并发,导致提供模拟登陆API的服务器崩溃,于是尝试封禁白嫖党
  • 2020-05-27 去掉繁琐的默认项配置,加入消息推送配置
  • 2020-05-13 开源模拟登陆api
  • 2020-04-26 优化自动填充表单的函数
  • 2020-04-25 更新配置文件,使脚本支持大部分学校
  • 2020-04-13 重构项目编码,抽取函数
  • 2020-03-27 更新提交的表单项,适应金智更新后的接口验证
  • 2020-03-18 抓到获取wid的接口,脚本不再暴力尝试,支持提交位置信息
  • 2020-03-14 发布暴力尝试脚本

致谢

@suqir @所有捐赠作者的朋友 @所有支持作者的朋友 @所有贡献出服务器的热心网友 @所有贡献出邮箱的热心网友 @所有反馈的朋友 @所有测试的朋友

回答一些问题

1. 为什么登陆api是用java写的,而此项目是用python写的?

三月初的时候,我是先用java写了宜宾学院的教务系统成绩单爬虫,然后回过头来才写的这个脚本,另一方面,java处理这样的数据,会显得过于冗余,要写的代码会多很多(我想偷懒)

2. 为什么要抽取出登陆过程作为另一个项目?

答案跟上面差不多,其实是写过一遍登陆过程了,懒得再写第二遍。另外,抽取出来有一个好处,就是模块化,可以在不影响这个项目的情况下,升级登陆api,便于更新和维护

3. 为什么代码写的这么烂?

其实是我没学过python,这应该算是我用python写的第一个小项目吧,还挺好用的,没有上手难度,拿到就能写

4. 为什么去掉了微信消息推送?

其实是有不少人跟我反馈微信消息推送配置要自己手动操作几步,嫌麻烦,不如直接输入个邮箱地址,来得方便,所以我就开放了邮件服务,其实QQ邮件也可以发送到微信通知,去邮箱app设置就好了,可以参考https://jingyan.baidu.com/article/d5a880ebccafd813f147ccb0.html,另外,如果想要微信消息推送,也可以跟我联系,如果人多,我就考虑更新,因为我找到了一个比server酱更好的解决方案,也不需要大家配置什么,大概的操作过程就是微信扫码,关注公众号,然后会收到一个key,将这个key放到配置文件,基本上就像输入邮件地址一样简单方便

5. 邮件接口有次数限制吗?

有,每个邮箱地址每天上限10条,0点刷新,正常使用完全够了,加入限制主要是 为了防止接口被滥用,毕竟这是我的私人邮箱

请作者喝杯奶茶?

auto-submit's People

Contributors

zimoloveshuang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

auto-submit's Issues

12.10失效

Traceback (most recent call last):
File "/opt/urllib3/util/connection.py", line 61, in create_connection
for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
File "/var/lang/python3/lib/python3.6/socket.py", line 743, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/opt/urllib3/connectionpool.py", line 672, in urlopen
chunked=chunked,
File "/opt/urllib3/connectionpool.py", line 376, in _make_request
self._validate_conn(conn)
File "/opt/urllib3/connectionpool.py", line 994, in _validate_conn
conn.connect()
File "/opt/urllib3/connection.py", line 300, in connect
conn = self._new_conn()
File "/opt/urllib3/connection.py", line 169, in _new_conn
self, "Failed to establish a new connection: %s" % e
urllib3.exceptions.NewConnectionError: <urllib3.connection.VerifiedHTTPSConnection object at 0x7f80e71f2748>: Failed to establish a new connection: [Errno -2] Name or service not known

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/opt/requests/adapters.py", line 449, in send
timeout=timeout
File "/opt/urllib3/connectionpool.py", line 720, in urlopen
method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]
File "/opt/urllib3/util/retry.py", line 436, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='www.cpdaily.com', port=443): Max retries exceeded with url: /v6/config/guest/tenant/list (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7f80e71f2748>: Failed to establish a new connection: [Errno -2] Name or service not known',))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/var/runtime/python3/bootstrap.py", line 176, in handle
ret = self.real_handler(event, context)
File "/var/user/index.py", line 380, in main_handler
raise e
File "/var/user/index.py", line 343, in main_handler
apis = getCpdailyApis(user)
File "/var/user/index.py", line 38, in getCpdailyApis
url='https://www.cpdaily.com/v6/config/guest/tenant/list', verify=not debug).json()['data']
File "/opt/requests/api.py", line 76, in get
return request('get', url, params=params, **kwargs)
File "/opt/requests/api.py", line 61, in request
return session.request(method=method, url=url, **kwargs)
File "/opt/requests/sessions.py", line 530, in request
resp = self.send(prep, **send_kwargs)
File "/opt/requests/sessions.py", line 643, in send
r = adapter.send(request, **kwargs)
File "/opt/requests/adapters.py", line 516, in send
raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='www.cpdaily.com', port=443): Max retries exceeded with url: /v6/config/guest/tenant/list (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7f80e71f2748>: Failed to establish a new connection: [Errno -2] Name or service not known',))

手机上打卡的表单是隐藏的,但是这里要填写

在手机上第二个问题是在答第一个问题后自动隐藏起来了,直接跳转到第三题,但是在这里没法跳过

2022-01-10 07:34:47 V1.7.0 开始尝试登录账号
2022-01-10 07:34:49 V1.7.0 开始执行收集任务
2022-01-10 07:34:50 V1.7.0 Error:
第2个配置项的选项不正确,该选项为必填单选

隐藏后
隐藏前

我添加了hosts,依然运行报错。

2022-01-06 17:16:52 当前用户:161105024
Traceback (most recent call last):
File "C:\Users\小明\Desktop\auto-submit-master\index.py", line 388, in
print(main_handler({}, {}))
File "C:\Users\小明\Desktop\auto-submit-master\index.py", line 381, in main_handler
raise e
File "C:\Users\小明\Desktop\auto-submit-master\index.py", line 344, in main_handler
apis = getCpdailyApis(user)
File "C:\Users\小明\Desktop\auto-submit-master\index.py", line 37, in getCpdailyApis
schools = requests.get(
File "D:\Program Files\Python39\lib\site-packages\requests\models.py", line 910, in json
return complexjson.loads(self.text, **kwargs)
File "D:\Program Files\Python39\lib\json_init_.py", line 346, in loads
return _default_decoder.decode(s)
File "D:\Program Files\Python39\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "D:\Program Files\Python39\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

错误是请提交正确的信息收集信息

2022-01-12 15:50:59 模拟登陆成功。。。
2022-01-12 15:50:59 正在查询最新待填写问卷。。。
2022-01-12 15:51:00 查询最新待填写问卷成功。。。
2022-01-12 15:51:00 正在自动填写问卷。。。
2022-01-12 15:51:00 必填问题1:公共场所保洁服务
2022-01-12 15:51:00 答案1:
2022-01-12 15:51:00 必填问题2:楼宇管理综合服务
2022-01-12 15:51:00 答案2:
2022-01-12 15:51:00 必填问题3:会务服务管理
2022-01-12 15:51:00 答案3:
2022-01-12 15:51:00 必填问题4:会务服务管理服务
2022-01-12 15:51:00 答案4:
2022-01-12 15:51:00 必填问题5:您对物业服务管理的综合评价
2022-01-12 15:51:00 答案5:
2022-01-12 15:51:00 必填问题6:您对物业服务管理的意见与建议
2022-01-12 15:51:00 答案6:满意
2022-01-12 15:51:00 必填问题7:室内花卉养护管理
2022-01-12 15:51:00 答案7:
2022-01-12 15:51:00 必填问题8:室外绿化养护管理
2022-01-12 15:51:00 答案8:
2022-01-12 15:51:00 必填问题9:园林绿化设施维修管理
2022-01-12 15:51:00 答案9:
2022-01-12 15:51:00 必填问题10:树木(含行道树)管理
2022-01-12 15:51:00 答案10:
2022-01-12 15:51:00 必填问题11:您对绿化养护服务管理的综合评价
2022-01-12 15:51:00 答案11:
2022-01-12 15:51:00 必填问题12:您对绿化养护服务管理的意见与建议
2022-01-12 15:51:00 答案12:满意
2022-01-12 15:51:00 必填问题13:规定供餐时间(早06:30-08:30 午餐11:00-13:00晚17:00-19:00)
2022-01-12 15:51:00 答案13:
2022-01-12 15:51:00 必填问题14:主副食品品种(早餐主食品种至少20种以上;副食品至少15种以上;中餐主食品至少8种以上,副食品至少30种以上;晚餐主食品至少6种以上,副食品至少25种以上;)
2022-01-12 15:51:00 答案14:
2022-01-12 15:51:00 必填问题15:明码标价(餐厅食品售卖窗口公示饭菜价格。)
2022-01-12 15:51:00 答案15:
2022-01-12 15:51:00 必填问题16:免费汤供应(免费汤的质量与足量供应)
2022-01-12 15:51:00 答案16:
2022-01-12 15:51:00 必填问题17:餐厅地面、桌椅、托盘、碗筷、汤勺、后厨用具卫生(餐厅每周消毒、餐桌椅和托盘等餐用具每餐擦拭,碗筷和汤勺每餐清洗、高温消毒。)
2022-01-12 15:51:00 答案17:
2022-01-12 15:51:00 必填问题18:员工服务态度与质量(①文明规范用语;②服务周到;③结算快速准确。)
2022-01-12 15:51:00 答案18:
2022-01-12 15:51:00 必填问题19:服务员工规定着装(上班时间员工戴口罩和帽子,穿工作服,不得穿拖鞋的规定。)
2022-01-12 15:51:00 答案19:
2022-01-12 15:51:00 必填问题20:您对南区食堂(福州中快餐饮管理有限公司)的综合评价
2022-01-12 15:51:00 答案20:
2022-01-12 15:51:00 必填问题21:您对南区食堂(福州中快餐饮管理有限公司)的意见与建议
2022-01-12 15:51:00 答案21:满意
2022-01-12 15:51:00 必填问题22:规定供餐时间(早06:30-08:30 午餐11:00-13:00晚17:00-19:00)
2022-01-12 15:51:00 答案22:
2022-01-12 15:51:00 必填问题23:主副食品品种(早餐主食品种至少20种以上;副食品至少15种以上;中餐主食品至少8种以上,副食品至少30种以上;晚餐主食品至少6种以上,副食品至少25种以上;)
2022-01-12 15:51:00 答案23:
2022-01-12 15:51:00 必填问题24:明码标价(餐厅食品售卖窗口公示饭菜价格。)
2022-01-12 15:51:00 答案24:
2022-01-12 15:51:00 必填问题25:免费汤供应(免费汤的质量与足量供应)
2022-01-12 15:51:00 答案25:
2022-01-12 15:51:00 必填问题26:餐厅地面、桌椅、托盘、碗筷、汤勺、后厨用具卫生(餐厅每周消毒、餐桌椅和托盘等餐用具每餐擦拭,碗筷和汤勺每餐清洗、高温消毒。)
2022-01-12 15:51:00 答案26:
2022-01-12 15:51:00 必填问题27:员工服务态度与质量(①文明规范用语;②服务周到;③结算快速准确。)
2022-01-12 15:51:00 答案27:
2022-01-12 15:51:00 必填问题28:服务员工规定着装(上班时间员工戴口罩和帽子,穿工作服,不得穿拖鞋的规定。)
2022-01-12 15:51:00 答案28:
2022-01-12 15:51:00 必填问题29:您对北区食堂(福建品膳餐饮管理有限公司)的综合评价
2022-01-12 15:51:00 答案29:
2022-01-12 15:51:00 必填问题30:您对北区食堂(福建品膳餐饮管理有限公司)的意见与建议
2022-01-12 15:51:00 答案30:满意
2022-01-12 15:51:00 填写问卷成功。。。
2022-01-12 15:51:00 正在自动提交。。。
2022-01-12 15:51:00 自动提交失败。。。
2022-01-12 15:51:00 错误是请提交正确的信息收集信息
邮件发送成功

关于模拟登录api

Readme里“教务系统登录爬虫”的那个连接挂掉了,没太搞得明白模拟登录api的地址应该怎么抓,目前抓到了login_url,iOS端今日校园。

关于福州大学的提交问题

按照教程修改了配置文件获取cookies等,能够正常运行,但是提交是失败的,返回值是submit fail,请问是什么问题?
Snipaste_2020-09-05_23-15-34

本地执行generate错误

Traceback (most recent call last):
File "F:/auto-submit-master/generate.py", line 63, in
generate()
File "F:/auto-submit-master/generate.py", line 12, in generate
form = dict(app.queryForm(session, apis))['form']
File "F:\auto-submit-master\index.py", line 145, in queryForm
if len(res.json()['datas']['rows']) < 1:
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\site-packages\requests\models.py", line 898, in json
return complexjson.loads(self.text, **kwargs)
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\json_init_.py", line 348, in loads
return _default_decoder.decode(s)
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Process finished with exit code 1

之前还能正常运行,但是今天打卡出现配置错误,我打算重新运行配置一下就出现这样的错误了,云函数上似乎也突然获取不到表单了

测试出错问题

{"errorCode":-1,"errorMessage":"Traceback (most recent call last):\n File "/var/runtime/python3/bootstrap.py", line 133, in init_handler\n func_handler = get_func_handler(file.rsplit(".", 1)[0], func)\n File "/var/runtime/python3/bootstrap.py", line 159, in get_func_handler\n mod = imp.load_module(mname, *imp.find_module(mname))\n File "/var/lang/python3/lib/python3.6/imp.py", line 234, in load_module\n return load_source(name, filename, file)\n File "/var/lang/python3/lib/python3.6/imp.py", line 172, in load_source\n module = _load(spec)\n File "Ϗrozen; importlib._bootstrap>", line 675, in _load\n File "Ϗrozen; importlib._bootstrap>", line 655, in _load_unlocked\n File "Ϗrozen; importlib._bootstrap_external>", line 678, in exec_module\n File "Ϗrozen; importlib._bootstrap>", line 205, in _call_with_frames_removed\n File "/var/user/index.py", line 21, in <module;>\n config = getYmlConfig(yaml_file='config.yml')\n File "/var/user/index.py", line 16, in getYmlConfig\n config = yaml.load(file_data, Loader=yaml.FullLoader)\n File "/var/user/yaml/init.py", line 114, in load\n return loader.get_single_data()\n File "/var/user/yaml/constructor.py", line 49, in get_single_data\n node = self.get_single_node()\n File "/var/user/yaml/composer.py", line 36, in get_single_node\n document = self.compose_document()\n File "/var/user/yaml/composer.py", line 55, in compose_document\n node = self.compose_node(None, None)\n File "/var/user/yaml/composer.py", line 84, in compose_node\n node = self.compose_mapping_node(anchor)\n File "/var/user/yaml/composer.py", line 133, in compose_mapping_node\n item_value = self.compose_node(node, item_key)\n File "/var/user/yaml/composer.py", line 84, in compose_node\n node = self.compose_mapping_node(anchor)\n File "/var/user/yaml/composer.py", line 133, in compose_mapping_node\n item_value = self.compose_node(node, item_key)\n File "/var/user/yaml/composer.py", line 82, in compose_node\n node = self.compose_sequence_node(anchor)\n File "/var/user/yaml/composer.py", line 110, in compose_sequence_node\n while not self.check_event(SequenceEndEvent):\n File "/var/user/yaml/parser.py", line 98, in check_event\n self.current_event = self.state()\n File "/var/user/yaml/parser.py", line 393, in parse_block_sequence_entry\n "expected ϋlock; end>, but found %r" % token.id, token.start_mark)\nyaml.parser.ParserError: while parsing a block collection\n in "<unicode; string>", line 35, column 5:\n - default:\n ^\nexpected ϋlock; end>, but found 'ϋlock; sequence start>'\n in "<unicode; string>", line 62, column 6:\n - default:\n ^","statusCode":443}

python报错

`Traceback (most recent call last):
File "C:\Users\p\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\connection.py", line 156, in _new_conn
conn = connection.create_connection(
File "C:\Users\p\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\util\connection.py", line 61, in create_connection
for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
File "C:\Users\p\AppData\Local\Programs\Python\Python38\lib\socket.py", line 918, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno 11001] getaddrinfo failed

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\p\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\connectionpool.py", line 665, in urlopen
httplib_response = self._make_request(
File "C:\Users\p\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\connectionpool.py", line 376, in _make_request
self._validate_conn(conn)
File "C:\Users\p\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\connectionpool.py", line 994, in _validate_conn
conn.connect()
File "C:\Users\p\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\connection.py", line 300, in connect
conn = self._new_conn()
File "C:\Users\p\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\connection.py", line 168, in _new_conn
raise NewConnectionError(
urllib3.exceptions.NewConnectionError: <urllib3.connection.VerifiedHTTPSConnection object at 0x0000023FA491F2E0>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\p\AppData\Local\Programs\Python\Python38\lib\site-packages\requests\adapters.py", line 439, in send
resp = conn.urlopen(
File "C:\Users\p\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\connectionpool.py", line 719, in urlopen
retries = retries.increment(
File "C:\Users\p\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\util\retry.py", line 436, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='www.cpdaily.com', port=443): Max retries exceeded with url: /v6/config/guest/tenant/list (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x0000023FA491F2E0>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "E:\Downloads\auto-submit-master\currency\login.py", line 75, in
apis = getCpdailyApis(user)
File "E:\Downloads\auto-submit-master\currency\login.py", line 29, in getCpdailyApis
schools = requests.get(url='https://www.cpdaily.com/v6/config/guest/tenant/list', verify=not debug).json()['data']
File "C:\Users\p\AppData\Local\Programs\Python\Python38\lib\site-packages\requests\api.py", line 76, in get
return request('get', url, params=params, **kwargs)
File "C:\Users\p\AppData\Local\Programs\Python\Python38\lib\site-packages\requests\api.py", line 61, in request
return session.request(method=method, url=url, **kwargs)
File "C:\Users\p\AppData\Local\Programs\Python\Python38\lib\site-packages\requests\sessions.py", line 530, in request
resp = self.send(prep, **send_kwargs)
File "C:\Users\p\AppData\Local\Programs\Python\Python38\lib\site-packages\requests\sessions.py", line 643, in send
r = adapter.send(request, **kwargs)
File "C:\Users\p\AppData\Local\Programs\Python\Python38\lib\site-packages\requests\adapters.py", line 516, in send
raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='www.cpdaily.com', port=443): Max retries exceeded with url: /v6/config/guest/tenant/list (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x0000023FA491F2E0>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed'))
`

对login的建议

# 6. 直接将获取的数据存入index.py
filename="index.py"
i=0
with open(filename,'r',encoding='utf-8') as r:
    lines=r.readlines()
    for line in lines:
        if "Cookies" in line:
            lines[i]="Cookies = "+ str(requests.utils.dict_from_cookiejar(session.cookies))+"\n"
        if "sessionToken" in line:
            lines[i]="sessionToken = '" + sessionToken + "'\n"
        if "CpdailyInfo" in line:
            lines[i]="CpdailyInfo = '" + CpdailyInfo + "'\n"
            break
        i=i+1
with open(filename,'w',encoding='utf-8') as r:
    for line in lines:
        r.write(line)

只需要将index的配置格式改成
Cookies
sessionToken
CpdailyInfo

求援求援

Traceback (most recent call last):
File "index.py", line 82, in
main()
File "index.py", line 23, in main
msg = working(user)
File "index.py", line 51, in working
sign.fillForm()
File "/home/ahcheer/auto-submit-ruoli/今日校园/actions/autoSign.py", line 129, in fillForm
self.form['abnormalReason'] = self.userInfo['abnormalReason']
KeyError: 'abnormalReason'

获取今日表单突然出现问题(之前没有)。

接口:/wec-counselor-collector-apps/stu/collector/queryCollectorProcessingList
返回:
{
"code": "-1",
"message": "Required request body is missing: public org.springframework.http.ResponseEntity<com.wisedu.wec.coun.common.model.StuCollectorListResponse> com.wisedu.wec.coun.web.controller.StuApiController.queryCollectorProcessingList(com.wisedu.wec.coun.common.model.BaseRequest)"
}

配置文件问题

大佬,配置文件的网站是*.cpdaily.com/iap 吗,网站从哪里获取呢

云函数--问卷已经发布,却没有读取到

2020-10-26 08:15:02 模拟登陆成功。。。

2020-10-26 08:15:02 正在查询最新待填写问卷。。。

Starting new HTTPS connection (1): aust.campusphere.net:443

https://aust.campusphere.net:443 "POST /wec-counselor-collector-apps/stu/collector/queryCollectorProcessingList HTTP/1.1" 200 None

2020-10-26 08:15:02 获取最新待填写问卷失败,可能是辅导员还没有发布。。。

问卷已经收到了 请问我·接下来应该修改哪里

模拟登录获取cooks的login脚本在验证登录信息种弹出异常:当前未登录或session失效。

python login.py
2021-02-07 22:47:40 {'tenantId': 'fzu', 'login-url': 'http://id.fzu.edu.cn/authserver/login?service=https%3A%2F%2Ffzu.campusphere.net%2Fportal%2Flogin', 'host': 'fzu.campusphere.net'}
2021-02-07 22:47:40 正在获取验证码。。。
2021-02-07 22:47:40 正在登录的账号为1****7
2021-02-07 22:47:40 获取验证码成功。。。
请输入验证码:

2021-02-07 22:48:10 正在验证验证码。。。
2021-02-07 22:48:10 验证码验证成功。。。
2021-02-07 22:48:10 正在验证登陆信息。。。
2021-02-07 22:48:10 当前未登录或session失效

本地执行generate.py报错

File "F:\dependency\Crypto\Util_raw_api.py", line 308, in load_pycryptodome_raw_lib
raise OSError("Cannot load native module '%s': %s" % (name, ", ".join(attempts)))
OSError: Cannot load native module 'Crypto.Cipher._raw_ecb': Trying '_raw_ecb.cp37-win_amd64.pyd': [WinError 126] 找不到指定的模块。, Trying '_raw_ecb.pyd': [WinError 126] 找不到指定的模块。

最近一直 https://gdgm.campusphere.net:443 "POST /wec-counselor-collector-apps/stu/collector/submitForm HTTP/1.1" 200 None 2021-01-06 00:59:48 自动提交失败。。。 2021-01-06 00:59:48 错误是请提交正确的信息收集信息

2021-01-06 00:59:48 查询最新待填写问卷成功。。。

2021-01-06 00:59:48 正在自动填写问卷。。。

2021-01-06 00:59:48 必填问题1:你现在是否正在参加项目化教学实习或现代学徒制实习?

2021-01-06 00:59:48 答案1:否

2021-01-06 00:59:48 必填问题2:今日体温℃

2021-01-06 00:59:48 答案2:正常小于37.3℃

2021-01-06 00:59:48 必填问题3:目前体温(单位:℃)

2021-01-06 00:59:48 答案3:36.6℃

2021-01-06 00:59:48 必填问题4:健康状况

2021-01-06 00:59:48 答案4:良好

2021-01-06 00:59:48 填写问卷成功。。。

2021-01-06 00:59:48 正在自动提交。。。

https://gdgm.campusphere.net:443 "POST /wec-counselor-collector-apps/stu/collector/submitForm HTTP/1.1" 200 None

2021-01-06 00:59:48 自动提交失败。。。

2021-01-06 00:59:48 错误是请提交正确的信息收集信息

2021-01-06 00:59:48 正在发送Server酱。。。

已检查过配置没有问题

python运行报错,求指教

Traceback (most recent call last):
File "D:\PythonCode\pythonProject\auto-submit-master\index.py", line 365, in main_handler
InfoSubmit('自动提交成功!', user['user']['email'])
File "D:\PythonCode\pythonProject\auto-submit-master\index.py", line 336, in InfoSubmit
if(config['Info']['ServerChan']): sendServerChan(msg)
File "D:\PythonCode\pythonProject\auto-submit-master\index.py", line 312, in sendServerChan
code = res.json()['errmsg']
KeyError: 'errmsg'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "D:\PythonCode\pythonProject\auto-submit-master\index.py", line 388, in
print(main_handler({}, {}))
File "D:\PythonCode\pythonProject\auto-submit-master\index.py", line 380, in main_handler
InfoSubmit("出现问题了!"+str(e))
File "D:\PythonCode\pythonProject\auto-submit-master\index.py", line 336, in InfoSubmit
if(config['Info']['ServerChan']): sendServerChan(msg)
File "D:\PythonCode\pythonProject\auto-submit-master\index.py", line 312, in sendServerChan
code = res.json()['errmsg']
KeyError: 'errmsg'

今天签到出现大面积报错

大部分签到失败,不过小部分签到成功。
返回数据:

"fail"

日志:

START RequestId: da7440b0-63b3-417d-a5ca-e5b00692e465

Event RequestId: da7440b0-63b3-417d-a5ca-e5b00692e465

Starting new HTTPS connection (1): www.cpdaily.com:443

https://www.cpdaily.com:443 "GET /v6/config/guest/tenant/list HTTP/1.1" 200 None

Starting new HTTPS connection (1): www.cpdaily.com:443

https://www.cpdaily.com:443 "GET /v6/config/guest/tenant/info?ids=f401a6c9-e20e-432c-8cd1-fec2bfd6ac04 HTTP/1.1" 200 None

2020-09-16 08:59:12 {'login-url': 'https://aust.campusphere.net/iap/login?service=https%3A%2F%2Faust.campusphere.net%2Fportal%2Flogin', 'host': 'aust.campusphere.net'}

Starting new HTTP connection (1): www.zimo.wiki:8080

END RequestId: da7440b0-63b3-417d-a5ca-e5b00692e465

Report RequestId: da7440b0-63b3-417d-a5ca-e5b00692e465 Duration:644ms Memory:128MB MemUsage:78.605469MB

错误是请提交正确的信息收集信息

可以登录可以查看表单,但是就是不能正确提交表单
2020-12-30 19:26:07 必填问题5:本人健康状况是否正常?
2020-12-30 19:26:07 答案5:身体健康,正常
2020-12-30 19:26:07 填写问卷成功。。。
2020-12-30 19:26:07 正在自动提交。。。
2020-12-30 19:26:07 自动提交失败。。。
2020-12-30 19:26:07 错误是请提交正确的信息收集信息
2020-12-30 19:26:08 邮件发送失败

按步骤来 报错太多

执行摘要测试失败
请求ID
70579aea-14e7-4e9e-b3b4-6b9f56e99cc6
运行时间
0ms
计费时间
0ms
运行内存
0MB
返回结果

Traceback (most recent call last):
File "/var/runtime/python3/bootstrap.py", line 133, in init_handler
func_handler = get_func_handler(file.rsplit(".", 1)[0], func)
File "/var/runtime/python3/bootstrap.py", line 159, in get_func_handler
mod = imp.load_module(mname, *imp.find_module(mname))
File "/var/lang/python3/lib/python3.6/imp.py", line 234, in load_module
return load_source(name, filename, file)
File "/var/lang/python3/lib/python3.6/imp.py", line 172, in load_source
module = _load(spec)
File "<frozen importlib._bootstrap>", line 675, in _load
File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
File "/var/user/index.py", line 5, in <module>
import yaml
ModuleNotFoundError: No module named 'yaml'

这个还能用吗

找了一圈,似乎api全挂了。。。有大佬现在还能用吗

开放的模拟登陆api服务器地址无效

urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='www.zimo.wiki', port=8080): Max retries exceeded with url: /wisedu-unified-login-api-v1.0/api/login (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x00000285A3093648>: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。'))

部署在腾讯云函数隔几天就会调用失败

部署在腾讯云函数隔几天就会调用失败,下面是报错信息,这个是什么原因导致的,应该怎么解决?

2021-02-24 22:12:22 开始模拟登陆。。。
Starting new HTTP connection (1): www.zimo.wiki:8080
ERROR RequestId:891f2ce8-8e81-4ba9-aac9-8dcaedeef763 Result:{"errorCode":1,"errorMessage":"user code exception caught","stackTrace":"Traceback (most recent call last):\n File "/opt/urllib3/connectionpool.py", line 421, in _make_request\n six.raise_from(e, None)\n File "", line 3, in raise_from\n File "/opt/urllib3/connectionpool.py", line 416, in _make_request\n httplib_response = conn.getresponse()\n File "/var/lang/python3/lib/python3.6/http/client.py", line 1331, in getresponse\n response.begin()\n File "/var/lang/python3/lib/python3.6/http/client.py", line 297, in begin\n version, status, reason = self._read_status()\n File "/var/lang/python3/lib/python3.6/http/client.py", line 258, in _read_status\n line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")\n File "/var/lang/python3/lib/python3.6/socket.py", line 586, in readinto\n return self._sock.recv_into(b)\nConnectionResetError: [Errno 104] Connection reset by peer\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/opt/requests/adapters.py", line 449, in send\n timeout=timeout\n File "/opt/urllib3/connectionpool.py", line 720, in urlopen\n method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]\n File "/opt/urllib3/util/retry.py", line 400, in increment\n raise six.reraise(type(error), error, _stacktrace)\n File "/opt/urllib3/packages/six.py", line 734, in reraise\n raise value.with_traceback(tb)\n File "/opt/urllib3/connectionpool.py", line 672, in urlopen\n chunked=chunked,\n File "/opt/urllib3/connectionpool.py", line 421, in _make_request\n six.raise_from(e, None)\n File "", line 3, in raise_from\n File "/opt/urllib3/connectionpool.py", line 416, in _make_request\n httplib_response = conn.getresponse()\n File "/var/lang/python3/lib/python3.6/http/client.py", line 1331, in getresponse\n response.begin()\n File "/var/lang/python3/lib/python3.6/http/client.py", line 297, in begin\n version, status, reason = self._read_status()\n File "/var/lang/python3/lib/python3.6/http/client.py", line 258, in _read_status\n line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")\n File "/var/lang/python3/lib/python3.6/socket.py", line 586, in readinto\n return self._sock.recv_into(b)\nurllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/var/runtime/python3/bootstrap.py", line 176, in handle\n ret = self.real_handler(event, context)\n File "/var/user/index.py", line 381, in main_handler\n raise e\n File "/var/user/index.py", line 347, in main_handler\n session = getSession(user, apis['login-url'])\n File "/var/user/index.py", line 108, in getSession\n res = requests.post(config['login']['api'], params, verify=not debug)\n File "/opt/requests/api.py", line 119, in post\n return request('post', url, data=data, json=json, **kwargs)\n File "/opt/requests/api.py", line 61, in request\n return session.request(method=method, url=url, **kwargs)\n File "/opt/requests/sessions.py", line 530, in request\n resp = self.send(prep, **send_kwargs)\n File "/opt/requests/sessions.py", line 643, in send\n r = adapter.send(request, **kwargs)\n File "/opt/requests/adapters.py", line 498, in send\n raise ConnectionError(err, request=request)\nrequests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))","statusCode":430}
END RequestId:891f2ce8-8e81-4ba9-aac9-8dcaedeef763
Report RequestId:891f2ce8-8e81-4ba9-aac9-8dcaedeef763 Duration:1247ms Memory:128MB MemUsage:66.312500MB

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.