吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9625|回复: 434
上一主题 下一主题
收起左侧

[Python 原创] 【图形化界面完活啦】第三方全网视频电视剧全网电影解析多线程下载

    [复制链接]
跳转到指定楼层
楼主
我很忙! 发表于 2024-9-4 10:26 回帖奖励
本帖最后由 我很忙! 于 2024-9-7 16:09 编辑

效果图



琢磨了几天pyqt5,总算画出来了,界面配合协程,期间不会卡死,可随时查看动态(线程可能偶尔会崩溃,长时间下载无反应,退出重新打开即可,因为刚接触协程没两天,很多方面细节不懂,),附上界面版源码,

功能模块


原贴:https://www.52pojie.cn/forum.php?mod=viewthread&tid=1959924&highlight=%B5%E7%D3%B0

成品编译


成品大放送,支持的老铁,给个小小的评分吧,悬赏区太贵啦,已经消费不起了
https://wwud.lanzn.com/i9Man294eibe 密码:52

问题解答


回答一下目前出现的问题:
以下回答的问题,文字内容可能过于啰嗦,解决不了问题的可以看看,软件使用过程无任何问题的可自行忽略
1、很多人系统版本不一样,可能会出现搜索闪退(可以更换电脑或者系统尝试),或者选择路径闪退(目前推荐的解决办法是 直接复制路径进行设置)
2、目前 部分出现缺少api-ms-win-core-path-l1-1-0.dll 可以复制提示缺少的dll库名称到网上下下来,放到软件根目录,一般也能继续使用(这个我也不确定,因为我没遇到过,哈哈)出现以上两个问题的,建议windows10系统环境下使用本程序

3、当选择的影片集数过多时,程序长时间运行,可能会残留一些资源占用(“胡乱猜”,因为我目前对于线程的认知还很少,新手入坑),没有被正确释放(造成越下越慢)解决办法,记住当前下载好的集数,
      重启软件,搜索选择,指定集数 如:你下了1=10集,可以选择从第11集开始下载   在集数选择11+就可以依次继续往后下载了,如果只想下某一集,只需要输入对应的集数即可
   (如果选择的视频一集分上下,可能需要自己手动 灵活调整一下,比如总共十集,但是 每一集都分上下两集,那可能总共就五集,那么在只下第二集的时候可能就需要输入3+4才能把完整的第二集下下来)
(关于可能搜索不到包含了多部相同名字的影片。比如,济公总共分3部,通常搜索关键词,只显示第一部,可在后面加上济公2,济公3等,根据季度命名的,可以增加,济公第2季,根据年份命名的例如20240906结尾之类的关键词,可提高搜索精准度,多个同名无法确定的电视剧/电影,可根据上映年份或者单独下一集判断)

4、目前软件是,只是单线程配合协程下载单文件的多个ts文件,后续学会可能会修改为,多线程配合协程来,每次可同时下载几集(愿望吧)其实差别也不大,下一集也就十几二十秒 快的话,就挂旁边下,边看边下也不影响

5、关于开始下载之后,无法停止的问题,目前我也无法解决,因为我还没学会怎么停止线程,请各位直接辛苦叉掉软件重新打开就好了
6、如果频繁搜索,可能会触发频繁出现滑块感觉关键词没错,还搜不到内容的打开目标网站去手都滑动一下,一般不太频繁的搜索不会有问题)目标网: ZGFnYS5jYw==    用BASE64解码

7、代码可能会存在很多不合理的地方,有高人指点的话,请在下方留言指点一二

8、资源都是第三方网站获取的,可能部分存在不可控的广告,或者清晰度,毕竟是免费的,就别太高指望啦

9、软件代码只是作为学习交流,不要太过频繁频繁频繁的去查询和下载,说句官方的话成品/代码,请在下载24小时内删除

python代码



[Python] 纯文本查看 复制代码
import os.path
import time

from PyQt5.QtWidgets import QApplication, QWidget, QMessageBox,QFileDialog
import sys
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtCore import QThread, pyqtSignal, Qt
from PyQt5.QtGui import QIcon
import asyncio
from qasync import QEventLoop



# 隐藏运行调试框的警告信息
import warnings

from get_film import download_film

warnings.filterwarnings("ignore", category=DeprecationWarning)
import warnings; warnings.filterwarnings("ignore", category=UserWarning, message="libpng warning: iCCP: known incorrect sRGB profile")

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(520, 608)
        self.gridLayout = QtWidgets.QGridLayout(Form)
        self.gridLayout.setObjectName("gridLayout")
        self.label_3 = QtWidgets.QLabel(Form)
        self.label_3.setObjectName("label_3")
        self.gridLayout.addWidget(self.label_3, 3, 0, 1, 1)
        self.listWidget_movie_list = QtWidgets.QListWidget(Form)
        self.listWidget_movie_list.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.listWidget_movie_list.setObjectName("listWidget_movie_list")
        self.gridLayout.addWidget(self.listWidget_movie_list, 4, 0, 1, 5)
        self.pushButton_search = QtWidgets.QPushButton(Form)
        self.pushButton_search.setObjectName("pushButton_search")
        self.gridLayout.addWidget(self.pushButton_search, 0, 2, 1, 2)
        self.lineEdit_path = QtWidgets.QLineEdit(Form)
        self.lineEdit_path.setObjectName("lineEdit_path")
        self.gridLayout.addWidget(self.lineEdit_path, 3, 1, 1, 3)
        self.lineEdit_film = QtWidgets.QLineEdit(Form)
        self.lineEdit_film.setObjectName("lineEdit_film")
        self.gridLayout.addWidget(self.lineEdit_film, 0, 1, 1, 1)
        self.label_2 = QtWidgets.QLabel(Form)
        self.label_2.setObjectName("label_2")
        self.gridLayout.addWidget(self.label_2, 2, 0, 1, 1)
        self.label = QtWidgets.QLabel(Form)
        self.label.setObjectName("label")
        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
        self.pushButton_restlist = QtWidgets.QPushButton(Form)
        self.pushButton_restlist.setObjectName("pushButton_restlist")
        self.gridLayout.addWidget(self.pushButton_restlist, 0, 4, 1, 1)
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setObjectName("pushButton")
        self.gridLayout.addWidget(self.pushButton, 3, 4, 1, 1)
        self.lineEdit_numThreads = QtWidgets.QLineEdit(Form)
        self.lineEdit_numThreads.setMinimumSize(QtCore.QSize(71, 0))
        self.lineEdit_numThreads.setMaximumSize(QtCore.QSize(71, 16777215))
        self.lineEdit_numThreads.setObjectName("lineEdit_numThreads")
        self.lineEdit_numThreads.setToolTip('根据电脑的性能调整线程数 最小1,最大10000(嘿嘿卡爆你)超出范围默认使用100')
        self.lineEdit_numThreads.setAlignment(Qt.AlignCenter)
        self.gridLayout.addWidget(self.lineEdit_numThreads, 2, 4, 1, 1)
        self.label_4 = QtWidgets.QLabel(Form)
        self.label_4.setMaximumSize(QtCore.QSize(36, 16777215))
        self.label_4.setObjectName("label_4")
        self.gridLayout.addWidget(self.label_4, 2, 3, 1, 1)
        self.lineEdit_epnum = QtWidgets.QLineEdit(Form)
        self.lineEdit_epnum.setToolTip('输入"1"只下第1集\n输入"5+"从5集开始往后全下\n输入"7+9" 只下7-9集\n留空或电影全下')
        self.lineEdit_epnum.setWhatsThis("")
        self.lineEdit_epnum.setText("")
        self.lineEdit_epnum.setObjectName("lineEdit_epnum")
        self.gridLayout.addWidget(self.lineEdit_epnum, 2, 1, 1, 2)
        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "视频采集 - 吾爱破解 by:我很忙!"))
        self.label_3.setText(_translate("Form", "路径:"))
        self.pushButton_search.setText(_translate("Form", "搜索片源"))
        self.label_2.setText(_translate("Form", "集数:"))
        self.label.setText(_translate("Form", "片名:"))
        self.pushButton_restlist.setText(_translate("Form", "清空"))
        self.pushButton.setText(_translate("Form", "选择"))
        self.label_4.setText(_translate("Form", "线程:"))
        # 绑定搜索按钮(btn_search函数)
        self.pushButton_search.clicked.connect(Form.btn_search)
        # 绑定清空按钮
        self.pushButton_restlist.clicked.connect(Form.btn_restlist)
        # 绑定更改路径按钮
        self.pushButton.clicked.connect(Form.btn_data_path)

# 定义 WorkerThread 类,继承自 QThread 调用普通函数
class WorkerTherad(QThread):
    result_signal = pyqtSignal(object)
    #传入指定模块函数,并接收不定长参数
    def __init__(self, target_function, *args):
        super().__init__()
        self.target_function = target_function
        self.args = args
    # 开始调用传入的目标函数和不定长参数
    def run(self):
        # 接收调用后返回的结果
        result = self.target_function(*self.args)
        # 将结果返回给 调用的的主程序事件
        self.result_signal.emit(result)

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        # 实例化图形界面
        self.ui = Ui_Form()
        self.ui.setupUi(self)
        self.setWindowIcon(QIcon('icon.ico'))
        self.ui.listWidget_movie_list.setVerticalScrollBarPolicy(2)

        # 输入集数编辑框设置占位字符串
        self.ui.lineEdit_epnum.setPlaceholderText('指定规则:1,5+,6+9,留空,其他字符串无效')
        self.ui.lineEdit_film.setPlaceholderText('请输入电影/电视剧名称(尽量使用全称精确搜索)')
        self.ui.lineEdit_numThreads.setText('100')
        # 搜索到的数据存入film_data 和选择列表后分别存入 集数列表和 url列表
        self.film_data, self.film_title, self.film_urls, self.film_episodes = '' , '', [], []
        #在选择集数之后,把新的链接和电影名称重新赋值,等带下载片段函数调用
        self.updata_film_episodes, self.updata_film_urls = '', ''
        # 记录列表框的链接次数
        self.double_click_connection_count = 0
        # 线程 和保存的目录
        self.Threads_num, self.path = 0, ''
        documents_path = os.path.expanduser('~/Documents')
        # 配置文件名
        config_filename = 'download_videos_path.ini'
        # 完整的配置文件路径
        self.config_file_path = os.path.join(documents_path, config_filename)
        # 判断 配置文件是否存在,存在则读取
        if os.path.exists(self.config_file_path):
            try:
                with open(self.config_file_path,'r') as f:
                    self.path  = f.readline().strip() # 读取第一行
                    self.ui.lineEdit_path.setText(self.path)
                    threads = f.readline().strip() # 读取第二行
                    self.Threads_num = int(threads)
                    self.ui.lineEdit_numThreads.setText(str(threads))
            except Exception as e:
                self.message(f'读取配置文件失败,{e}')
    def btn_search(self):
        # 判断列表框的链接信号,如果=1表示要断开,因为在搜索时,点击了列表框,多个连接的话,会重复执行下载m3u8的函数
        if self.double_click_connection_count == 1:
            try:
                self.ui.listWidget_movie_list.itemDoubleClicked.disconnect(self.list_download)
                # 记录链接次数 归零
                self.double_click_connection_count = 0
            except Exception as e:
                QMessageBox.critical(self, "错误", f"断开绑定事件发生错误:{str(e)}")
        # 搜索前清空列表框和旧数据
        self.ui.listWidget_movie_list.clear()
        # 接收编辑框搜索片源的内容,(搜索片源按钮被按下时触发)
        flim_name = self.ui.lineEdit_film.text()
        flim_name = flim_name.strip()
        if not flim_name:
            return
        #
        # 调用线程类,传入指定模块download_film().并调用该模块下的函数get_m3u8_url,传入不定长参数
        try:
            self.worker_thread = WorkerTherad(download_film().get_m3u8_url, self.ui,flim_name)
            self.worker_thread.result_signal.connect(self.handle_result)
            # 开始线程
            self.worker_thread.start()
        except Exception as e:
            self.message(f'搜索时出现错误!{e}')
        # self.film_data,status = self.dl.get_m3u8_url(self.ui, flim_name)
        if self.film_data == None:
            return
        # 在搜索到结果之后绑定列表框双击事件,每次链接,次数=1
        self.ui.listWidget_movie_list.itemDoubleClicked.connect(self.list_download)
        self.double_click_connection_count = 1
    def handle_result(self, result):
        """
        :param result: #接收模块返回的内容,字典形式。
                'type': 'select_film',表示搜索电影
                'isSuccess': '成功/失败'
                'msg': 原因/结果}
        :return: 无返回值
        """
        # 如果调用函数没有返回值 则不进行取值判断
        if result == None:
            #解除所有组件的禁用
            self.isCease(True)
            return
        # 判断搜索的片源是否成功,成功后将数据传入当前类的全局变量中,共双击列表框下载时使用
        if result['type'] == 'select_film':
            if result['isSuccess'] == '成功':
                self.film_data = result['msg']
            else:
                self.isCease(True)
                self.message(result['msg'])

        # 判断 调用模块的下载m3u8文件功能,成功后,可根据每个文件开始下载ts片段
        if result['type'] == 'dolad_m3u8':
            if result['isSuccess'] == '成功':
                obj = download_film()
                asyncio.ensure_future(obj.download_all_videos(self.updata_film_urls, self.updata_film_episodes,self.film_title, self.path, self.ui, self.Threads_num, QMessageBox))
            else:
                self.isCease(True)
                self.message(result['msg'])
    def isCease(self, True_or_false):
        '''
        在操作时 通常情况需要禁止按钮,等待操作完成之后释放用
        :param True_or_false: false = 不能使用按钮 相反可以使用
        :return:
        '''
        if type(True_or_false) == bool:
            self.ui.pushButton.setEnabled(True_or_false)
            self.ui.pushButton_restlist.setEnabled(True_or_false)
            self.ui.pushButton_search.setEnabled(True_or_false)
    def btn_restlist(self):
        # 接收清空按钮的触发事件
        self.ui.lineEdit_epnum.clear()
        self.ui.lineEdit_film.clear()
        self.ui.listWidget_movie_list.clear()
    def btn_data_path(self):
        # 接收更改路径的触发事件
        directory = QFileDialog.getExistingDirectory(self,'选择电影保存目录')
        if directory:
            self.ui.lineEdit_path.setText(directory)
            with open (self.config_file_path,'w') as f:
                f.write(directory)
                numthreads = self.ui.lineEdit_numThreads.text()
                if numthreads:
                    f.write(f'\n{numthreads}')
    def list_download(self, items):
        self.film_title, self.film_urls, self.film_episodes = '', [] ,[]
        try:
            # 双击列表框后,选择对应的电影数据
            index = self.ui.listWidget_movie_list.indexFromItem(items).row()
            self.film_title = self.film_data[index]['name']
            for item in self.film_data[index]['source']['eps']:
                # 取视频集数
                self.film_episodes.append(item['name'])
                # 取视频集数对应m3u8文件列表
                self.film_urls.append(item['url'])

            msg = QMessageBox.information(self, '提示', f'是否确认下载 "{self.film_title}"?\t',QMessageBox.Ok | QMessageBox.No)
            if msg == QMessageBox.Ok:
                # 询问是否开始下载
                #开始下载m3u8文件,传入,url,集数列表和电视剧标题
                # result = self.dl.download_m3u8(self.film_urls, self.film_episodes, self.film_title,'E:/电视剧')
                # 读取编辑指定集数的内容
                ep_data = self.ui.lineEdit_epnum.text()
                # 判断 集数列表
                if len(self.film_episodes) > 1:
                # 如果输入5+ 那么从5往后下载
                    if ep_data.find('+') != -1:
                        if ep_data.split('+')[1]:
                            start_index = int(ep_data.split('+')[0]) - 1  # 取+号左边
                            end_index = int(ep_data.split('+')[1])
                            # 按指定起始位置和列表总长度取出对应集数和url
                            self.updata_film_episodes = self.film_episodes[start_index:end_index]
                            self.updata_film_urls = self.film_urls[start_index:end_index]

                        else:
                            start_index = int(ep_data.split('+')[0]) - 1  # 取+号左边
                            #按指定起始位置和列表总长度取出对应集数和url
                            self.updata_film_episodes = self.film_episodes[start_index:len(self.film_episodes)]
                            self.updata_film_urls = self.film_urls[start_index:len(self.film_urls)]
                    #如果没有输入,默认取全部集数
                    elif ep_data == '':
                        self.updata_film_episodes = self.film_episodes
                        self.updata_film_urls = self.film_urls
                    # 如果没找到+ 或者不等于空格,则取出指定一集 如输入5 取第五集
                    else:
                        self.updata_film_episodes = self.film_episodes[int(ep_data)-1:int(ep_data)]
                        self.updata_film_urls = self.film_urls[int(ep_data)-1:int(ep_data)]
                # 如果集数列表只有一条,默认全部下载
                else:
                    self.updata_film_episodes = self.film_episodes
                    self.updata_film_urls = self.film_urls
                # 如果赛选出的列表存在数据,则启动协程 开始下载,反之报错提示规则错误!
                if len(self.updata_film_episodes) >= 1:
                    # 取编辑框输入的线程数
                    self.Threads_num = int(self.ui.lineEdit_numThreads.text())
                    self.path = self.ui.lineEdit_path.text()
                    if not self.path:
                        self.message('未选中目录')
                        return
                    #判断是否为纯整数
                    if str(self.Threads_num).isdigit():
                        # 如果输入的线程小于=0或大于10000,则默认设置为100
                        self.Threads_num = 100 if self.Threads_num <= 0 or self.Threads_num > 10000 else self.Threads_num

                    self.worker_thread = WorkerTherad(download_film().download_m3u8, self.updata_film_urls, self.updata_film_episodes, self.film_title,self.path,self.ui)
                    self.worker_thread.result_signal.connect(self.handle_result)
                    # 开始线程
                    self.worker_thread.start()
                    # 取消绑定列表框,如记录绑定次数=1,执行解绑,防止误触列表框
                    if self.double_click_connection_count == 1:
                        self.ui.listWidget_movie_list.itemDoubleClicked.disconnect()
                        self.double_click_connection_count = 0
                    # 开始下载后,将禁止点击所有按钮,保护程序正常执行
                    self.isCease(False)
                else:
                    self.message('没有选出集数信息,请检查集数筛选规则(不能越界选择,如电视剧共10集,只能输入包括10的范围内)电影可忽略!')
        except Exception as e:
            self.message(f"在选择指定电影时出现意外:{str(e)}")
    def message(self, msg):
        '''
        传入提醒信息,可直接提示信息框
        :param msg: 需要提示的内容
        :return: 返回逻辑值
        '''
        if type(msg) == str:
            msg_box = QMessageBox()
            msg_box.setWindowIcon(QIcon('icon.ico'))
            msg_box.setText(msg)
            msg_box.setWindowTitle("提示")
            msg_box.setIcon(QMessageBox.Information)
            msg_box.exec_()
if __name__ == '__main__':
    # 获取命令行参数
    app = QApplication(sys.argv)
    # 创建 QEventLoop 对象
    loop = QEventLoop(app)
    # 设置当前的事件循环为创建的 QEventLoop 对象
    asyncio.set_event_loop(loop)
    # 创建 MyWindow 类的实例,即窗口对象
    win = MyWindow()
    # 显示窗口
    win.show()
    # 启动事件循环,确保程序持续运行
    with loop:
        loop.run_forever()

免费评分

参与人数 279吾爱币 +286 热心值 +251 收起 理由
e2003919 + 1 + 1 谢谢@Thanks!
Akisa + 1 + 1 谢谢@Thanks!
leechjia + 1 + 1 谢谢@Thanks!
飞起的鹰 + 1 + 1 我很赞同!
52rap + 1 + 1 谢谢@Thanks!
泡菜久坛 + 1 + 1 谢谢@Thanks!
hillmagic + 1 + 1 谢谢@Thanks!
营养糊糊 + 2 + 1 谢谢@Thanks!
johnson1007 + 1 热心回复!
一次过 + 1 + 1 我很赞同!
lcm918 + 1 + 1 谢谢@Thanks!
fm100 + 1 谢谢@Thanks!
NLHBS + 1 + 1 谢谢@Thanks!
fire_flag + 1 + 1 我很赞同!
wanfon + 1 + 1 热心回复!
zjw12580 + 1 我很赞同!
慕寒 + 1 + 1 谢谢@Thanks!
sea326 + 1 + 1 谢谢@Thanks!
wwww7788549 + 1 鼓励转贴优秀软件安全工具和文档!
限度gg + 1 + 1 谢谢@Thanks!
shaoxia857 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
ALLALONE + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
一动不动不敢动 + 1 + 1 我很赞同!
licj888 + 1 + 1 我很赞同!
f8文 + 1 + 1 热心回复!
Wapj_Wolf + 2 + 1 谢谢@Thanks!
难慰平生 + 1 + 1 谢谢@Thanks!
discom + 1 谢谢@Thanks!
bxyhy + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
leitingxiami + 1 + 1 谢谢@Thanks!
YLSpace + 1 + 1 我很赞同!
2005320 + 1 + 1 热心回复!
mijunlynn + 1 + 1 牛人啊,谢谢
ystylt + 1 兄弟好人!
jiushiyaole + 1 + 1 谢谢@Thanks!
smallchop + 1 + 1 谢谢@Thanks!
lccccccc + 1 我很赞同!
xiongwang + 1 谢谢@Thanks!
xiaomr1990 + 1 + 1 谢谢@Thanks!
8540021 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
leskady + 1 + 1 鼓励转贴优秀软件安全工具和文档!
18196327475 + 1 + 1 谢谢@Thanks!
拼多多 + 1 + 1 我很赞同!
御龙 + 1 + 1 我很赞同!
Asmart + 1 鼓励转贴优秀软件安全工具和文档!
mo_fan + 1 + 1 用心讨论,共获提升!
ZJUZZ + 1 谢谢@Thanks!
海尔波普彗星 + 1 谢谢@Thanks!
yztiger + 1 + 1 谢谢@Thanks!
wsmwzms + 1 + 1 我很赞同!
gxsky + 1 我很赞同!
dayepanfeng + 1 + 1 谢谢@Thanks!
aries_1010 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
lzd759125184 + 1 + 1 谢谢@Thanks!
jack2468 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
昔年科技 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
wanbinbo + 1 + 1 热心回复!
amd123 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
dadao815 + 1 + 1 用心讨论,共获提升!
Soaimer + 1 + 1 谢谢@Thanks!
玄天云染 + 3 + 1 不能不赞!
刘小凡丶 + 1 + 1 谢谢@Thanks!
qq02101 + 1 + 1 谢谢@Thanks!
wwhtm + 1 + 1 谢谢@Thanks!
qjlfl + 1 + 1 谢谢@Thanks!
rebirthboy + 1 我很赞同!
grrr_zhao + 1 + 1 谢谢@Thanks!
baige52500 + 1 谢谢@Thanks!
yueguangmo + 1 + 1 谢谢@Thanks!
lzfy111 + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
快乐谷歌 + 1 + 1 谢谢@Thanks!
零下一度 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
bscn + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
tunis + 1 + 1 我很赞同!
zq1992zq2008 + 1 热心回复!
guoruihotel + 1 + 1 谢谢@Thanks!
weidechan + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
2020天明 + 1 + 1 很牛逼啊
江南晚來客 + 1 + 1 谢谢@Thanks!
q2825q + 1 + 1 我很赞同!
mrjackliu + 1 + 1 热心回复!
Tiniaual + 1 + 1 热心回复!
heavenman + 1 + 1 我很赞同!
354304238 + 1 + 1 用心讨论,共获提升!
受伤的辉狼 + 1 + 1 我很赞同!
hyf_92 + 1 + 1 我很赞同!
yxyzero + 1 + 1
youngapt + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
静美书斋 + 1 + 1 谢谢@Thanks!
quincyshao + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
月黑风高999 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
jhonsun + 1 用心讨论,共获提升!
a42010316 + 1 + 1 谢谢@Thanks!
dongsuo52499 + 1 + 1 我很赞同!
qq63 + 1 + 1 谢谢@Thanks!
skykingfox + 1 + 1 谢谢@Thanks!
be1ieveme + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
kx100free + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
gml3100 + 1 + 1 谢谢@Thanks!
saint02 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
liuxia 发表于 2024-9-4 10:32
这还不点赞天理难容
推荐
cheng050231 发表于 2024-9-4 11:12
推荐
khadwf 发表于 2024-9-4 10:47
4#
baishuihao 发表于 2024-9-4 10:32
当个沙发。顶一下
5#
流年欣语 发表于 2024-9-4 10:42
点赞点赞
6#
gdp123gd 发表于 2024-9-4 10:43
顶一下,感谢发布
7#
wyangdh 发表于 2024-9-4 10:45
必须要支持一个!!!
8#
jiaokeer 发表于 2024-9-4 10:51
期待一个,等待发布
9#
奥特曼的老巢 发表于 2024-9-4 10:53
感谢分享
10#
王美君 发表于 2024-9-4 11:03
期待发布!!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-9-7 16:12

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表