抖音web端 s_v_web_id 參數(shù)生成分析與實現(xiàn)
?本文所有教程及源碼、軟件僅為技術(shù)研究。不涉及計算機信息系統(tǒng)功能的刪除、修改、增加、干擾,更不會影響計算機信息系統(tǒng)的正常運行。不得將代碼用于非法用途,如侵立刪!
抖音web端 s_v_web_id 參數(shù)生成分析與實現(xiàn)
操作環(huán)境
win10
Python3.9
分析
s_v_web_id 作用:web端使用滑塊后的s_v_web_id 參數(shù)可以實現(xiàn)免signature驗證 s_v_web_id 生成:在驗證碼中間頁的html中的fp參數(shù)就是s_v_web_id ?詳細介紹這邊就不在贅述,可以參考下璽佬的文章:s_v_web_id介紹 生成方案:
Python + selenium 自動化過滑塊
RPC遠程調(diào)用自動,驗證滑塊
這兩種方案有個前提是頁面必須出現(xiàn)滑塊才可以(之前搜素視頻會強制滑塊效驗),具體過滑塊的方法璽佬都已經(jīng)分享過。 ?現(xiàn)在應(yīng)該是web端有更新,現(xiàn)在搜索頁面只有綜合會出點選驗證,視頻和用戶頁面都沒有強制滑塊驗證了,清cookie和開無痕都沒辦法觸發(fā)滑塊,經(jīng)過幾天的分析研究出以下方案 最新解決方案:
通過js生成滑塊s_v_web_id
識別滑塊
生成驗證參數(shù)并驗證
驗證通過后就可正常使用了
通過js生成滑塊s_v_web_id
function create_s_v_web_id() {
? ?var e = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split("")
? ? ?, t = e.length
? ? ?, n = (new Date).getTime().toString(36)
? ? ?, r = [];
? ?r[8] = r[13] = r[18] = r[23] = "_",
? ?r[14] = "4";
? ?for (var o, i = 0; i < 36; i++)
? ? ? ?r[i] || (o = 0 | Math.random() * t,
? ? ? ?r[i] = e[19 == i ? 3 & o | 8 : o]);
? ?return "verify_" + n + "_" + r.join("")
}
此方法生成的s_v_web_id是不可以用來采集評論的,評論驗證使用的s_v_web_id需要從頁面取下來,然后在拿著過滑塊,此處再次感謝璽佬@李璽
識別滑塊
def calculate_distance(self, pic1_path, pic2_path):
? ?"""
? ?計算滑塊到缺口的距離
? ?"""
? ?img1 = self.clear_white(pic1_path)
? ?img1 = CV2.cvtColor(img1, CV2.COLOR_RGB2GRAY)
? ?slide = CV2.Canny(img1, 100, 200)
? ?img2 = CV2.imread(pic2_path, 0)
? ?back = CV2.Canny(img2, 100, 200)
? ?slide_pic = CV2.cvtColor(slide, CV2.COLOR_GRAY2RGB)
? ?back_pic = CV2.cvtColor(back, CV2.COLOR_GRAY2RGB)
? ?x, y = self.template_match(slide_pic, back_pic)
? ?dis_x = int((x + 5) * (340 / 552))
? ?dis_y = int(y * (340 / 552))
? ?return dis_x, dis_y
def get_tracks(self, distance, _y):
? ?"""
? ?獲取軌跡參數(shù)
? ?"""
? ?tracks = list()
? ?y, v, t, current = 0, 0, 1, 0
? ?mid = distance * 3 / 4
? ?exceed = random.randint(40, 90)
? ?z = random.randint(30, 150)
? ?while current < (distance + exceed):
? ? ? ?if current < mid / 2:
? ? ? ? ? ?a = 2
? ? ? ?elif current < mid:
? ? ? ? ? ?a = 3
? ? ? ?else:
? ? ? ? ? ?a = -3
? ? ? ?a /= 2
? ? ? ?v0 = v
? ? ? ?s = v0 * t + 0.5 * a * (t * t)
? ? ? ?current += int(s)
? ? ? ?v = v0 + a * t
? ? ? ?y += random.randint(-3, 3)
? ? ? ?z = z + random.randint(5, 10)
? ? ? ?tracks.append([min(current, (distance + exceed)), y, z])
? ?while exceed > 0:
? ? ? ?exceed -= random.randint(0, 5)
? ? ? ?y += random.randint(-3, 3)
? ? ? ?z = z + random.randint(5, 9)
? ? ? ?tracks.append([min(current, (distance + exceed)), y, z])
? ?tr = []
? ?for i, x in enumerate(tracks):
? ? ? ?tr.append({
? ? ? ? ? ?'x': x[0],
? ? ? ? ? ?'y': _y,
? ? ? ? ? ?'relative_time': x[2]
? ? ? ?})
? ?return tr
生成驗證參數(shù)并驗證
captchaBody需要js生成
def captcha_verify(self, s_v_web_id, captchaBody):
? ?url = "aHR0cHM6Ly92ZXJpZnkuc25zc2RrLmNvbS9jYXB0Y2hhL3ZlcmlmeQ=="
? ?params = {
? ? ? ?"os_type": "2",
? ? ? ?"fp": s_v_web_id,
? ? ? ?"subtype": "slide",
? ?}
? ?data = {
? ? ? ?'captchaBody': captchaBody
? ?}
? ?r = self._parse_url(url=url, params=params, data=json.dumps(data))
? ?return r.json()
效果
識別率成功率還是可以的

本文僅供學習交流使用,如侵立刪!