Python实现某云在线客服退款保持联系,自动化测试selenium元素定位,利用多线程Thread实现脚本暂停/继续执行,采用pyttsx3实现语音播报排名情况

项目背景

某云在线客服只要一阵子不理他,他就会给你断线要重新排队

 

为了能够与该在线客服保持联络,我要实现浏览器操作自动化才能完成进入到人工客服的队列里

 项目需求

  1. 周期性定时在输入框自动输入文字内容,并发送给机器人客服
  2. 能够随时中断自动输入的文字内容,我人工介入与在线客服进行咨询
  3. 进阶优化功能:排队人数小于3人时,语音播报我实时的排名情况

系统架构

待补充...

完整代码

#!/usr/bin/env python

from selenium import webdriver 
# from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.common.by import By

import time
from threading import Thread
# import os
import re

import pyttsx3
engine = pyttsx3.init()


Flag_Pause = False

Error_Count = 0



# 操作网页
def operateWeb():
    driver = webdriver.Chrome ()
    url = "https://im.ldygo.com/webchat_new/static/html/index.html?ht=kRLOt2"
    # url = "https://baidu.com"
    driver.get(url)

    input('按任意内容继续')

    # 进入嵌入的iframe
    driver.switch_to.frame("mainiframe")

    t1 = Thread(target=changeFlag)
    t1.start()

    # driver.switch_to.default_content() #退出iframe页面,返回主页面

    while True:
        # str = input('请输入要查找的内容:')
        if not Flag_Pause:

            try:
                # words = driver.find_element(By.ID,"%s"%str)
                # print(words)
                msg = driver.find_elements(By.CLASS_NAME,"msg-text")
                # print(msg)

                waitNum = re.findall(r'-?\d+\.?\d*', msg[-2].text)
                if int(waitNum[0]) < 3 :
                    sentence = "前面排队还有 %s 名"%waitNum
                    engine.setProperty('volume', 0.1)  # 设置音量(最小为0, 最大为1)
                    engine.say(sentence) # 朗读文本
                    engine.runAndWait() # 执行并等待语音结束
                else:
                    sentence = msg[-2].text
                print(sentence)

                # 发送文字至目标id
                driver.find_element(By.ID,"chatText").send_keys("手机号1*****4的订单,请求退款,麻烦处理一下")
                # # 点击目标id
                driver.find_element(By.ID,"send").click()
                # 保持排队通讯联络2分钟发一次
                time.sleep(120)

            except Exception as result:
                print("未知错误 %s" % result)
                global Error_Count
                Error_Count += 1
                # 错误5次程序停止继续执行 这里有点像看门狗的意思 # 停止下来等待人的继续操作通知
                if Error_Count == 5:
                    input('程序异常,请按任意键继续')
                    Error_Count = 0 # 计数器重新置零
                    # os._exit(0) # 如果直接退出程序,浏览器就关闭了,可能导致白排队,但其实浏览器没有被关闭,这个退出程序退的进程不彻底


# 自动发送暂停/继续
def changeFlag():
    global Flag_Pause
    while True:
        value = input('是否停止自动发送 y/n?')
        if value == 'y':
            Flag_Pause = True
            input('已暂停持续自动发送,按任意键继续自动发送')
            Flag_Pause = False


if __name__ == "__main__":
    print('----------使用范围:联系客服----------')
    operateWeb()

注意事项

  1. 不需要语音播报的可以注释掉我语音播报的部分代码
  2. 程序需要写在循环函数里,中断函数需要另外创建一个线程,并能够修改与主程序共用的Flag_Pause全局变量。中断函数要声明修改的是全局变量,故global声明很关键。
  3. 捕捉的定位元素所在页面层级很关键,某云是与云软合作的,将云软的页面内嵌到他们的页面上,故定位的时候还需要切换一下页面句柄,你们不是iframe类型的元素定位,可以注释掉我切换句柄的那一句。

实际输出日志

​​​​​​​ 

----------使用范围:联系客服----------
按任意内容继续
是否停止自动发送 y/n?正在为您转接客服小姐姐,请稍等!前面还有24人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有24人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有22人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有21人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有20人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有16人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有15人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有14人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有13人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有12人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有11人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有11人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有9人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有8人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有8人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有8人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有8人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有7人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有7人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有7人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有7人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有7人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有7人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有7人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有6人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有6人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有6人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有6人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有6人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有6人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有6人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有6人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有6人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有6人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有6人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有6人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有6人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有6人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有6人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有6人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有5人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有4人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有4人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有4人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有4人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有4人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有4人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有4人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有4人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有4人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有4人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有4人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有4人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有4人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有4人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有4人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有4人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有4人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有4人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有4人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有3人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有3人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有3人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有3人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有3人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有3人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有3人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有3人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有3人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有3人排队,您也可以点击
感谢您的耐心等待,因用车高峰期,客服繁忙,您前面还有3人。您也可以选择
感谢您的耐心等待,因用车高峰期,客服繁忙,您前面还有3人。您也可以选择
感谢您的耐心等待,因用车高峰期,客服繁忙,您前面还有3人。您也可以选择
正在为您转接客服小姐姐,请稍等!前面还有3人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有3人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有3人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有3人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有3人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有3人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有3人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有3人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有3人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有3人排队,您也可以点击
正在为您转接客服小姐姐,请稍等!前面还有3人排队,您也可以点击
前面排队还有 ['2'] 名
前面排队还有 ['2'] 名
前面排队还有 ['2'] 名
前面排队还有 ['2'] 名
前面排队还有 ['2'] 名
前面排队还有 ['2'] 名
前面排队还有 ['2'] 名
前面排队还有 ['2'] 名
前面排队还有 ['2'] 名
前面排队还有 ['2'] 名
前面排队还有 ['2'] 名
前面排队还有 ['2'] 名
前面排队还有 ['2'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名
前面排队还有 ['1'] 名

每一条日志就是2分钟的间隔,可想而知是某云做的障眼法,根本没有在线客服的存在...

24人排队也许是真实的人,但最后的那1个人一定是虚拟名额,大家不断的放弃离开一直到还有1名,这就是最真实的结果

后记

第一次租车就遇到了某云的故障车,后悔百度的时候看见大家的评价不好没有认真对待,真是把自己坑到了。

这年头没有点技术都不配联系某云的在线客服了?打语音电话机器人客服说联系APP上的在线客服,我笑了,排队重来没有排进去的。

一开始我用JS在浏览器里想实现功能,却发现只能修改value值,却没有办法发送出去,估计是页面框架绑定了键盘事件,最终采用python的方式来实现这个需求。

`,_+=1})),x=t}let U=l,A=l;l<0?(a=0,i<=o&&(a=s.div(s.sub(i,d),2))):0==l?i<=o&&(a=s.div(s.sub(i,d),2)):(t=s.add(4,36),t=s.add(s.add(d,t),s.add(s.mul(_,38),36)),l>S.sub(i,T)&&(A=S.sub(i,T)));let O="",L=t?s.runtime.getURL("img/video-default.png"):"https://res.stayfork.app/scripts/BB8CD00276006365956C32A6556696AD/icon.png",D='
'+L+'
'+S.getHostname(n.hostUrl)+"
";n.poster&&(O="border-radius: 15px;",D=`
`),function(t,e,r){if(t&&"VIDEO"==t.tagName){t.setAttribute("autoplay","autoplay"),t.setAttribute("crossOrigin","anonymous");var n=document.createElement("canvas");e=(n.width=e,n.height=r,n.getContext("2d"));e.drawImage(t,0,0,n.width,n.height)}}(e,u,d);var T=` `,P=['
','
','
','
'+D+"
",'
','
'+n.title+"
",'
',x,"
","
","
","
","
"];return document.body.append(S.parseToDOM(T)),document.body.append(S.parseToDOM(P.join(""))),document.querySelector("#__stay_sinffer_modal")}()).style.visibility="visible";const m=document.querySelector("#__stay_sinffer_modal ._stay-sinffer-popup");document.querySelector("#__stay_sinffer_modal .__stay-sinffer-content").classList.add("__stay-trans");let f=setTimeout((function(){p.classList.add("__stay-show-modal"),m.style.visibility="visible",clearTimeout(f),f=0}),400);p.addEventListener("touchmove",(t=>{t.preventDefault(),t.stopPropagation()}),!1),p.addEventListener("touchstart",(t=>{t.preventDefault(),p.classList.remove("__stay-show-modal"),m.style.animation="fadeout .5s;";let e=setTimeout((()=>{p&&document.body.removeChild(p),document.body.removeChild(document.querySelector("#__style_sinffer_style")),clearTimeout(e),e=0}),200)}),!1);const g=document.querySelectorAll("#__stay_sinffer_modal ._stay-quality-item");if(g&&g.length)for(let t=0;t{t=t.target.getAttribute("stay-download");var e=document.createElement("a");e.href=t,e.click()}))}function k(t){var e,r;return D()?(e=u.decodeFunStr,e=new Function("return "+e),r=S.queryParams(t,"url"),t=S.queryParams(t,"s"),t=e()(decodeURIComponent(t)),N(r=decodeURIComponent(r)+"&sig="+t)):""}function N(t){if(function(){let t=D();return t&&!!u.decodeSpeedFunStr}()&&!S.queryURLParams(t,"oid")){let n="",o=0;for(var e in f)f[e]&&void 0!==f[e]&&(o+=1,n+="&"+e+"="+f[e]);var r=S.queryURLParams(t,"n");r&&(g[r]||(g[r]=function(t){try{var e=u.decodeSpeedFunStr;return new Function("return "+e)()(decodeURIComponent(t))}catch(t){return""}}(r)),g[r])&&(t=S.replaceUrlArg(t,"n",g[r]),t+=n)}return t}function I(t,e){t&&(f.cver=f.cver||S.queryURLParams(t,"cver"),j(t)),e&&Object.keys(e).length&&(e.playbackTracking&&e.playbackTracking.ptrackingUrl&&e.playbackTracking.ptrackingUrl.baseUrl&&j(e.playbackTracking.ptrackingUrl.baseUrl),e.responseContext)&&e.responseContext.serviceTrackingParams&&e.responseContext.serviceTrackingParams.length&&e.responseContext.serviceTrackingParams.forEach((t=>{"CSI"==t.service&&t.params.length&&t.params.forEach((t=>{"cver"==t.key&&(f.cver=f.cver||t.value)}))}))}function j(t){f.cpn=f.cpn||S.queryURLParams(t,"cpn"),f.ptk=f.ptk||S.queryURLParams(t,"ptk"),f.oid=f.oid||S.queryURLParams(t,"oid"),f.ptchn=f.ptchn||S.queryURLParams(t,"ptchn"),f.pltype=f.pltype||S.queryURLParams(t,"pltype")}function M(t){return t&&t.length?(t.sort(S.compare("bitrate")),(t=t[0]).url||(D()?k(t.signatureCipher):t.signatureCipher)):""}function F(){let t=setTimeout((()=>{{let t={},e=window.location.host,r=(l=window.location.href,t.hostUrl=l,null);-1{"hls"==e.format&&"string"==typeof e.quality&&e.videoUrl&&n.push({downloadUrl:e.videoUrl,qualityLabel:e.quality,quality:Number(e.quality)}),!e.defaultQuality||"boolean"!=typeof e.defaultQuality&&"number"!=typeof e.defaultQuality||(r=e.defaultQuality,t.downloadUrl)||(t.downloadUrl=e.videoUrl)})),t.qualityList=n}}return t}function V(t){if(!t)return{};var e={};if(e.title=t.title,e.poster=t.poster,e.downloadUrl=t.playurl,t.clarityUrl&&t.clarityUrl.length){let r=[];t.clarityUrl.forEach((t=>{t.vodVideoHW,r.push({downloadUrl:t.url,qualityLabel:t.title,quality:t.key})})),e.qualityList=r}return e}function H(){var t=document.querySelector(".art-player-wrapper .art-video-player .art-poster");return t&&(t=t.getAttribute("style"),t)?S.matchUrlInString(t):(t=document.querySelector("#bdMainPlayer .art-video-player .art-poster"),t&&(t=t.getAttribute("style"),t)?S.matchUrlInString(t):"")}function W(){var t=document.querySelector(".adVideoPageV3 .curVideoInfo h3.videoTitle");return(t=t||document.querySelector(".video-info .video-info-title"))||(t=document.querySelector(".video-main .video-content .video-title .video-title-left"))?t.textContent:""}function B(t){let e={};var r=window.ytplayer;let o=S.queryURLParams(l,"v")||S.getLastPathParameter(l);o||(i=document.querySelector("#player-control-container > ytm-custom-control > div.inline-player-controls > a.inline-player-overlay"))&&(i=i.getAttribute("href"),o=S.queryParams(i,"v"));var i=r?r.bootstrapPlayerResponse:{};if(o){let l="";if(t)e.poster=t.getAttribute("poster")||"",e.downloadUrl=t.getAttribute("src"),t=t.getAttribute("title"),e.title=t;else if(!r||!i.videoDetails)return e;if(i&&i.videoDetails&&i.streamingData&&(!o||o===i.videoDetails.videoId)){I("",i);t=i.videoDetails;var a=t.title||"",s=(t=(e.title=a,t.thumbnail),t=(t&&(t=t.thumbnails)&&t.length&&(e.poster=t.pop().url),i.microformat&&i.microformat.playerMicroformatRenderer&&i.microformat.playerMicroformatRenderer.thumbnail&&i.microformat.playerMicroformatRenderer.thumbnail.thumbnails.length&&(e.poster=i.microformat.playerMicroformatRenderer.thumbnail.thumbnails[0].url),i.streamingData),t.adaptiveFormats);if(t.formats,l=l||"",!s||!s.length||l&&l.replace(/\s+/g,"")!==a.replace(/\s+/g,""))e.title=l||$(),e.downloadUrl=G();else{let o=[];new Set;var c;t=r.bootstrapWebPlayerContextConfig?r.bootstrapWebPlayerContextConfig.jsUrl:"";try{t&&(c=Y(m=t))&&(n.randomPathUuid=c)}catch(tt){}let i={},a=[],l=[],u=(s.forEach((t=>{var e,r=t.mimeType;-1{var r=i[t],n=r.filter((t=>{if(-1{if(-1(t.qualityLabel&&-1{var r=window.localStorage.getItem("__stay_decode_str");r&&(u=JSON.parse(r)).pathUuid&&u.pathUuid==t&&u.decodeFunStr?(T(),Z(t,e,!1)):Z(t,e,!0)};if(m=window.ytplayer?window.ytplayer.bootstrapWebPlayerContextConfig?window.ytplayer.bootstrapWebPlayerContextConfig.jsUrl:"":m)p=Y(m),t(p,m);else for(let e=1;e<10;e++){let r="">{(d=document.querySelector("#player-base"))&&d.getAttribute("src")&&(m=d.getAttribute("src"),p=Y(m),t(p,m),_.forEach((t=>{clearTimeout(t)})))}),200*e)}(e),d&&d.getAttribute("src"))break;_.push(r)}}}async function Z(e,r,n){o=e,i=window.location.href;var o,i,a=await new Promise(((e,r)=>{if(t)s.runtime.sendMessage({from:"sniffer",operate:"fetchYoutubeDecodeFun",pathUuid:o,pathUrl:i},(t=>{t=t&&t.decodeFunObj?t.decodeFunObj:{},e(t)}));else{const t=Math.random().toString(36).substring(2,9),r=n=>{n.data.pid===t&&"GET_YOUTUBE_DECODE_FUN_RESP"===n.data.name&&(e(n.data.decodeFunObj),window.removeEventListener("message",r))};window.postMessage({id:t,pid:t,name:"GET_YOUTUBE_DECODE_FUN",pathUuid:o,pathUrl:i}),window.addEventListener("message",r)}}));a&&Object.keys(a).length&&a.status&&200==a.status?(J(e,a.decodeFunStr,a.decodeSpeedFunStr),n&&T()):Q(e,r)}function J(t,e,r){u={pathUuid:t,decodeFunStr:e,decodeSpeedFunStr:r},n.decodeFunStr=e,n.decodeSpeedFunStr=r,window.localStorage.setItem("__stay_decode_str",JSON.stringify(u))}async function Q(e,r){if(r&&e)try{var n=await(await fetch("https://m.youtube.com"+r)).text();if(n){var o=n.match(/[a-zA-Z0-9]+\=function\(a\)\{[\r\n|a]\=a\.split\(\"\"\).*return\s+a\.join\(\"\"\)\};/g);let r="";if(r=o&&o.length?o[0]:r){let o="";var i=n.match(/var\s+[a-zA-Z0-9]+\=\{[a-zA-Z0-9]{2}\:function[\s\S]*(a\.reverse\(\)|splice\(0\,b\)|length\]\=c)\}\};/g);if(o=i&&i.length?i[0]:o)if(r=r.replace(/[a-zA-Z0-9]+\=function\(a\)\{/g,"function decodeFun(a){"+o)){let o="";var a=n.match(/[a-zA-Z0-9]+\=function\(a\)\{var\sb=a\.split\(\"\"\)[\s\S]*\}return\sb\.join\(\"\"\)\};/g);if(o=(o=a&&a.length?a[0]:o)&&o.replace(/^[a-zA-Z0-9]+\=function\(a\)\{/g,"function decodeSpeedFun(a){"),function(t){try{var e=new Function("return "+t),r=e()(decodeURIComponent("%3D%3DQmbTSWlgLuztoft4F_uqQieS7_jBtboKab9zSp5WRdSAiApcTRtZLjBmFtzLXphJ0x_haWmWIhVtdAg8jD1rsKkRKAhIQRw8JQ0qOAOA"));if(decodeURIComponent("https://rr5---sn-o097znsk.googlevideo.com/videoplayback%3Fexpire%3D1679042695%26ei%3DJ9QTZJ6FFKeksfIPkaSL-Aw%26ip%3D2602%253Afeda%253A30%253Aae86%253A40e7%253A53ff%253Afe8b%253A9a97%26id%3Do-AI3u_uLu7PqvSwoVFwTG0fSk-puen4XBHxlLqco9MH8Q%26itag%3D135%26aitags%3D133%252C134%252C135%252C160%252C242%252C243%252C244%252C278%26source%3Dyoutube%26requiressl%3Dyes%26mh%3D_m%26mm%3D31%252C26%26mn%3Dsn-o097znsk%252Csn-a5meknzk%26ms%3Dau%252Conr%26mv%3Dm%26mvi%3D5%26pl%3D44%26initcwndbps%3D2135000%26vprv%3D1%26mime%3Dvideo%252Fmp4%26ns%3DwhOrAPi40PxLIKHeHvAaoDIL%26gir%3Dyes%26clen%3D18438908%26dur%3D584.533%26lmt%3D1635010443575003%26mt%3D1679020854%26fvip%3D5%26keepalive%3Dyes%26fexp%3D24007246%26c%3DMWEB%26txp%3D5432434%26n%3D3BrEIxrXFc7SkC%26sparams%3Dexpire%252Cei%252Cip%252Cid%252Caitags%252Csource%252Crequiressl%252Cvprv%252Cmime%252Cns%252Cgir%252Cclen%252Cdur%252Clmt%26lsparams%3Dmh%252Cmm%252Cmn%252Cms%252Cmv%252Cmvi%252Cpl%252Cinitcwndbps%26lsig%3DAG3C_xAwRgIhAKYBlOvRZiHPnnEJJ5foNn7LZU1cgGvfyO3WU9TjETfZAiEA6PvSgRq0gdcsBBTTj0VHXybmMwb-ouW2TVIYGmG_PG0%253D")+"&sig="+r)return 1}catch(t){}}(r)){var l=e,c=r,u=o;if(t)s.runtime.sendMessage({from:"sniffer",operate:"saveYoutubeDecodeFun",pathUuid:l,randomFunStr:c,randomSpeedFunStr:u},(t=>{}));else{const t=Math.random().toString(36).substring(2,9),e=r=>{r.data.pid===t&&"SAVE_YOUTUBE_DECODE_FUN_STR_RESP"===r.data.name&&window.removeEventListener("message",e)};window.postMessage({id:t,pid:t,name:"SAVE_YOUTUBE_DECODE_FUN_STR",pathUuid:l,randomFunStr:c,randomSpeedFunStr:u}),window.addEventListener("message",e)}}J(e,r,o)}else J(e,"","");else J(e,"","")}else J(e,"","")}else J(e,"","")}catch(r){J(e,"","")}else J(e,"","")}function tt(t){!async function(){i||(e=!0,i=await C(),e=!1),a||(r=!0,a=await R(),r=!1)}(),X(),A(t)}tt(!1),document.onreadystatechange=()=>{"complete"===document.readyState&&tt(!0)},Object.defineProperty(n,"randomPathUuid",{get:function(){return randomPathUuid},set:function(t){(randomPathUuid=t)!=p&&Z(p=t,m,!1)}}),Object.defineProperty(n,"decodeFunStr",{get:function(){return decodeFunStr},set:function(t){(decodeFunStr=t)&&T()}})} handleInjectParseVideoJS(false);10;e++){let>("video>("video>("video")?(e=t.height,object.prototype.hasownproperty.call(i,e)?i[e].push(t):i[e]=[t]):-1("pornhub.com")?(r=(r=document.queryselector("#videoshow>;t++)g[t].addeventlistener("touchstart",(t=>0?(a=0,i<=o&&(a=s.div(s.sub(i,d),2))):0==l?i<=o&&(a=s.div(s.sub(i,d),2)):(t=s.add(4,36),t=s.add(s.add(d,t),s.add(s.mul(_,38),36)),l>(a)&&(s=' (i,2)&&(d=o),document.queryselector("#__stay_sinffer_modal"));(p=p||function(){let>("muiplayer.js.org")){let>("mobile.twitter.com")))if(-1("youtube.com")){var>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白天到处飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值