fuminer
随笔 – 139 文章 – 7 评论 – 9 阅读 – 23836
X站
day03 X站
今日概要:
- 播放量(PC & H5)
- 完播率(PC & H5)
1.PC播放量
- click now highlighter- Javahttps://api.bilibili.com/x/click-interface/click/now?jsonp=jsonp highlighter-buvid3=B5A768A8-F2B7-8B7A-97B7-376AC0F1616609160infoc; CURRENT_FNVAL=80; _uuid=6B81048E-67AB-B0A6-CBE2-FF185666AA2209999infoc; blackside_state=1; bfe_id=5db70a86bd1cbe8a88817507134f7bb5; sid=6m1jakr0
- click web h5 highlighter- Javahttps://api.bilibili.com/x/click-interface/click/web/h5 highlighter- Bashaid=629890572&cid=318066735&bvid=BV1Mb4y1X73e&part=1&mid=0&lv=0&ftime=1632399715&stime=1632399715&jsonp=jsonp&type=3&sub_type=0&from_spmid=&auto_continued_play=0&refer_url=&bsource=&spmid= highlighter-buvid3=B5A768A8-F2B7-8B7A-97B7-376AC0F1616609160infoc; CURRENT_FNVAL=80; _uuid=6B81048E-67AB-B0A6-CBE2-FF185666AA2209999infoc; blackside_state=1; bfe_id=5db70a86bd1cbe8a88817507134f7bb5; sid=6m1jakr0
- heartbeat highlighter- Javahttps://api.bilibili.com/x/click-interface/web/heartbeat highlighter- Bashaid=629890572&cid=318066735&bvid=BV1Mb4y1X73e&mid=0&csrf=&played_time=0&real_played_time=0&realtime=0&start_ts=1632399715&type=3&dt=2&play_type=1&from_spmid=&spmid=&auto_continued_play=0&refer_url=&bsource= highlighter-buvid3=B5A768A8-F2B7-8B7A-97B7-376AC0F1616609160infoc; CURRENT_FNVAL=80; _uuid=6B81048E-67AB-B0A6-CBE2-FF185666AA2209999infoc; blackside_state=1; bfe_id=5db70a86bd1cbe8a88817507134f7bb5; sid=6m1jakr0
1.1 click now
- https://api.bilibili.com/x/click-interface/click/now?jsonp=jsonp
- GET
- cookie highlighter-buvid3=B5A768A8-F2B7-8B7A-97B7-376AC0F1616609160infoc; 访问视频首页得来的cookie CURRENT_FNVAL=80; 固定(在访问nav请求时携带) _uuid=6B81048E-67AB-B0A6-CBE2-FF185666AA2209999infoc; 内部算法生成(逆向) blackside_state=1; 固定(在访问nav请求时携带) bfe_id=5db70a86bd1cbe8a88817507134f7bb5; 访问nav地址得来。 sid=6m1jakr0; 访问v2地址得来。
__uuid算法是怎么来的?

highlighter- Java
import time
import uuid
def gen_uuid():
uuid_sec = str(uuid.uuid4())
time_sec = str(int(time.time() * 1000 % 1e5))
time_sec = time_sec.ljust(5, "0")
return "{}{}infoc".format(uuid_sec, time_sec)
_uuid = gen_uuid()
print(_uuid)
相关代码:highlighter- kotlin
import requests
import time
import uuid
import requests
def get_video_info(bvid):
session = requests.Session()
res = session.get(
url="https://api.bilibili.com/x/player/pagelist?bvid={}&jsonp=jsonp".format(bvid),
)
cid = res.json()['data'][0]['cid']
res = session.get(
url="https://api.bilibili.com/x/web-interface/view?cid={}&bvid={}".format(cid, bvid),
)
res_json = res.json()
aid = res_json['data']['aid']
view_count = res_json['data']['stat']['view']
# total_duration = res_json['data']['duration'] # 总时长
duration = res_json['data']['pages'][0]['duration'] # 当前视频长度
return aid, bvid, cid, view_count, duration
def gen_uuid():
uuid_sec = str(uuid.uuid4())
time_sec = str(int(time.time() * 1000 % 1e5))
time_sec = time_sec.ljust(5, "0")
return "{}{}infoc".format(uuid_sec, time_sec)
session = requests.Session()
session.headers = {
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36",
}
# 1.访问视频首页,获取 buvid3
url = "https://www.bilibili.com/video/BV1iq4y1p7LS"
res = session.get(
url=url
)
res.close()
# print(session.cookies.get_dict())
# 2.访问nav,获取 bfe_id(需要cookie中携带 uuid + buvid3 + CURRENT_FNVAL + blackside_state)
session.cookies['_uuid'] = gen_uuid()
session.cookies['CURRENT_FNVAL'] = "80"
session.cookies['blackside_state'] = "1"
res = session.get(
url='https://api.bilibili.com/x/web-interface/nav'
)
res.close()
# print(session.cookies.get_dict())
# 3.访问v2,获取sid
aid, bvid, cid, view_count, duration = get_video_info("BV1Mb4y1X73e")
# print(aid, bvid, cid, view_count, duration)
res = session.get(
url="https://api.bilibili.com/x/player/v2",
params={
'cid': cid, # 可以通过一些其他的接口直接获取到
'aid': aid,
'bvid': 'BV1Mb4y1X73e',
}
)
res.close()
# print(session.cookies.get_dict())
# 4.访问click now
res = session.get(
url="https://api.bilibili.com/x/click-interface/click/now",
params={
"jsonp": "jsonp"
}
)
print(res.text)
# {"code":0,"message":"0","ttl":1,"data":{"now":1632402498}}
1.2 click
highlighter- Java
https://api.bilibili.com/x/click-interface/click/web/h5
highlighter- Bash
aid=629890572&cid=318066735&bvid=BV1Mb4y1X73e&part=1&mid=0&lv=0&ftime=1632399715&stime=1632399715&jsonp=jsonp&type=3&sub_type=0&from_spmid=&auto_continued_play=0&refer_url=&bsource=&spmid=
highlighter-
buvid3=B5A768A8-F2B7-8B7A-97B7-376AC0F1616609160infoc; CURRENT_FNVAL=80; _uuid=6B81048E-67AB-B0A6-CBE2-FF185666AA2209999infoc; blackside_state=1; bfe_id=5db70a86bd1cbe8a88817507134f7bb5; sid=6m1jakr0
highlighter- kotlin
import requests
import time
import uuid
import requests
import random
def get_video_info(bvid):
session = requests.Session()
res = session.get(
url="https://api.bilibili.com/x/player/pagelist?bvid={}&jsonp=jsonp".format(bvid),
)
cid = res.json()['data'][0]['cid']
res = session.get(
url="https://api.bilibili.com/x/web-interface/view?cid={}&bvid={}".format(cid, bvid),
)
res_json = res.json()
aid = res_json['data']['aid']
view_count = res_json['data']['stat']['view']
# total_duration = res_json['data']['duration'] # 总时长
duration = res_json['data']['pages'][0]['duration'] # 当前视频长度
return aid, cid, view_count, duration
def gen_uuid():
uuid_sec = str(uuid.uuid4())
time_sec = str(int(time.time() * 1000 % 1e5))
time_sec = time_sec.ljust(5, "0")
return "{}{}infoc".format(uuid_sec, time_sec)
session = requests.Session()
session.headers = {
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36",
}
# 1.访问视频首页,获取 buvid3
url = "https://www.bilibili.com/video/BV1iq4y1p7LS"
res = session.get(
url=url
)
res.close()
# print(session.cookies.get_dict())
# 2.访问nav,获取 bfe_id(需要cookie中携带 uuid + buvid3 + CURRENT_FNVAL + blackside_state)
session.cookies['_uuid'] = gen_uuid()
session.cookies['CURRENT_FNVAL'] = "80"
session.cookies['blackside_state'] = "1"
res = session.get(
url='https://api.bilibili.com/x/web-interface/nav'
)
res.close()
# print(session.cookies.get_dict())
# 3.访问v2,获取sid
bvid = "BV1Mb4y1X73e"
aid, cid, view_count, duration = get_video_info(bvid)
# print(aid, bvid, cid, view_count, duration)
res = session.get(
url="https://api.bilibili.com/x/player/v2",
params={
'cid': cid, # 可以通过一些其他的接口直接获取到
'aid': aid,
'bvid': bvid,
}
)
res.close()
# print(session.cookies.get_dict())
# 4.访问click now
res = session.get(
url="https://api.bilibili.com/x/click-interface/click/now",
params={
"jsonp": "jsonp"
}
)
# print(res.text)
# ctime = res.json()['data']['now']
ctime = int(time.time())
# 5.click web h5
res = session.post(
url="https://api.bilibili.com/x/click-interface/click/web/h5",
data={
"aid": aid,
"cid": cid,
"bvid": bvid,
"part": "1",
"mid": "0",
"lv": "0",
"ftime": ctime - random.randint(10, 200), # 浏览器首次打开时间
"stime": ctime,
"jsonp": "jsonp",
"type": "3",
"sub_type": "0",
"from_spmid": "",
"auto_continued_play": "0",
"refer_url": "",
"bsource": "",
"spmid": ""
}
)
print(res.text)
print(session.cookies.get_dict())
1.3 首次心跳
highlighter- Java
https://api.bilibili.com/x/click-interface/web/heartbeat
highlighter- Bash
aid=629890572&cid=318066735&bvid=BV1Mb4y1X73e&mid=0&csrf=&played_time=0&real_played_time=0&realtime=0&start_ts=1632399715&type=3&dt=2&play_type=1&from_spmid=&spmid=&auto_continued_play=0&refer_url=&bsource=
highlighter-
buvid3=B5A768A8-F2B7-8B7A-97B7-376AC0F1616609160infoc; CURRENT_FNVAL=80; _uuid=6B81048E-67AB-B0A6-CBE2-FF185666AA2209999infoc; blackside_state=1; bfe_id=5db70a86bd1cbe8a88817507134f7bb5; sid=6m1jakr0
示例代码:highlighter- kotlin
import requests
import time
import uuid
import requests
import random
def get_video_info(bvid):
session = requests.Session()
res = session.get(
url="https://api.bilibili.com/x/player/pagelist?bvid={}&jsonp=jsonp".format(bvid),
)
cid = res.json()['data'][0]['cid']
res = session.get(
url="https://api.bilibili.com/x/web-interface/view?cid={}&bvid={}".format(cid, bvid),
)
res_json = res.json()
aid = res_json['data']['aid']
view_count = res_json['data']['stat']['view']
# total_duration = res_json['data']['duration'] # 总时长
duration = res_json['data']['pages'][0]['duration'] # 当前视频长度
return aid, cid, view_count, duration
def gen_uuid():
uuid_sec = str(uuid.uuid4())
time_sec = str(int(time.time() * 1000 % 1e5))
time_sec = time_sec.ljust(5, "0")
return "{}{}infoc".format(uuid_sec, time_sec)
session = requests.Session()
session.headers = {
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36",
}
# 1.访问视频首页,获取 buvid3
url = "https://www.bilibili.com/video/BV1iq4y1p7LS"
res = session.get(
url=url
)
res.close()
# print(session.cookies.get_dict())
# 2.访问nav,获取 bfe_id(需要cookie中携带 uuid + buvid3 + CURRENT_FNVAL + blackside_state)
session.cookies['_uuid'] = gen_uuid()
session.cookies['CURRENT_FNVAL'] = "80"
session.cookies['blackside_state'] = "1"
res = session.get(
url='https://api.bilibili.com/x/web-interface/nav'
)
res.close()
# print(session.cookies.get_dict())
# 3.访问v2,获取sid
bvid = "BV1Mb4y1X73e"
aid, cid, view_count, duration = get_video_info(bvid)
# print(aid, bvid, cid, view_count, duration)
res = session.get(
url="https://api.bilibili.com/x/player/v2",
params={
'cid': cid, # 可以通过一些其他的接口直接获取到
'aid': aid,
'bvid': bvid,
}
)
res.close()
# print(session.cookies.get_dict())
# 4.访问click now
res = session.get(
url="https://api.bilibili.com/x/click-interface/click/now",
params={
"jsonp": "jsonp"
}
)
# print(res.text)
# ctime = res.json()['data']['now']
start_ts = int(time.time())
# 5.click web h5
res = session.post(
url="https://api.bilibili.com/x/click-interface/click/web/h5",
data={
"aid": aid,
"cid": cid,
"bvid": bvid,
"part": "1",
"mid": "0",
"lv": "0",
"ftime": start_ts - random.randint(10, 200), # 浏览器首次打开时间
"stime": start_ts,
"jsonp": "jsonp",
"type": "3",
"sub_type": "0",
"from_spmid": "",
"auto_continued_play": "0",
"refer_url": "",
"bsource": "",
"spmid": ""
}
)
res.close()
# 6.首次心跳
res = session.post(
url="https://api.bilibili.com/x/click-interface/web/heartbeat",
data={
"aid": aid,
"cid": cid,
"bvid": bvid,
"mid": "0",
"csrf": "",
"played_time": "0",
"real_played_time": "0",
"realtime": "0",
"start_ts": start_ts,
"type": "3",
"dt": "2",
"play_type": "1",
"from_spmid": "",
"spmid": "",
"auto_continued_play": "0",
"refer_url": "",
"bsource": ""
}
)
print(res.text)
1.4 代码梳理
highlighter- kotlin
import requests
import uuid
import time
import random
import requests
def get_video_info(bvid):
session = requests.Session()
res = session.get(
url="https://api.bilibili.com/x/player/pagelist?bvid={}&jsonp=jsonp".format(bvid),
)
cid = res.json()['data'][0]['cid']
res = session.get(
url="https://api.bilibili.com/x/web-interface/view?cid={}&bvid={}".format(cid, bvid),
)
res_json = res.json()
aid = res_json['data']['aid']
view_count = res_json['data']['stat']['view']
# total_duration = res_json['data']['duration'] # 总时长
duration = res_json['data']['pages'][0]['duration'] # 当前视频长度
return aid, bvid, cid, view_count, duration
class PcAnonymous(object):
""" 匿名pc播放"""
def __init__(self, aid, bvid, cid, view_count, duration, proxies):
self.aid = aid
self.bvid = bvid
self.cid = cid
self.view_count = view_count
self.duration = duration
self.session = requests.Session()
self.session.proxies = proxies
self.session.headers = {
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36",
}
self._uuid = self.gen_uuid()
self.start_ts = None
def gen_uuid(self):
uuid_sec = str(uuid.uuid4())
time_sec = str(int(time.time() * 1000 % 1e5))
time_sec = time_sec.ljust(5, "0")
return "{}{}infoc".format(uuid_sec, time_sec)
def gen_buvid3(self):
url = "https://www.bilibili.com/video/{}".format(self.bvid)
res = self.session.get(
url=url
)
res.close()
def gen_bfe_id(self):
self.session.cookies['_uuid'] = self._uuid
self.session.cookies['CURRENT_FNVAL'] = "80"
self.session.cookies['blackside_state'] = "1"
res = self.session.get(
url='https://api.bilibili.com/x/web-interface/nav'
)
res.close()
def gen_sid(self):
res = self.session.get(
url="https://api.bilibili.com/x/player/v2",
params={
'cid': self.cid, # 可以通过一些其他的接口直接获取到
'aid': self.aid,
'bvid': self.bvid,
}
)
res.close()
def click_now(self):
res = self.session.get(
url="https://api.bilibili.com/x/click-interface/click/now",
params={
"jsonp": "jsonp"
}
)
self.start_ts = res.json()['data']['now']
def click_web_h5(self):
self.start_ts = start_ts = int(time.time())
res = self.session.post(
url="https://api.bilibili.com/x/click-interface/click/web/h5",
data={
"aid": self.aid,
"cid": self.cid,
"bvid": self.bvid,
"part": "1",
"mid": "0",
"lv": "0",
"ftime": start_ts - random.randint(10, 200), # 浏览器首次打开时间
"stime": start_ts,
"jsonp": "jsonp",
"type": "3",
"sub_type": "0",
"from_spmid": "",
"auto_continued_play": "0",
"refer_url": "",
"bsource": "",
"spmid": ""
}
)
res.close()
def first_heartbeat(self):
res = self.session.post(
url="https://api.bilibili.com/x/click-interface/web/heartbeat",
data={
"aid": self.aid,
"cid": self.cid,
"bvid": self.bvid,
"mid": "0",
"csrf": "",
"played_time": "0",
"real_played_time": "0",
"realtime": "0",
"start_ts": self.start_ts,
"type": "3",
"dt": "2",
"play_type": "1",
"from_spmid": "",
"spmid": "",
"auto_continued_play": "0",
"refer_url": "",
"bsource": ""
}
)
res.close()
def run(self):
try:
self.gen_buvid3()
self.gen_bfe_id()
self.gen_sid()
# self.click_now()
self.click_web_h5()
self.first_heartbeat()
except Exception as e:
print("请求异常:", e)
def handler():
# 1.用户输入视频buvid
buvid = "BV1Mb4y1X73e"
# 2.获取视频信息
aid, bvid, cid, view_count, duration = get_video_info(buvid)
# 3.播放
pc = PcAnonymous(aid, bvid, cid, view_count, duration, None)
pc.run()
if __name__ == '__main__':
handler()
1.5 代理IP
- 普通代理,3块钱500个IP
- 隧道代理,20/天(5个并发)
注意:即使有了代理IP也不是万能的。highlighter- kotlin
import requests
def get_tunnel_proxies():
proxy_host = 'tps135.kdlapi.com:15818'
proxy_username = 't12909832214236290'
proxy_pwd = 'sdfsdfsdffsd'
return {
"http": "http://{}:{}@{}".format(proxy_username, proxy_pwd, proxy_host),
"https": "https://{}:{}@{}".format(proxy_username, proxy_pwd, proxy_host),
}
proxies = get_tunnel_proxies()
while True:
res = requests.get(
url= "....",
proxies=proxies
)
res.close()
2.H5播放量
pc:highlighter- Java
https://api.bilibili.com/x/click-interface/click/now?jsonp=jsonp https://api.bilibili.com/x/click-interface/click/web/h5 https://api.bilibili.com/x/click-interface/web/heartbeat
h5:highlighter- Java
https://api.bilibili.com/x/report/click/now?jsonp=jsonp https://api.bilibili.com/x/click-interface/click/h5 https://api.bilibili.com/x/report/web/heartbeat
H5版本相比较于PC而言,其实:
- url差异
- 参数差异
highlighter- kotlin
import requests
import uuid
import time
import random
import requests
def get_video_info(bvid):
session = requests.Session()
res = session.get(
url="https://api.bilibili.com/x/player/pagelist?bvid={}&jsonp=jsonp".format(bvid),
)
cid = res.json()['data'][0]['cid']
res = session.get(
url="https://api.bilibili.com/x/web-interface/view?cid={}&bvid={}".format(cid, bvid),
)
res_json = res.json()
aid = res_json['data']['aid']
view_count = res_json['data']['stat']['view']
# total_duration = res_json['data']['duration'] # 总时长
duration = res_json['data']['pages'][0]['duration'] # 当前视频长度
return aid, bvid, cid, view_count, duration
class H5Anonymous(object):
""" 匿名h5播放"""
def __init__(self, aid, bvid, cid, view_count, duration, proxies):
self.aid = aid
self.bvid = bvid
self.cid = cid
self.view_count = view_count
self.duration = duration
self.session = requests.Session()
self.session.proxies = proxies
self.session.headers = {
"user-agent": "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Mobile Safari/537.36",
}
self._uuid = self.gen_uuid()
self.start_ts = None
def gen_uuid(self):
uuid_sec = str(uuid.uuid4())
time_sec = str(int(time.time() * 1000 % 1e5))
time_sec = time_sec.ljust(5, "0")
return "{}{}infoc".format(uuid_sec, time_sec)
def gen_buvid3(self):
url = "https://m.bilibili.com/video/{}".format(self.bvid)
res = self.session.get(
url=url
)
res.close()
def gen_bfe_id(self):
res = self.session.get(
url='https://api.bilibili.com/x/web-interface/nav'
)
res.close()
def gen_sid(self):
self.session.cookies['_uuid'] = self._uuid
res = self.session.get(
url="https://api.bilibili.com/x/player/v2",
params={
'cid': self.cid, # 可以通过一些其他的接口直接获取到
'aid': self.aid,
'ep_id': 0,
'season_id': 0,
}
)
res.close()
def click_now(self):
res = self.session.get(
url="https://api.bilibili.com/x/report/click/now",
params={
"jsonp": "jsonp"
}
)
self.start_ts = res.json()['data']['now']
def click_h5(self):
self.start_ts = start_ts = int(time.time())
res = self.session.post(
url="https://api.bilibili.com/x/click-interface/click/h5",
data={
"aid": self.aid,
"cid": self.cid,
"bvid": self.bvid,
"part": "1",
"did": self.session.cookies['sid'],
"mid": "",
"lv": "0",
"ftime": start_ts - random.randint(10, 200), # 浏览器首次打开时间
"stime": start_ts,
"jsonp": "jsonp",
"type": "3",
"sub_type": "0",
"from_spmid": "undefined",
"spmid": "333.401.0.0"
}
)
res.close()
def first_heartbeat(self):
res = self.session.post(
url="https://api.bilibili.com/x/report/web/heartbeat",
data={
"aid": self.aid,
"cid": self.cid,
"bvid": self.bvid,
"csrf": "",
"played_time": "0",
"realtime": "0",
"start_ts": self.start_ts,
"type": "3",
"dt": "7",
"play_type": "1",
"spmid": "333.401.0.0",
"refer": "https://m.bilibili.com/video/{}".format(self.bvid),
}
)
res.close()
def run(self):
try:
self.gen_buvid3()
self.gen_bfe_id()
self.gen_sid()
# self.click_now()
self.click_h5()
self.first_heartbeat()
except Exception as e:
print("请求异常:", e)
def handler():
# 1.用户输入视频buvid
buvid = "BV1Mb4y1X73e"
# 2.获取视频信息
aid, bvid, cid, view_count, duration = get_video_info(buvid)
# 3.播放
h5 = H5Anonymous(aid, bvid, cid, view_count, duration, None)
h5.run()
if __name__ == '__main__':
handler()
3.PC完播率和播放时长
highlighter- kotlin
import requests
import uuid
import time
import random
import requests
def get_video_info(bvid):
session = requests.Session()
res = session.get(
url="https://api.bilibili.com/x/player/pagelist?bvid={}&jsonp=jsonp".format(bvid),
)
cid = res.json()['data'][0]['cid']
res = session.get(
url="https://api.bilibili.com/x/web-interface/view?cid={}&bvid={}".format(cid, bvid),
)
res_json = res.json()
aid = res_json['data']['aid']
view_count = res_json['data']['stat']['view']
# total_duration = res_json['data']['duration'] # 总时长
duration = res_json['data']['pages'][0]['duration'] # 当前视频长度
return aid, bvid, cid, view_count, duration
class PcAnonymous(object):
""" 匿名pc播放"""
def __init__(self, aid, bvid, cid, view_count, duration, proxies):
self.aid = aid
self.bvid = bvid
self.cid = cid
self.view_count = view_count
self.duration = duration
self.session = requests.Session()
self.session.proxies = proxies
self.session.headers = {
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36",
}
self._uuid = self.gen_uuid()
self.start_ts = None
def gen_uuid(self):
uuid_sec = str(uuid.uuid4())
time_sec = str(int(time.time() * 1000 % 1e5))
time_sec = time_sec.ljust(5, "0")
return "{}{}infoc".format(uuid_sec, time_sec)
def gen_buvid3(self):
url = "https://www.bilibili.com/video/{}".format(self.bvid)
res = self.session.get(
url=url
)
res.close()
def gen_bfe_id(self):
self.session.cookies['_uuid'] = self._uuid
self.session.cookies['CURRENT_FNVAL'] = "80"
self.session.cookies['blackside_state'] = "1"
res = self.session.get(
url='https://api.bilibili.com/x/web-interface/nav'
)
res.close()
def gen_sid(self):
res = self.session.get(
url="https://api.bilibili.com/x/player/v2",
params={
'cid': self.cid, # 可以通过一些其他的接口直接获取到
'aid': self.aid,
'bvid': self.bvid,
}
)
res.close()
def click_now(self):
res = self.session.get(
url="https://api.bilibili.com/x/click-interface/click/now",
params={
"jsonp": "jsonp"
}
)
self.start_ts = res.json()['data']['now']
def click_web_h5(self):
self.start_ts = start_ts = int(time.time())
res = self.session.post(
url="https://api.bilibili.com/x/click-interface/click/web/h5",
data={
"aid": self.aid,
"cid": self.cid,
"bvid": self.bvid,
"part": "1",
"mid": "0",
"lv": "0",
"ftime": start_ts - random.randint(10, 200), # 浏览器首次打开时间
"stime": start_ts,
"jsonp": "jsonp",
"type": "3",
"sub_type": "0",
"from_spmid": "",
"auto_continued_play": "0",
"refer_url": "",
"bsource": "",
"spmid": ""
}
)
res.close()
def first_heartbeat(self):
res = self.session.post(
url="https://api.bilibili.com/x/click-interface/web/heartbeat",
data={
"aid": self.aid,
"cid": self.cid,
"bvid": self.bvid,
"mid": "0",
"csrf": "",
"played_time": "0",
"real_played_time": "0",
"realtime": "0",
"start_ts": self.start_ts,
"type": "3",
"dt": "2",
"play_type": "1",
"from_spmid": "",
"spmid": "",
"auto_continued_play": "0",
"refer_url": "",
"bsource": ""
}
)
res.close()
def heartbeat(self):
# loop=20,中间心跳15s一次
# div=5,最后一次心跳
# div=0 ?
loop_count, div = divmod(self.duration, 15)
if div == 0:
div = 15
loop_count -= 1
# 根据loop_count循环多少次,中间心跳15s一次
for i in range(1, loop_count + 1):
interval_time = i * 15
time.sleep(15)
data_dict = {
"aid": self.aid,
"cid": self.cid,
"bvid": self.bvid,
"mid": "0",
"csrf": "",
"played_time": interval_time,
"real_played_time": interval_time,
"realtime": interval_time,
"start_ts": self.start_ts,
"type": "3",
"dt": "2",
"play_type": "0",
"from_spmid": "",
"spmid": "",
"auto_continued_play": "0",
"refer_url": "",
"bsource": ""
}
res = self.session.post(
url="https://api.bilibili.com/x/click-interface/click/web/h5",
data=data_dict
)
res.close()
# 再根据div执行最后一次心跳
time.sleep(div)
data_dict = {
"aid": self.aid,
"cid": self.cid,
"bvid": self.bvid,
"mid": "0",
"csrf": "",
"played_time": -1,
"real_played_time": self.duration,
"realtime": self.duration,
"start_ts": self.start_ts,
"type": "3",
"dt": "2",
"play_type": "4",
"from_spmid": "",
"spmid": "",
"auto_continued_play": "0",
"refer_url": "",
"bsource": ""
}
res = self.session.post(
url="https://api.bilibili.com/x/click-interface/click/web/h5",
data=data_dict
)
res.close()
def run(self):
try:
self.gen_buvid3()
self.gen_bfe_id()
self.gen_sid()
# self.click_now()
self.click_web_h5()
self.first_heartbeat()
# 继续后续心跳
self.heartbeat()
except Exception as e:
print("请求异常:", e)
def handler():
# 1.用户输入视频buvid
buvid = "BV1Mb4y1X73e"
# 2.获取视频信息
aid, bvid, cid, view_count, duration = get_video_info(buvid)
# 3.播放
pc = PcAnonymous(aid, bvid, cid, view_count, duration, None)
pc.run()
if __name__ == '__main__':
handler()
这个代码的效率很低,后期可以利用队列提升效率。

4.H5完播
highlighter- kotlin
import requests
import uuid
import time
import random
import requests
def get_video_info(bvid):
session = requests.Session()
res = session.get(
url="https://api.bilibili.com/x/player/pagelist?bvid={}&jsonp=jsonp".format(bvid),
)
cid = res.json()['data'][0]['cid']
res = session.get(
url="https://api.bilibili.com/x/web-interface/view?cid={}&bvid={}".format(cid, bvid),
)
res_json = res.json()
aid = res_json['data']['aid']
view_count = res_json['data']['stat']['view']
# total_duration = res_json['data']['duration'] # 总时长
duration = res_json['data']['pages'][0]['duration'] # 当前视频长度
return aid, bvid, cid, view_count, duration
class H5Anonymous(object):
""" 匿名h5播放"""
def __init__(self, aid, bvid, cid, view_count, duration, proxies):
self.aid = aid
self.bvid = bvid
self.cid = cid
self.view_count = view_count
self.duration = duration
self.session = requests.Session()
self.session.proxies = proxies
self.session.headers = {
"user-agent": "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Mobile Safari/537.36",
}
self._uuid = self.gen_uuid()
self.start_ts = None
def gen_uuid(self):
uuid_sec = str(uuid.uuid4())
time_sec = str(int(time.time() * 1000 % 1e5))
time_sec = time_sec.ljust(5, "0")
return "{}{}infoc".format(uuid_sec, time_sec)
def gen_buvid3(self):
url = "https://m.bilibili.com/video/{}".format(self.bvid)
res = self.session.get(
url=url
)
res.close()
def gen_bfe_id(self):
res = self.session.get(
url='https://api.bilibili.com/x/web-interface/nav'
)
res.close()
def gen_sid(self):
self.session.cookies['_uuid'] = self._uuid
res = self.session.get(
url="https://api.bilibili.com/x/player/v2",
params={
'cid': self.cid, # 可以通过一些其他的接口直接获取到
'aid': self.aid,
'ep_id': 0,
'season_id': 0,
}
)
res.close()
def click_now(self):
res = self.session.get(
url="https://api.bilibili.com/x/report/click/now",
params={
"jsonp": "jsonp"
}
)
self.start_ts = res.json()['data']['now']
def click_h5(self):
self.start_ts = start_ts = int(time.time())
res = self.session.post(
url="https://api.bilibili.com/x/click-interface/click/h5",
data={
"aid": self.aid,
"cid": self.cid,
"bvid": self.bvid,
"part": "1",
"did": self.session.cookies['sid'],
"mid": "",
"lv": "0",
"ftime": start_ts - random.randint(10, 200), # 浏览器首次打开时间
"stime": start_ts,
"jsonp": "jsonp",
"type": "3",
"sub_type": "0",
"from_spmid": "undefined",
"spmid": "333.401.0.0"
}
)
res.close()
def first_heartbeat(self):
res = self.session.post(
url="https://api.bilibili.com/x/report/web/heartbeat",
data={
"aid": self.aid,
"cid": self.cid,
"bvid": self.bvid,
"csrf": "",
"played_time": "0",
"realtime": "0",
"start_ts": self.start_ts,
"type": "3",
"dt": "7",
"play_type": "1",
"spmid": "333.401.0.0",
"refer": "https://m.bilibili.com/video/{}".format(self.bvid),
}
)
res.close()
def heartbeat(self):
loop_count, div = divmod(self.duration, 15)
if div == 0:
div = 15
loop_count -= 1
for i in range(1, loop_count + 1):
interval_time = i * 15
time.sleep(15)
data_dict = {
"aid": self.aid,
"cid": self.cid,
"bvid": self.bvid,
"csrf": "",
"played_time": interval_time,
"realtime": interval_time,
"start_ts": self.start_ts,
"type": "3",
"dt": "7",
"play_type": "0",
"spmid": "333.401.0.0",
"refer": "https://m.bilibili.com/video/{}".format(self.bvid),
}
res = self.session.post(
url="https://api.bilibili.com/x/report/web/heartbeat",
data=data_dict
)
res.close()
time.sleep(div)
data_dict = {
"aid": self.aid,
"cid": self.cid,
"bvid": self.bvid,
"csrf": "",
"played_time": -1,
"realtime": self.duration,
"start_ts": self.start_ts,
"type": "3",
"dt": "7",
"play_type": "0",
"spmid": "333.401.0.0",
"refer": "https://m.bilibili.com/video/{}".format(self.bvid),
}
res = self.session.post(
url="https://api.bilibili.com/x/report/web/heartbeat",
data=data_dict
)
res.close()
def run(self):
try:
self.gen_buvid3()
self.gen_bfe_id()
self.gen_sid()
# self.click_now()
self.click_h5()
self.first_heartbeat()
# 心跳
self.heartbeat()
except Exception as e:
print("请求异常:", e)
def handler():
# 1.用户输入视频buvid
buvid = "BV1Mb4y1X73e"
# 2.获取视频信息
aid, bvid, cid, view_count, duration = get_video_info(buvid)
# 3.播放
h5 = H5Anonymous(aid, bvid, cid, view_count, duration, None)
h5.run()
if __name__ == '__main__':
handler()
这个代码的效率很低,后期可以利用队列提升效率。

问题:
- IP不同,不会造成问题。
- B站中的小漏洞。 highlighter- Markdown- H5和PC中都间隔15s一次心跳(5分钟的视频) – APP发现(目前可用) – 开头 – 结束 start_ts + 心跳间隔,那我能不能直接把完播的数据发送过去。
总结
- 目前:600 ~ 1000播放。
- 更多:模拟人操作。
__EOF__

本文作者:fuminer本文链接:https://www.cnblogs.com/fuminer/p/17110945.html关于博主: 发现更好的自己! 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议,转载请注明出处! 声援博主: 如果您觉得文章对您有帮助,可以点击页面右下角的喜欢、关注、赞赏图标!
分类: 逆向
标签: python
好文要顶推荐该文
关注我关注博主关注博主
收藏该文收藏本文
微信分享分享微信
0
0
« 上一篇: Word+PDF自动化
» 下一篇: X视频
posted @ 2023-02-11 10:02凫弥 阅读(2714) 评论(3) 编辑收藏举报
登录后才能查看或发表评论,立即 登录 或者 逛逛 博客园首页
【推荐】vivo蓝河操作系统技术沙龙招募开启,邀您共探Rust与AI新时代
【推荐】「指间灵动,快码加编」:阿里云通义灵码,再次降临博客园
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
【推荐】「废话少说,放码过来」:博客园2024夏季短袖T恤上架啦
【推荐】会员力量,点亮园子希望,期待您升级成为博客园VIP会员

编辑推荐:
· .NET科普:.NET简史、.NET Standard以及C#和.NET Framework
· 拯救 SQL Server 数据库事务日志文件损坏的终极大招
· 微服务架构的思想本质
· 线程池遇到父子任务,有大坑,要注意
· 记录荒废了三年的四年 .net 开发的第一次面试
阅读排行:
· 给博客园的寄语
· 36岁,大龄剩男,2024上半年总结……
· .NET科普:.NET简史、.NET Standard以及C#和.NET Framework之间的关
· C# 使用模式匹配的好处,因为好用所以推荐~
· PHP 程序员为什么依然是外包公司的香饽饽?
X站 _
23/02/11 10:02271430
3445368:54 ~ 114:50逆向python










welcome to fuminer blog!

- 积分排名
- 最新随笔
- 我的标签
- 随笔分类
- 文章分类
- 阅读排行
- 推荐排行
- 最新评论
- Re:uric组件2022文档教学课程在哪里呢? –flytoyou
- Re:Uric自动化运维平台文档教学课程在哪里呢? –flytoyou
- Re:Uric自动化运维平台文档@凫弥 期待…–吃葡萄,不吐葡萄皮
- Re:Uric自动化运维平台文档@吃葡萄,不吐葡萄皮 后面有时间了会加上去的…–凫弥
- Re:Uric自动化运维平台文档大佬,文档中的图片无法查看了,能分享一下此文档吗,多谢 –吃葡萄,不吐葡萄皮
- Re:X站@凫弥 感谢回复…–wahaha41
- Re:X站@wahaha41 速度别太快了…–凫弥
- Re:X站用dalao的脚本试了试,刷了200左右播放量就不涨了,不清楚是为什么。你在测试过程中遇到过这种情况吗 –wahaha41
- Re:一次性解决掉npm安装失败的问题没有用哇 –Simplest
- 随笔档案
- 文章档案
管理 Created with Snap
公告
文章目录
访问主页
0
0
Alipay
WeChat
qrCode
关注
点击开启
返回顶部
搜索
常用链接
最新随笔
- 1.易福门DTE104模块配置
- 2.测试自动化
- 3.day30-三剑客awk
- 4.day29_三剑客sed
- 5.day28_正则表达式
- 6.day27_通配符
- 7.day26 lvm逻辑卷管理
- 8.day25磁盘管理二
- 9.day24_磁盘管理
- 10.day23_编译LAMP
我的标签
积分与排名
- 积分 – 23981
- 排名 – 64269
合集 (3)
随笔分类 (78)
- bootstrap(2)
- celery(1)
- Django(3)
- DRF(4)
- Jenkins(1)
- linux(2)
- python(3)
- 加密(1)
- 脚本(1)
- 逆向(41)
- 前后端分离(11)
- 数据库(3)
- 腾讯云(2)
- 微信支付(1)
- 自动化(2)
随笔档案 (139)
- 2024年5月(1)
- 2024年2月(48)
- 2024年1月(2)
- 2023年12月(1)
- 2023年11月(2)
- 2023年10月(1)
- 2023年9月(2)
- 2023年8月(1)
- 2023年7月(10)
- 2023年6月(1)
- 2023年5月(3)
- 2023年4月(5)
- 2023年3月(26)
- 2023年2月(7)
- 2023年1月(1)
- 2022年12月(2)
- 2022年11月(8)
- 2022年10月(8)
- 2022年9月(9)
- 2022年8月(1)
文章分类 (1)
文章档案 (7)
相册 (4)
AI
Anaconda相关
appium相关
- Appium异常:An unknown server-side error occurred while processing the command. Original error: Could n
- Cannot verify the signature of \ Could not find ‘apksigner.jar‘
Bootstrap相关
celery相关
- Win10启动Celery报错解决方案 Task handler raised error: ValueError: not enough values to unpack
- celery的错误:ValueError: not enough values to unpack (expected 3, got 0)
- 牛哄哄的celery
centos
- 在CentOS 7上安装Htop
- Linux 修改zabbix server的web访问端口
- zabbix介绍及部署(超详细讲解)
- Small match 导航 首页 组成 分类 页面 友链 管理 文章 评论 CentOS8报错:Error: Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlis
- CentOS6.5安装Maven3.2.5
- Centos搭建FTP服务器
- centos7下安装python3.8
- centos7安装MySQL5.7
- 在CentOS上安装Java JDK 8
- Miniconda-0001-在 CentOS 7 上安装迷你康达
- centos安装ODBC驱动
- centos配置1Panel 面板安装dataease
- Centos7 下安装 wkhtmltopdf PHP调用wkhtmltopdf
- CentOS7 配置本地yum源软件仓库
- 用VMware运行linux CentOS7时,Network中没有wired选项,只有VPN的情况解决方案
- centos下安装nodejs的三种种方式
- 解决Linux html生成图片中文乱码
- centos apache html 乱码 centos7字符界面中文乱码
datax
django相关
- 关于Django is not importable in this environment的解决方法
- (models.W042) Auto-created primary key used when not defining a primary key type
- Django 报错 Refused to display ‘http://127.0.0.1:8000/ in a frame because it set ‘X-Frame-Option
- python格式化时间报错:UnicodeEncodeError: ‘locale’ codec can’t encode character ‘\u5e74’ in position 2: Illegal byte sequence
- pycharm 提示 Django is not importable in this environment 的解决方法
- django.core.exceptions.ImproperlyConfigured: SQLite 3.9.0 or later is required (found 3.7.17)
- Django中如何使用Mysql数据库
- Django笔记:常见故障排除
- TypeError: argument 1 must be str, not WindowsPath
- AttributeError: ‘ForeignKey’ object has no attribute ‘rel’
- django-xadmin的安装
- django安装xadmin及问题处理
docker
- Error response from daemon: error creating overlay mount to /var/lib/docker/overlay2
- centos安装docker-compose
- Docker 部署 Gitlab 服务器(详细步骤)
- 懂了!VMware/KVM/Docker原来是这么回事儿
- CentOS下 Docker、Docker Compose 的安装教程
echarts
Excel
ffmpeg相关
FTP
Git相关
- 如何看待gitee仓库空间信息限制5G总容量?
- gitlfs下载网址
- GitHub git push超过100MB大文件失败(write error: Broken pipe)完美解决
- 远程git pull 代码报错fatal: Not a git repository (or any of the parent directories): .git
- ERROR: You‘re using an RSA key with SHA-1, which is no longer allowed.
- git操作出现 error: The following untracked working tree files would be overwritten by …
- GitLab—URL服务器IP地址设置
- Pycharm本地连接远程服务器步骤以及代码同步设置
jenkins
k8s
kafka
- Python本地获取kafka中数据 python kafka
- kafka数据导入starrocks数据库
- kafka系列-入门篇之安装
- 解决公司Kafka集群问题
- Centos7系统部署搭建Kafka集群
kali
mac相关
MQ队列
mysql
- Centos7.5安装MySQL5.7
- 错误1130- Host xxx is not allowed to connect to this MariaDb server
- 连接数据库提示Host ‘localhost’ is not allowed to connect to this MySQL server解决办法
- Table is marked as crashed and should be repaired 解决办法
- 解决MySQL中文编码问题
- 【MySQL】报错1267 – Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPL
- 林海峰-MySQL数据库
- mysql binlog日志恢复数据
- python进行mysql数据实时同步的正确姿势(使用canal)
- Python:mysql-replication监控MySQL的binlog变动
NAS
nginx
- nginx: [error] invalid PID number ““ in “/usr/local/nginx/logs/nginx.pid“
- nginx: [emerg] the “ssl“ parameter requires ngx_http_ssl_module in /usr/local/
- Nginx部署百度域名SSL证书(TRUSTASIA DV 单域名版)
- Centos7 SSH公钥生成及配置
OCR识别
PLC相关
postman相关
prometheus
- windows监控linux服务器资源grafana+prometheus+node_exporter
- 手把手教你搭建Windows 搭建Prometheus + Grafana + Jmeter可视化监控平台
- Grafana+Prometheus+Windows_exporter+Mysql_exporter
- 超详细教程:Centos安装Prometheus、Grafana监控Kafka及Linux主机
pycharm相关
pyflink
python
- ModuleNotFoundError: No module named ‘xxx‘可能的解决方案大全
- Python解决pip install时出现的Could not fetch URL问题
- 报错:CryptographyDeprecationWarning: Python 3.6 is no longer supported by the Python core team.
- pip换源
- execjs._exceptions.ProcessExitedWithNonZeroStatus
- POST 提交数据方式常用的四种方式
selenium相关
- ERROR:ssl_client_socket_impl.cc(962)]handshake failed;returned-1,SSL error code1,net_error-100
- python之selenium wire获取请求头参数
- python一招自动搞定Chromedriver爬虫驱动的更新
- CentOS下python3 selenium3 使用Chrome的无头浏览器 截取网页全屏图片
- 处理driver_path报错
SqlServer
- 【自学笔记】在SQL Server中创建用户角色及授权(使用SQL语句)更新2023.07.06
- Download ODBC Driver for SQL Server
- SQL Server 最详细安装教程
SSH
TCP
ubuntu相关
- linux-ubuntu安装配置uwsgi
- ubuntu20安装gcc和uwsgi
- 在VMware上安装Ubuntu详细教程
- Ubuntu安装VMware tools工具
- Linux运维:查看root密码的方法及步骤
VNC
vue相关
windows相关
- Windows查看ssh公钥方法
- windows运行.sh,运行shell脚本
- Windows上生成/添加SSH公钥
- Redis 在windows系统的安装
- 解决报错 Microsoft Visual C++ 14.0 is required
- windows 安装python-alipay-sdk失败解决
- windows 7zip 解压 Mac压缩的zip 乱码 解决
- 7z 常用压缩与解压缩命令
- windows环境压力测试工具Apache ab安装及使用(apache benchmark)
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOT
- window结束进程命令
- 跳过UAC,信任软件直接运行
- Zip文件中文乱码问题解决方法
- Snipaste安装教程及软件(截图工具)
- 电脑C盘空间满了如何清理?5种有效方法
- XFTP连接成功文件出现乱码
- 为什么C盘空间越来越满?
- 致力于操作系统应用与计算机网络技术的IT网站。
- edge浏览器扩展打包与扩展安装
- win10远程桌面报错: 由于一个协议错误(代码:0x112f),远程会话将被中断,请重新跟远程计算机连接_您的远程桌面会话已结束,可能是下列原因之一—windows工作笔记054
- WinDirStat下载使用指南,处理电脑空间神器
- Windows安装Ubuntu
wsgi
- CentOS 7环境部署(5)——uwsgi
- uwsgi — unavailable modifier requested: 0 — 的解决办法
- uwsgi出现invalid request block size: 21573 (max 4096)…skip
- uWSGI命令学习与使用
报错
- django.template.exceptions.TemplateSyntaxError: ‘staticfiles’ is not a registered tag library.
- django.core.exceptions.ImproperlyConfigured
- PyCharm 出现卡顿解决方案
- ImportError: cannot import name ‘BeautifulSoup‘ from partially initialized module ‘bs4‘
- 关于Django 报错 ImportError: cannot import name RegexUrlResolver解决
- pycharm 中一键添加引号 pycharm快捷键大全
- 执行python manage.py makemigrations提示No changes detected
- selenium.common.exceptions.WebDriverException: Message: ‘chromedriver‘ executable 的解决方案!
- 关联表查询时报错OverflowError: Python int too large to convert to C long
- selenium 报错 DeprecationWarning: executable_path has been deprecated, please pass in a Service object
- 成功解决 AttributeError: ‘TySpider‘ object has no attribute ‘make_requests_from_url‘
- python调用selenium库驱动chrome浏览器报错
- 解决”ERR Client sent AUTH, but no password is set” 错误
- AssertionError: `basename` argument not specified, and could not automatica
- django3.1 + drf 报‘RenameAttributes‘ object is not iterable错误解决
- TypeError: argument of type ‘WindowsPath‘ is not iterable 问题处理
- No JDK found. Please validate either ANDROID_STUDIO_JDK, or JDK_HOME or JAVA_HOME points to valid JDK installation.
- 重装JDK提示JDK已存在
- creating server tcp listening socket 127.0.0.1:6379: bind No error
- 解决 redis中redis.exceptions.AuthenticationError: Authentication required问题
- 解决selenium实现自动登录之后,浏览器会闪退!!!
- selenium出现“element not interactable”问题总结
- selenium.common.exceptions.ElementClickInterceptedException解决办法
- VMware安装系统时”无法创建新虚拟机: 不具备执行此操作的权限”的解决方案
- 服务器更换系统后Mac连接报错
- 连接服务器出现@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@。。。
- Jenkins重启成功,但是页面访问不了
- celery启动报错You are using `-A` as an option of the worker sub-command:
- Celery5.0 报错 Windows :ValueError: not enough values to unpack (expected 3,
- django.core.exceptions.ImproperlyConfigured: Requested setting DEBUG, but settings are not configure
- windows下忘记mysql root密码的解决办法
- ValueError: Cannot assign “<User: root>”: the current database router preven
- Vue 控制台报错 An error occurred in hook getInspectorState registered by plugin org.vuejs.vue2-internal
- 更多
博客园主题
测试
大数据、数仓
低代码相关
个人站点
浏览器
- Warning: Don’t paste code into the DevTools Console that you don’t understand or haven’t reviewed yo
爬虫相关
设备相关
渗透
- Kali使用Metasploit内、外网渗透windows系统
- 第1章-安装渗透测试系统Kali
- 第2章-配置本地网络并实现xshell连接kali系统
- 第3章-利用第三方服务对目标进行被动信息收集防止被发现
收藏博客
- CRM项目
- 浏览器的驱动程序(谷歌浏览器)
- selenium之 chromedriver与chrome版本映射表
- 下载twisted
- scrapy进行分布式爬虫
- XPath Helper安装及使用
- selenium使用find_element定位元素方法
- Pandoc工具支持多种文件的格式转换
- pdf转MD、HTML、word以及各种格式之间的相互转换
- 谷歌浏览器插件Volume Control – 音量控制声音大小调节 By DevAudio
- VMware与Centos系统安装
- 云服务器安装宝塔面板
- GitHub 访问速度慢的解决方法
- 阿里云服务器被挖矿的解决方法
- 如何清理Linux服务器磁盘空间
- Navicat安装、使用教程
- 浏览器必备的 30 个超实用油猴脚本推荐,持续更新中!
- Linux下安装Anaconda3详细教程
- 如何解决上传到github上的图片显示不出来的问题
- 【Github+PicGo】Github图床设置并上传图片
- 手把手教你如何使用kali破解wifi密码(图文教程)
- 博客园主页文章图片无法显示在线链接的解决方法
- FinalShell
- FinalShell激活码在线生成
- 《 Hello,算法 》
- Typora+PicGo-Core(command line)+Gitee实现图片上传到图床
- Typora图床配置
- Charles抓包工具的破解以及使用
- AI聚合工具层出不穷,唯有这款AI 0x0太人性化了!
- MAC应用无法打开或文件损坏的处理方法
- IDM2021破解版v6.40附安装破解教程
- mac上brew安装
- 微信多开助手(微信多开、消息防撤回工具)for mac
- Tauri Logo——pake打包网页应用APP
- Django-Vue3-Lyadmin后台管理系统
- 如何修复Chrome STATUS ACCESS VIOLATION?解决办法介绍
- 路飞学长博客
- 优秀的开源项目
- 推荐一款强大的笔记管理软件:Obsidian
- 打开其他软件时,老是弹出Xftp7安装的问题(msi报错)
- GIF在线制作工具
- 鼠标和键盘跨设备共享无缝切换
- windows免费磁盘分析软件WizTree:高速硬盘空间分析利器,精准定位并删除占用大空间文件
- 更多
数采
数据库
- sqlite3转移至mysql,这里又有许多走过的坑,希望能帮到你
- django sqlite数据库导出迁移到mysql数据库方法
- MySQL之锁、事务、优化、OLAP、OLTP
- MYSQL 开启远程访问完全解决方案
- navicat mysql 10060_记一次Navicat for MySQL 10060错误的解决过程
- navicat premium15中文破解版 v15.0.23 32/64位
- SQL server安装教程
- Python打开mdb文件
- InterfaceError: (pyodbc.InterfaceError) (‘IM002‘, ‘[IM002] [Microsoft]
梯子
微信小程序
小细节
- pycharm的File中没有settings怎么办?
- 如何导出python安装的所有模块名称和版本号到文件中
- Typora图片上传和加载问题解决方案
- pycharm远程连接服务器
- Typora常用好看主题推荐!!!
- python 检查是否为中文字符串的方法
- python_base64_binascii.Error: Incorrect padding解决
虚拟环境
原型图相关
终端安装常见报错
- 错误:无法在Intel默认前缀(/usr/local)的ARM处理器上的Homebrew中安装
- 最佳解决方法 Error: No such file or directory @ rb_sysopen
- maven环境本地搭建配置
自动化相关
- 【Bug】ERROR: Could not build wheels for opencv-python, which is required to install pyproject.toml-ba
阅读排行榜
- 1. X站(2714)
- 2. 一次性解决掉npm安装失败的问题(1490)
- 3. APP逆向必备(反编译hook算法)(1445)
- 4. 腾讯云COS对象存储服务的使用(1390)
- 5. APP逆向入门(adb和Charles抓包)(856)
推荐排行榜
最新评论
- 1. Re:uric组件2022文档
- 教学课程在哪里呢?
- –flytoyou
- 2. Re:Uric自动化运维平台文档
- 教学课程在哪里呢?
- –flytoyou
- 3. Re:Uric自动化运维平台文档
- @凫弥 期待…
- –吃葡萄,不吐葡萄皮
- 4. Re:Uric自动化运维平台文档
- @吃葡萄,不吐葡萄皮 后面有时间了会加上去的…
- –凫弥
- 5. Re:Uric自动化运维平台文档
- 大佬,文档中的图片无法查看了,能分享一下此文档吗,多谢
- –吃葡萄,不吐葡萄皮
- 6. Re:X站
- @凫弥 感谢回复…
- –wahaha41
- 7. Re:X站
- @wahaha41 速度别太快了…
- –凫弥
- 8. Re:X站
- 用dalao的脚本试了试,刷了200左右播放量就不涨了,不清楚是为什么。你在测试过程中遇到过这种情况吗
- –wahaha41
- 9. Re:一次性解决掉npm安装失败的问题
- 没有用哇
- –Simplest
[ 不畏浮云遮望眼 只缘身在最高层 ]
This blog has running : 805 d 5 h 59 m 14 sღゝ◡╹)ノ♡
##linksHtml##
##cnzzHtml##
Copyright © 2024 凫弥 Powered by .NET 8.0 on Kubernetes










暂无评论内容