国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Python】通過第三方庫wxauto自動化操作微信電腦客戶端

這篇具有很好參考價值的文章主要介紹了【Python】通過第三方庫wxauto自動化操作微信電腦客戶端。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一.簡介

wxauto是一個Python第三方庫,用于自動化操作微信電腦客戶端通過wxauto,我們可以使用Python編寫腳本,實現(xiàn)以下功能

  • 獲取微信好友列表、群組列表、聊天記錄等信息。
  • 在微信中發(fā)送文本、圖片、語音等信息給好友或群組。
  • 自動回復(fù)好友或群組的消息。
  • 自動加入或退出群組。
  • 自動發(fā)送文件給好友或群組。
  • 自動發(fā)送紅包給好友或群組。
  • 其他自定義的自動化操作。

使用wxauto需要先安裝其庫文件,可以使用pip命令進行安裝

pip install wxauto

二.wxauto提供的函數(shù)

wxauto目前有WxParam、WxUtils、WeChat三個類:

  • 其中WxParam設(shè)置基本參數(shù)設(shè)置。

1.WxUtils類功能函數(shù):

  • SetClipboard(data, dtype=‘text’) 復(fù)制文本信息或圖片到剪貼板data : 要復(fù)制的內(nèi)容,str 或 Image 圖像;
  • Screenshot(hwnd, to_clipboard=True) 為句柄為hwnd的窗口程序截圖;hwnd : 句柄;to_clipboard : 是否復(fù)制到剪貼板;
  • SavePic(savepath=None, filename=None) 保存截圖;savepath:文件保存位置;filename:文件名字;
  • ControlSize(control) 獲取控制窗口大?。?/li>
  • ClipboardFormats(unit=0, *units) 獲取剪切板格式 ;
  • CopyDict()

2.WeChat類主要函數(shù):

  • GetSessionList(self, reset=False) 獲取當(dāng)前會話列表,更新會話列表
  • Search(self, keyword) 查找微信好友或關(guān)鍵詞;keywords: 要查找的關(guān)鍵詞,最好完整匹配,不完全匹配只會選取搜索框第一個;
  • ChatWith(self, who, RollTimes=None) 打開某個聊天框;who : 要打開聊天框的好友名,最好完整匹配,不完全匹配只會選取搜索框第一個;RollTimes : 默認向下滾動次數(shù),再進行搜索;
  • SendMsg(self, msg, clear=True) 向當(dāng)前窗口發(fā)送消息;msg : 要發(fā)送的消息;
  • SendFiles(self, *filepath, not_exists=‘ignore’) 向當(dāng)前聊天窗口發(fā)送文件;not_exists: 如果未找到指定文件,繼續(xù)或終止程序;*filepath: 要復(fù)制文件的絕對路徑;
  • SendClipboard(self) 向當(dāng)前聊天頁面發(fā)送剪貼板復(fù)制的內(nèi)容;
  • GetAllMessage(self) 獲取當(dāng)前窗口中加載的所有聊天記錄;
  • GetLastMessage(self) 獲取當(dāng)前窗口中最后一條聊天記錄
  • LoadMoreMessage(self, n=0.1) 定位到當(dāng)前聊天頁面,并往上滾動鼠標滾輪,加載更多聊天記錄到內(nèi)存發(fā)送某個桌面程序的截圖,如:微信、記事本;name : 要發(fā)送的桌面程序名字;classname : 要發(fā)送的桌面程序類別名;
  • SendScreenshot(self, name=None, classname=None) 發(fā)送某個桌面程序的截圖,如:微信、記事本;name : 要發(fā)送的桌面程序名字;classname : 要發(fā)送的桌面程序類別名;

三.使用

from wxauto import *


# 獲取當(dāng)前微信客戶端
wx = WeChat()


# 獲取會話列表
wx.GetSessionList()


# 輸出當(dāng)前聊天窗口聊天消息
msgs = wx.GetAllMessage
for msg in msgs:
    print('%s : %s'%(msg[0], msg[1]))
## 獲取更多聊天記錄
wx.LoadMoreMessage()
msgs = wx.GetAllMessage
for msg in msgs:
    print('%s : %s'%(msg[0], msg[1]))


# 向某人發(fā)送消息(以`文件傳輸助手`為例)
msg = '你好~'
who = '文件傳輸助手'
wx.ChatWith(who)  # 打開`文件傳輸助手`聊天窗口
wx.SendMsg(msg)  # 向`文件傳輸助手`發(fā)送消息:你好~

## 發(fā)送換行消息(最近很多人問換行消息如何發(fā)送,新增說明一下)
msg = '''你好
這是第二行
這是第三行
這是第四行'''
who = '文件傳輸助手'
WxUtils.SetClipboard(msg)    # 將內(nèi)容復(fù)制到剪貼板,類似于Ctrl + C
wx.ChatWith(who)  # 打開`文件傳輸助手`聊天窗口
wx.SendClipboard()   # 發(fā)送剪貼板的內(nèi)容,類似于Ctrl + V


# 向某人發(fā)送文件(以`文件傳輸助手`為例,發(fā)送三個不同類型文件)
file1 = 'D:/test/wxauto.py'
file2 = 'D:/test/pic.png'
file3 = 'D:/test/files.rar'
who = '文件傳輸助手'
wx.ChatWith(who)  # 打開`文件傳輸助手`聊天窗口
wx.SendFiles(file1, file2, file3)  # 向`文件傳輸助手`發(fā)送上述三個文件
# 注:為保證發(fā)送文件穩(wěn)定性,首次發(fā)送文件可能花費時間較長,后續(xù)調(diào)用會縮短發(fā)送時間


# 向某人發(fā)送程序截圖(以`文件傳輸助手`為例,發(fā)送微信截圖)
name = '微信'
classname = 'WeChatMainWndForPC'
wx.ChatWith(who)  # 打開`文件傳輸助手`聊天窗口
wx.SendScreenshot(name, classname)  # 發(fā)送微信窗口的截圖給文件傳輸助手
注:為保證發(fā)送文件穩(wěn)定性,首次發(fā)送文件可能花費時間較長,后續(xù)調(diào)用會縮短發(fā)送時間

四.遇到的問題

由于部分版本的微信可能由于UI界面不同從而無法使用,截至2022-06-10最新版本可用

  • 因此在代碼運行的時候,會發(fā)現(xiàn)圖片無法發(fā)送、消息無法發(fā)送的報錯情況 LookupError: Find Control Timeout(10s): {Name: '輸入', ControlType: EditControl},這是因為pip 下載的wxauto第三方庫無法匹配微信客戶端3.7的版本。

  • 如果有遇到,可以通過Github的方式下載源碼,直接修改源碼
    python 微信庫,Python,python,開發(fā)語言,自動化

    wxauto庫信息:
    Author: tikic@qq.com
    Source: https://github.com/cluic/wxauto
    Version: 3.3.5.3
    

微信最新版本需要重新適配,需修改 wxauto.py 代碼

1.在 wxauto.py 的文件中找到 WeChat 的類,并添加下述方法
    def ChangeWindow(self, window_title):
        self.EditMsg = self.UiaAPI.EditControl(Name=f'{window_title}')	
        
2.之后在 ChatWith 方法中加入如下代碼
    def ChatWith(self, who, RollTimes=None):
        '''
        打開某個聊天框
        who : 要打開的聊天框好友名,str;  * 最好完整匹配,不完全匹配只會選取搜索框第一個
        RollTimes : 默認向下滾動多少次,再進行搜索
        '''
        self.UiaAPI.SwitchToThisWindow()
        self.ChangeWindow(who)  # [2] 加入如下方法,在每次更改聊天對象時調(diào)用 ChangeWindow 方法
        ... ...

wxauto.py完整代碼

#!python3
# -*- coding: utf-8 -*-
"""
Author: tikic@qq.com
Source: https://github.com/cluic/wxauto
License: MIT License
Version: 3.9.0.28
"""
import uiautomation as uia
import win32gui, win32con
import win32clipboard as wc
import time
import os

AUTHOR_EMAIL = 'tikic@qq.com'
UPDATE = '2023-02-25'
VERSION = '3.9.0.28'


class WxParam:
    SYS_TEXT_HEIGHT = 33
    TIME_TEXT_HEIGHT = 34
    RECALL_TEXT_HEIGHT = 45
    CHAT_TEXT_HEIGHT = 52
    CHAT_IMG_HEIGHT = 117
    SpecialTypes = ['[文件]', '[圖片]', '[視頻]', '[音樂]', '[鏈接]']


class WxUtils:
    def GetMessageInfos(Item, msglist=None):
        msglist = msglist if msglist is not None else list()
        if len(Item.GetChildren()) == 0:
            msglist.append(Item.Name)
        else:
            for i in Item.GetChildren():
                WxUtils.GetMessageInfos(i, msglist)
        return [i for i in msglist if i]

    def SplitMessage(MsgItem):
        uia.SetGlobalSearchTimeout(0)
        MessageInfos = WxUtils.GetMessageInfos(MsgItem)
        MsgItemName = MsgItem.Name
        if MsgItem.BoundingRectangle.height() == WxParam.SYS_TEXT_HEIGHT:
            Msg = ('SYS', MsgItemName, MessageInfos)
        elif MsgItem.BoundingRectangle.height() == WxParam.TIME_TEXT_HEIGHT:
            Msg = ('Time', MsgItemName, MessageInfos)
        elif MsgItem.BoundingRectangle.height() == WxParam.RECALL_TEXT_HEIGHT:
            if '撤回' in MsgItemName:
                Msg = ('Recall', MsgItemName, MessageInfos)
            else:
                Msg = ('SYS', MsgItemName, MessageInfos)
        else:
            Index = 1
            User = MsgItem.ButtonControl(foundIndex=Index)
            try:
                while True:
                    if User.Name == '':
                        Index += 1
                        User = MsgItem.ButtonControl(foundIndex=Index)
                    else:
                        break
                Msg = (User.Name, MsgItemName, MessageInfos)
            except:
                Msg = ('SYS', MsgItemName, MessageInfos)
        uia.SetGlobalSearchTimeout(10.0)
        return Msg

    def SetClipboard(data, dtype='text'):
        '''復(fù)制文本信息或圖片到剪貼板
        data : 要復(fù)制的內(nèi)容,str 或 Image 圖像'''
        if dtype.upper() == 'TEXT':
            type_data = win32con.CF_UNICODETEXT
        elif dtype.upper() == 'IMAGE':
            from io import BytesIO
            type_data = win32con.CF_DIB
            output = BytesIO()
            data.save(output, 'BMP')
            data = output.getvalue()[14:]
        else:
            raise ValueError('param (dtype) only "text" or "image" supported')
        wc.OpenClipboard()
        wc.EmptyClipboard()
        wc.SetClipboardData(type_data, data)
        wc.CloseClipboard()

    def Screenshot(hwnd, to_clipboard=True):
        '''為句柄為hwnd的窗口程序截圖
        hwnd : 句柄
        to_clipboard : 是否復(fù)制到剪貼板
        '''
        import pyscreenshot as shot
        bbox = win32gui.GetWindowRect(hwnd)
        win32gui.SetWindowPos(hwnd, win32con.HWND_TOPMOST, 0, 0, 0, 0, \
                              win32con.SWP_SHOWWINDOW | win32con.SWP_NOMOVE | win32con.SWP_NOSIZE)
        win32gui.SetWindowPos(hwnd, win32con.HWND_NOTOPMOST, 0, 0, 0, 0, \
                              win32con.SWP_SHOWWINDOW | win32con.SWP_NOMOVE | win32con.SWP_NOSIZE)
        win32gui.BringWindowToTop(hwnd)
        im = shot.grab(bbox)
        if to_clipboard:
            WxUtils.SetClipboard(im, 'image')
        return im

    def SavePic(savepath=None, filename=None):
        Pic = uia.WindowControl(ClassName='ImagePreviewWnd', Name='圖片查看')
        Pic.SendKeys('{Ctrl}s')
        SaveAs = Pic.WindowControl(ClassName='#32770', Name='另存為...')
        SaveAsEdit = SaveAs.EditControl(ClassName='Edit', Name='文件名:')
        SaveButton = Pic.ButtonControl(ClassName='Button', Name='保存(S)')
        PicName, Ex = os.path.splitext(SaveAsEdit.GetValuePattern().Value)
        if not savepath:
            savepath = os.getcwd()
        if not filename:
            filename = PicName
        FilePath = os.path.realpath(os.path.join(savepath, filename + Ex))
        SaveAsEdit.SendKeys(FilePath)
        SaveButton.Click()
        Pic.SendKeys('{Esc}')

    def ControlSize(control):
        locate = control.BoundingRectangle
        size = (locate.width(), locate.height())
        return size

    def ClipboardFormats(unit=0, *units):
        units = list(units)
        wc.OpenClipboard()
        u = wc.EnumClipboardFormats(unit)
        wc.CloseClipboard()
        units.append(u)
        if u:
            units = WxUtils.ClipboardFormats(u, *units)
        return units

    def CopyDict():
        Dict = {}
        for i in WxUtils.ClipboardFormats():
            if i == 0:
                continue
            wc.OpenClipboard()
            try:
                content = wc.GetClipboardData(i)
                wc.CloseClipboard()
            except:
                wc.CloseClipboard()
                raise ValueError
            if len(str(i)) >= 4:
                Dict[str(i)] = content
        return Dict


class WeChat:
    def __init__(self):
        self.UiaAPI = uia.WindowControl(ClassName='WeChatMainWndForPC')
        self.SessionList = self.UiaAPI.ListControl(Name='會話')
        self.EditMsg = self.UiaAPI.EditControl(Name='輸入')
        self.SearchBox = self.UiaAPI.EditControl(Name='搜索')
        self.MsgList = self.UiaAPI.ListControl(Name='消息')
        self.SessionItemList = []

    def ChangeWindow(self, window_title):
        self.EditMsg = self.UiaAPI.EditControl(Name=f'{window_title}')

    def GetSessionList(self, reset=False):
        '''獲取當(dāng)前會話列表,更新會話列表'''
        self.SessionItem = self.SessionList.ListItemControl()
        SessionList = []
        if reset:
            self.SessionItemList = []
        for i in range(100):
            try:
                name = self.SessionItem.Name
            except:
                break
            if name not in self.SessionItemList:
                self.SessionItemList.append(name)
            if name not in SessionList:
                SessionList.append(name)
            self.SessionItem = self.SessionItem.GetNextSiblingControl()
        return SessionList

    def Search(self, keyword):
        '''
        查找微信好友或關(guān)鍵詞
        keywords: 要查找的關(guān)鍵詞,str   * 最好完整匹配,不完全匹配只會選取搜索框第一個
        '''
        self.UiaAPI.SetFocus()
        time.sleep(0.2)
        self.UiaAPI.SendKeys('{Ctrl}f', waitTime=1)
        self.SearchBox.SendKeys(keyword, waitTime=1.5)
        self.SearchBox.SendKeys('{Enter}')

    def ChatWith(self, who, RollTimes=None):
        '''
        打開某個聊天框
        who : 要打開的聊天框好友名,str;  * 最好完整匹配,不完全匹配只會選取搜索框第一個
        RollTimes : 默認向下滾動多少次,再進行搜索
        '''
        self.UiaAPI.SwitchToThisWindow()
        self.ChangeWindow(who)  # [2] 加入如下方法,在每次更改聊天對象時調(diào)用 ChangeWindow 方法
        RollTimes = 10 if not RollTimes else RollTimes

        def roll_to(who=who, RollTimes=RollTimes):
            for i in range(RollTimes):
                if who not in self.GetSessionList()[:-1]:
                    self.SessionList.WheelDown(wheelTimes=3, waitTime=0.1 * i)
                else:
                    time.sleep(0.5)
                    self.SessionList.ListItemControl(Name=who).Click(simulateMove=False)
                    return 1
            return 0

        rollresult = roll_to()
        if rollresult:
            return 1
        else:
            self.Search(who)
            return roll_to(RollTimes=1)

    def SendMsg(self, msg, clear=True):
        '''向當(dāng)前窗口發(fā)送消息
        msg : 要發(fā)送的消息
        clear : 是否清除當(dāng)前已編輯內(nèi)容
        '''
        self.UiaAPI.SwitchToThisWindow()
        if clear:
            self.EditMsg.SendKeys('{Ctrl}a', waitTime=0)
        self.EditMsg.SendKeys(msg, waitTime=0)
        self.EditMsg.SendKeys('{Enter}', waitTime=0)

    def SendFiles(self, *filepath, not_exists='ignore'):
        """向當(dāng)前聊天窗口發(fā)送文件
        not_exists: 如果未找到指定文件,繼續(xù)或終止程序
        filepath (list): 要復(fù)制文件的絕對路徑"""
        key = ''
        for file in filepath:
            file = os.path.realpath(file)
            if not os.path.exists(file):
                if not_exists.upper() == 'IGNORE':
                    print('File not exists:', file)
                    continue
                elif not_exists.upper() == 'RAISE':
                    raise FileExistsError('File Not Exists: %s' % file)
                else:
                    raise ValueError('param not_exists only "ignore" or "raise" supported')
            key += '<EditElement type="3" filepath="%s" shortcut="" />' % file

        self.EditMsg.SendKeys(' ', waitTime=0)
        self.EditMsg.SendKeys('{Ctrl}a', waitTime=0)
        self.EditMsg.SendKeys('{Ctrl}c', waitTime=0)
        self.EditMsg.SendKeys('{Delete}', waitTime=0)
        while True:
            try:
                data = WxUtils.CopyDict()
                break
            except:
                pass

        for i in data:
            data[i] = data[i].replace(b'<EditElement type="0"><![CDATA[ ]]></EditElement>', key.encode())

        data1 = {
            '13': '',
            '16': b'\x04\x08\x00\x00',
            '1': b'',
            '7': b''
        }
        data.update(data1)

        wc.OpenClipboard()
        wc.EmptyClipboard()
        for k, v in data.items():
            wc.SetClipboardData(int(k), v)
        wc.CloseClipboard()
        self.SendClipboard()
        return 1

    def SendClipboard(self):
        '''向當(dāng)前聊天頁面發(fā)送剪貼板復(fù)制的內(nèi)容'''
        self.SendMsg('{Ctrl}v')

    @property
    def GetAllMessage(self):
        '''獲取當(dāng)前窗口中加載的所有聊天記錄'''
        MsgDocker = []
        MsgItems = self.MsgList.GetChildren()
        for MsgItem in MsgItems:
            MsgDocker.append(WxUtils.SplitMessage(MsgItem))
        return MsgDocker

    @property
    def GetLastMessage(self):
        '''獲取當(dāng)前窗口中最后一條聊天記錄'''
        uia.SetGlobalSearchTimeout(1.0)
        MsgItem = self.MsgList.GetChildren()[-1]
        Msg = WxUtils.SplitMessage(MsgItem)
        uia.SetGlobalSearchTimeout(10.0)
        return Msg

    def LoadMoreMessage(self, n=0.1):
        '''定位到當(dāng)前聊天頁面,并往上滾動鼠標滾輪,加載更多聊天記錄到內(nèi)存'''
        n = 0.1 if n < 0.1 else 1 if n > 1 else n
        self.MsgList.WheelUp(wheelTimes=int(500 * n), waitTime=0.1)

    def SendScreenshot(self, name=None, classname=None):
        '''發(fā)送某個桌面程序的截圖,如:微信、記事本...
        name : 要發(fā)送的桌面程序名字,如:微信
        classname : 要發(fā)送的桌面程序類別名,一般配合 spy 小工具使用,以獲取類名,如:微信的類名為 WeChatMainWndForPC'''
        if name and classname:
            return 0
        else:
            hwnd = win32gui.FindWindow(classname, name)
        if hwnd:
            WxUtils.Screenshot(hwnd)
            self.SendClipboard()
            return 1
        else:
            return 0

wxautoapi文章來源地址http://www.zghlxwxcb.cn/news/detail-650070.html

到了這里,關(guān)于【Python】通過第三方庫wxauto自動化操作微信電腦客戶端的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Xcode通過Add package自動集成第三方SDK問題匯總

    Xcode通過Add package自動集成第三方SDK問題匯總

    問題1: ?解決方法:這個問題可能是因為 Adjust 或者 Facebook 的庫當(dāng)中依賴的某些類庫的倉庫地址是 git:// 協(xié)議,通過這種協(xié)議與 GitHub 通訊時會使用到你的 SSH 配置,你電腦上相關(guān)的 ssh key 使用了 GitHub 不再支持的格式,請參考提示中的網(wǎng)址重新生成相關(guān)的 SSH key:https://githu

    2024年02月13日
    瀏覽(90)
  • Argis通過Python的Arcpy第三方庫進行字段計算、批量將mxd導(dǎo)出為jpg圖片、合并數(shù)據(jù)庫

    Argis通過Python的Arcpy第三方庫進行字段計算、批量將mxd導(dǎo)出為jpg圖片、合并數(shù)據(jù)庫

    前言 ??近來公司有開發(fā)Arcgis腳本工具的需求,我就去學(xué)了一下用Arcpy來操作Arcgis的數(shù)據(jù),今天學(xué)習(xí)了字段計算,將學(xué)習(xí)成果記錄如下。 ??arcpy幫助文檔傳送門:https://resources.arcgis.com/zh-cn/help/main/10.2/ 一、字段計算 1、以python函數(shù)的形式進行字段計算 ??我們打開字段計算

    2024年02月11日
    瀏覽(20)
  • 通過第三方軟件修改 MacOS 的鍵盤映射

    通過第三方軟件修改 MacOS 的鍵盤映射

    由于文本編輯時大量使用word level的左移、右移,其中: OSX的單詞級左右移為option + Left/Right Arrow,整行級左右移為command + Left/Right Arrow 單詞級移動與進行編輯常用的command不同鍵位,因此嘗試交換二者功能 由于 command 鍵在OSX下的其他重要作用,不方便直接將 option 與 command 進行

    2024年02月09日
    瀏覽(176)
  • Android開發(fā):通過Tesseract第三方庫實現(xiàn)OCR

    Android開發(fā):通過Tesseract第三方庫實現(xiàn)OCR

    一、引言 ????????什么是 OCR ?OCR(Optical Character Recognition,光學(xué)字符識別)是指電子設(shè)備(例如掃描儀或數(shù)碼相機)檢查紙上打印的字符,通過檢測暗、亮的模式確定其形狀,然后用字符識別方法將形狀翻譯成計算機文字的過程。簡單地說,OCR是一種技術(shù),該項技術(shù)采用光學(xué)的

    2024年02月16日
    瀏覽(159)
  • Python第三方庫安裝教程、什么是第三方庫

    Python有一個全球社區(qū):https://pypi.org/,在這里我們可以搜索任何主題的Python第三方庫。PyPI全稱是Python Package Index,指的是Python包的索引,它由PSF(Python Software Foundation)來維護,并且展示全球Python計算生態(tài)。 我們需要學(xué)會利用PyPI的主站檢索,找到我們使用和關(guān)心的Python第三方

    2024年02月03日
    瀏覽(94)
  • SAP PO 接口配置1:連通WebService-通過PO調(diào)用第三方接口

    SAP PO 接口配置1:連通WebService-通過PO調(diào)用第三方接口

    SAP 通過 PO 中間件進行接口調(diào)用,調(diào)用外部接口。 外部接口可以用任意方式生成,常見的REST類型接口即可,關(guān)于如何使用python生成接口,其他章節(jié)另述。 本教程的前置條件,PO中已配置Business Systems,并與SAP環(huán)境連通。 這里以常見的post接口做示例,如有其他類型接口,需要每

    2024年02月05日
    瀏覽(93)
  • Python第三方庫安裝——使用vscode、pycharm安裝Python第三方庫

    Python第三方庫安裝——使用vscode、pycharm安裝Python第三方庫

    在這里介紹vscode、Pycharm安裝python第三方庫的方法。 操作系統(tǒng):windows10 專業(yè)版 環(huán)境如下: Pycharm Comunity 2022.3 Visual Studio Code 2019 Python 3.8 pip:23.0.1 pycharm是一款很強大的、專用于寫python的ide。 小白式安裝第三方庫往往能給初學(xué)者一種 “高級感” ,而對于使用慣了Linux的人而言

    2024年02月03日
    瀏覽(118)
  • Python第三方庫批量下載到本地,并離線批量安裝第三方庫

    Python第三方庫批量下載到本地,并離線批量安裝第三方庫

    鑒于公司內(nèi)網(wǎng)安裝的python版本為python3.6.5,而此時又需要安裝第三方庫pytest,本來是想直接在Python官網(wǎng)PyPI直接搜對應(yīng)可匹配跑python3.6.5版本的pytest進行下載然后傳到內(nèi)網(wǎng)安裝即可,但是發(fā)現(xiàn)pytest依賴別的第三方庫,根據(jù)報錯裝了幾個依賴的第三方庫之后,發(fā)現(xiàn)還是一堆的問題

    2024年02月07日
    瀏覽(104)
  • 138. 第三方系統(tǒng)或者工具通過 HTTP 請求發(fā)送給 ABAP 系統(tǒng)的數(shù)據(jù),應(yīng)該如何解析

    138. 第三方系統(tǒng)或者工具通過 HTTP 請求發(fā)送給 ABAP 系統(tǒng)的數(shù)據(jù),應(yīng)該如何解析

    本教程第 37 篇文章,我們介紹了如何在 SAP ABAP 系統(tǒng) SICF 事務(wù)碼 里,開發(fā)一段 ABAP 代碼,用來響應(yīng)通過瀏覽器或者第三方工具,比如 curl,Postman 發(fā)起的 HTTP 請求。 31. 如何讓 ABAP 服務(wù)器能夠響應(yīng)通過瀏覽器發(fā)起的自定義 HTTP 請求 在實際的 ABAP 集成項目中,這種方式非常使用。

    2024年03月21日
    瀏覽(102)
  • SpringBoot 自動掃描第三方包及spring.factories失效的問題

    SpringBoot 自動掃描第三方包及spring.factories失效的問題

    Spring 依賴注入 就是要讓spring找到要注入的類 并且識別到了 @Component、@Service 等注解。 1. 當(dāng)在開發(fā)的第三方包里寫明了 @Component、@Service 等等 2. 引入了包,不論第三方庫的引入,還是本地jar。總之是要引入到工程的 這時候還加入不到 IOC 容器,那就說明SpringBoot工程沒有掃描到

    2024年02月03日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包