Files
python----/智慧校园/同文/同文下发老师 copy.ipynb
T
admin aac9f5934d feat: 添加多个功能模块和工具脚本
- 新增websocket客户端和服务端实现
- 添加图片压缩工具和快速压缩脚本
- 实现学生信息处理相关API
- 添加MQTT客户端和消息处理功能
- 更新.gitignore忽略更多文件类型
- 添加数据库操作工具和示例
- 实现多个测试脚本和工具类
2026-04-13 14:47:50 +08:00

24 KiB

In [1]:
from requests import get,post
import time
ip = "http://band.hxzhxy.cn"
param = {
    "username": "tangchao",
    "password": "123456a",
    "client_id": "client",
    "grant_type": "password",
    "client_secret": "123456",
}
data = get(url=f"http://band.hxzhxy.cn/oauth/token?username=zhongwei&password=123456a&client_id=client&grant_type=password&client_secret=123456").json()
token = data["access_token"]
header = {
    "content-type": "application/json",
    "authorization": f"Bearer {token}",
}
In [2]:
data = get(f"https://band.hxzhxy.cn/door/lock/listLockPage?teamId=119&pageSize=100&pageNumber=0&value=&areaId=&tierId=&regionId=&bindType=&lockName=&type=2&mainTypeId=&sizeType=&lockType=&access_token={token}").json()
In [3]:
import time
In [4]:
serialNos=['3478767249']
In [6]:
for item in data["data"]["content"]:
    addAdminBand =",".join(serialNos)
    a  =post("https://band.hxzhxy.cn/door/accredit/sendNews",json={
        "startTime":"25082114","endTime":"35051814","adminType":"55","type":"01","time":[1761874564434,4097093791000],"accountIp":"183.220.92.213","accountName":"183.220.92.213","lockNo":item["lockNo"],"serialNo":item["serialNo"],"addAdminBand":"","addUserBand":"","removeBand":addAdminBand,"doorAccreditIds":""
    },headers=header).text
    print(a)
    time.sleep(1)
            
{"success":false,"msg":"Index: 0, Size: 0","code":10000,"data":null}
{"success":false,"msg":"Index: 0, Size: 0","code":10000,"data":null}
{"success":false,"msg":"Index: 0, Size: 0","code":10000,"data":null}
{"success":false,"msg":"Index: 0, Size: 0","code":10000,"data":null}
---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
Cell In[6], line 3
      1 for item in data["data"]["content"]:
      2     addAdminBand =",".join(serialNos)
----> 3     a  =post("https://band.hxzhxy.cn/door/accredit/sendNews",json={
      4         "startTime":"25082114","endTime":"35051814","adminType":"55","type":"01","time":[1761874564434,4097093791000],"accountIp":"183.220.92.213","accountName":"183.220.92.213","lockNo":item["lockNo"],"serialNo":item["serialNo"],"addAdminBand":"","addUserBand":"","removeBand":addAdminBand,"doorAccreditIds":""
      5     },headers=header).text
      6     print(a)
      7     time.sleep(1)

File d:\Anaconda3\Lib\site-packages\requests\api.py:115, in post(url, data, json, **kwargs)
    103 def post(url, data=None, json=None, **kwargs):
    104     r"""Sends a POST request.
    105 
    106     :param url: URL for the new :class:`Request` object.
   (...)
    112     :rtype: requests.Response
    113     """
--> 115     return request("post", url, data=data, json=json, **kwargs)

File d:\Anaconda3\Lib\site-packages\requests\api.py:59, in request(method, url, **kwargs)
     55 # By using the 'with' statement we are sure the session is closed, thus we
     56 # avoid leaving sockets open which can trigger a ResourceWarning in some
     57 # cases, and look like a memory leak in others.
     58 with sessions.Session() as session:
---> 59     return session.request(method=method, url=url, **kwargs)

File d:\Anaconda3\Lib\site-packages\requests\sessions.py:589, in Session.request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
    584 send_kwargs = {
    585     "timeout": timeout,
    586     "allow_redirects": allow_redirects,
    587 }
    588 send_kwargs.update(settings)
--> 589 resp = self.send(prep, **send_kwargs)
    591 return resp

File d:\Anaconda3\Lib\site-packages\requests\sessions.py:703, in Session.send(self, request, **kwargs)
    700 start = preferred_clock()
    702 # Send the request
--> 703 r = adapter.send(request, **kwargs)
    705 # Total elapsed time of the request (approximately)
    706 elapsed = preferred_clock() - start

File d:\Anaconda3\Lib\site-packages\requests\adapters.py:589, in HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies)
    586     timeout = TimeoutSauce(connect=timeout, read=timeout)
    588 try:
--> 589     resp = conn.urlopen(
    590         method=request.method,
    591         url=url,
    592         body=request.body,
    593         headers=request.headers,
    594         redirect=False,
    595         assert_same_host=False,
    596         preload_content=False,
    597         decode_content=False,
    598         retries=self.max_retries,
    599         timeout=timeout,
    600         chunked=chunked,
    601     )
    603 except (ProtocolError, OSError) as err:
    604     raise ConnectionError(err, request=request)

File d:\Anaconda3\Lib\site-packages\urllib3\connectionpool.py:787, in HTTPConnectionPool.urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)
    784 response_conn = conn if not release_conn else None
    786 # Make the request on the HTTPConnection object
--> 787 response = self._make_request(
    788     conn,
    789     method,
    790     url,
    791     timeout=timeout_obj,
    792     body=body,
    793     headers=headers,
    794     chunked=chunked,
    795     retries=retries,
    796     response_conn=response_conn,
    797     preload_content=preload_content,
    798     decode_content=decode_content,
    799     **response_kw,
    800 )
    802 # Everything went great!
    803 clean_exit = True

File d:\Anaconda3\Lib\site-packages\urllib3\connectionpool.py:464, in HTTPConnectionPool._make_request(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)
    461 try:
    462     # Trigger any extra validation we need to do.
    463     try:
--> 464         self._validate_conn(conn)
    465     except (SocketTimeout, BaseSSLError) as e:
    466         self._raise_timeout(err=e, url=url, timeout_value=conn.timeout)

File d:\Anaconda3\Lib\site-packages\urllib3\connectionpool.py:1093, in HTTPSConnectionPool._validate_conn(self, conn)
   1091 # Force connect early to allow us to validate the connection.
   1092 if conn.is_closed:
-> 1093     conn.connect()
   1095 # TODO revise this, see https://github.com/urllib3/urllib3/issues/2791
   1096 if not conn.is_verified and not conn.proxy_is_verified:

File d:\Anaconda3\Lib\site-packages\urllib3\connection.py:753, in HTTPSConnection.connect(self)
    751 try:
    752     sock: socket.socket | ssl.SSLSocket
--> 753     self.sock = sock = self._new_conn()
    754     server_hostname: str = self.host
    755     tls_in_tls = False

File d:\Anaconda3\Lib\site-packages\urllib3\connection.py:198, in HTTPConnection._new_conn(self)
    193 """Establish a socket connection and set nodelay settings on it.
    194 
    195 :return: New socket connection.
    196 """
    197 try:
--> 198     sock = connection.create_connection(
    199         (self._dns_host, self.port),
    200         self.timeout,
    201         source_address=self.source_address,
    202         socket_options=self.socket_options,
    203     )
    204 except socket.gaierror as e:
    205     raise NameResolutionError(self.host, self, e) from e

File d:\Anaconda3\Lib\site-packages\urllib3\util\connection.py:73, in create_connection(address, timeout, source_address, socket_options)
     71 if source_address:
     72     sock.bind(source_address)
---> 73 sock.connect(sa)
     74 # Break explicitly a reference cycle
     75 err = None

KeyboardInterrupt: 

#下发密码

In [ ]:
import tqdm
In [ ]:
data = get(f"https://band.hxzhxy.cn/door/lock/listLockPage?teamId=119&pageSize=60&pageNumber=0&value=&areaId=&tierId=&regionId=&bindType=&lockName=&type=2&mainTypeId=&sizeType=&lockType=&access_token={token}").json()
with tqdm.tqdm(total=len(data["data"]["content"])) as pbar:
    for item in data["data"]["content"]:
        if item["password"] == "12345687" or item["password"]==None: 
            pbar.update(1)
            continue
        post("https://band.hxzhxy.cn/door/password/send",json={"lockNos":item["lockNo"],"serialNos":item["serialNo"],"password":"12345687","type":"04","typeSend":"0","accountIp":"183.220.91.181","accountName":"183.220.91.181","account":"5789"},headers=header)
        time.sleep(7)
        pbar.update(1)
In [ ]:
data = get(f"https://band.hxzhxy.cn/door/lock/listLockPage?teamId=119&pageSize=60&pageNumber=0&value=&areaId=&tierId=&regionId=&bindType=&lockName=&type=2&mainTypeId=&sizeType=&lockType=&access_token={token}").json()
for item in data["data"]["content"]:
    if item["password"] != "12345687" and item["password"]!=None:
        print(item)
        print(item['password'])
In [ ]:
len("Xpaotongshutongwenzhongxue971001")
In [37]:
serialNos
Out [37]:
['4007516707',
 '4009525491',
 '4004683395',
 '4008811955',
 '4008924883',
 '4009224243',
 '4009213507',
 '4009187555',
 '4007743635',
 '4009523651',
 '4008270787',
 '4009482275',
 '0276930835',
 '4009509123',
 '4007526915',
 '4007516643',
 '4008464659',
 '4009443907',
 '4009203219',
 '4009209379',
 '3478812113',
 '3470473985']
In [43]:
#权限提取
count = 0
for item in data["data"]["content"]:
    teacher = get(f"https://band.hxzhxy.cn/door/admin/selectAllTeacherAndSerialNew?teamId=119&lockNo={item['lockNo']}&access_token=2ca5ff6c-24a0-4231-98e2-fec9e38c5a38").json()["data"]["userTea"]
    flag = True
    for i in teacher:
        if '物业' in i["teaName"]:
            flag = False
            break
    if flag:
        print(item["lockName"])
        count+=1
        addAdminBand =",".join(serialNos)
        a  =post("https://band.hxzhxy.cn/door/accredit/sendNews",json={
            "startTime":"25082114","endTime":"35051814","adminType":"55","type":"01","time":[1755756984314,2071380076000],"accountIp":"183.220.92.213","accountName":"183.220.92.213","lockNo":item["lockNo"],"serialNo":item["serialNo"],"addAdminBand":"","addUserBand":addAdminBand,"removeBand":"","doorAccreditIds":""
        },headers=header).text
        time.sleep(10)
        
print(count)
0
In [ ]:
In [ ]: