微信传输助手文件自动下载

该功能是一个自动下载的功能,能够做到确保发送到位的文件传输亦可到位,以xlsx xls格式的文件为示例,python代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options
import time
import os
import tkinter as tk
from tkinter import messagebox
from datetime import datetime
import pandas as pd
import urllib3
import warnings

# 禁用SSL警告
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
warnings.filterwarnings('ignore')

class WeChatFileMonitor:
    def __init__(self):
        self.download_path = r'C:\Users\xxxx\Downloads' #这里添加你要下载这个文件的地址
        self.driver = None
        self.downloaded_files = set()  # 添加已下载文件集合
        self.setup_driver()
        
    def setup_driver(self):
        """设置Chrome浏览器"""
        try:
            options = Options()
            options.add_argument('--start-maximized')  # 最大化窗口
            options.add_argument('--disable-gpu')  # 禁用GPU
            options.add_argument('--disable-gpu-sandbox')  # 禁用GPU沙箱
            options.add_argument('--disable-software-rasterizer')  # 禁用软件光栅化
            options.add_argument('--disable-gpu-compositing')  # 禁用GPU合成
            options.add_argument('--disable-gpu-driver-bug-workarounds')  # 禁用GPU驱动bug修复
            options.add_argument('--disable-gpu-vsync')  # 禁用GPU垂直同步
            options.add_argument('--no-sandbox')
            options.add_argument('--disable-dev-shm-usage')
            options.add_argument('--ignore-certificate-errors')
            options.add_argument('--ignore-ssl-errors')
            options.add_argument('--disable-web-security')
            options.add_argument('--allow-running-insecure-content')
            options.add_argument('--disable-webgl')
            options.add_argument('--disable-extensions')
            options.add_argument('--disable-popup-blocking')
            options.add_argument('--disable-notifications')
            options.add_argument('--disable-infobars')
            options.add_argument('--disable-blink-features=AutomationControlled')
            
            # 添加随机UA
            user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
            options.add_argument(f'user-agent={user_agent}')
            
            # 设置下载路径
            prefs = {
                "download.default_directory": self.download_path,
                "download.prompt_for_download": False,
                "download.directory_upgrade": True,
                "safebrowsing.enabled": True
            }
            options.add_experimental_option("prefs", prefs)
            
            # 禁用自动化特征
            options.add_experimental_option('excludeSwitches', ['enable-automation'])
            options.add_experimental_option('useAutomationExtension', False)
            
            # 设置环境变量
            os.environ['PYTHONWARNINGS'] = 'ignore'
            
            self.driver = webdriver.Chrome(options=options)
            
            # 修改navigator.webdriver
            self.driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {
                'source': '''
                    Object.defineProperty(navigator, 'webdriver', {
                        get: () => undefined
                    })
                '''
            })
            
            # 访问文件传输助手页面
            self.driver.get('https://filehelper.weixin.qq.com/')
            
            # 等待页面加载完成
            time.sleep(5)
            
        except Exception as e:
            print(f"设置浏览器时出错: {str(e)}")
            raise

    def check_new_files(self):
        """检查新文件"""
        try:
            # 等待文件列表加载
            wait = WebDriverWait(self.driver, 20)
            file_list = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.chat-panel__body')))
            
            # 获取所有文件项
            file_items = self.driver.find_elements(By.CSS_SELECTOR, '.msg-list__item')
            
            if not file_items:
                return []
            
            new_files = []
            
            for item in file_items:
                try:
                    # 获取文件名
                    file_name_element = item.find_element(By.CSS_SELECTOR, '.msg-file__title')
                    file_name = file_name_element.text
                    
                    # 检查是否为Excel文件且未下载过
                    if ('.xlsx' in file_name.lower() or '.xls' in file_name.lower()) and file_name not in self.downloaded_files:
                        # 获取文件链接
                        file_link = item.find_element(By.CSS_SELECTOR, '.msg-file')
                        
                        new_files.append({
                            'name': file_name,
                            'file_link': file_link
                        })
                        print(f"找到新的Excel文件: {file_name}")
                except Exception:
                    continue
            
            # 只返回最新的未下载文件
            if new_files:
                print(f"找到 {len(new_files)} 个新的Excel文件,将下载最新的文件: {new_files[0]['name']}")
                return [new_files[0]]  # 只返回最新的文件
            return []
            
        except Exception as e:
            print(f"检查新文件时出错: {str(e)}")
            return []

    def download_file(self, file_info):
        """下载文件"""
        try:
            # 直接点击文件链接下载
            self.driver.execute_script("arguments[0].click();", file_info['file_link'])
            
            # 等待下载开始
            time.sleep(20)
            
            # 检查下载是否完成
            download_path = os.path.join(self.download_path, file_info['name'])
            max_wait = 30  # 最大等待时间(秒)
            wait_interval = 10  # 检查间隔(秒)
            
            for _ in range(max_wait):
                if os.path.exists(download_path):
                    # 等待文件完全下载
                    time.sleep(2)
                    print(f"文件下载完成: {file_info['name']}")
                    # 添加到已下载文件集合
                    self.downloaded_files.add(file_info['name'])
                    return True
                time.sleep(wait_interval)
            
            raise Exception("下载超时")
            
        except Exception as e:
            print(f"下载文件 {file_info['name']} 时出错: {str(e)}")
            return False

    def process_new_files(self):
        """处理新文件"""
        try:
            new_files = self.check_new_files()
            
            if not new_files:
                return  # 没有新文件,静默返回
            
            # 直接下载文件
            for file_info in new_files:
                self.download_file(file_info)
        except Exception as e:
            print(f"处理新文件时出错: {str(e)}")  # 只在真正出错时显示错误信息

    def close(self):
        """关闭浏览器"""
        try:
            self.driver.quit()
            print("浏览器已关闭")
        except Exception as e:
            print(f"关闭浏览器时出错: {str(e)}")

def main():
    monitor = WeChatFileMonitor()
    try:
        while True:
            monitor.process_new_files()
            time.sleep(50)  # 每50秒检查一次
    except KeyboardInterrupt:
        print("程序已停止")
    finally:
        monitor.close()

if __name__ == "__main__":
    main() 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值