Tkinter和selenium结合实现登录UC后台,最后打包成exe

将Tkinter工具打包为独立EXE安装程序 本文详细介绍了如何将基于Tkinter的Python GUI程序打包为独立的EXE文件,并生成安装程序。首先,文章解释了将Python程序打包为EXE的必要性,如脱离Python环境运行、便于分发等。接着,文章提供了打包前的准备工作,包括确保程序依赖已安装和系统环境配置。然后,文章详细讲解了使用PyInstaller进行打包的步骤,包括安装PyInstaller、基本打包命令、以及如何打包带图标和资源文件的程序。此外,文章还介绍了如何使用Inno Setup生成一键安装包,并提供了常见问题的解决方案。最后, 阅读详情

主要实现的功能:小号模式自动登录UC阿里汇川广告后台,屏蔽账号密码输入
主要用的技术:用Tkinter展示所有的广告账号界面,使用selenium控制谷歌浏览器,打开阿里汇川登录页,登录汇川后台。
第一次写,遇到的坑比较多,三天,搞定。给自己一个棒棒~☺️

import Tkinter as tk  
import os
import sys
import requests
from selenium import webdriver
import base64
from PIL import Image, ImageTk
import math


path = os.path.split(os.path.realpath(__file__))[0] + os.sep

class showCode(tk.Toplevel):
  def __init__(self):
    # super().__init__()
    tk.Toplevel.__init__(self)
    self.title('请输入验证码')
    self.wm_attributes('-topmost',1)
    # 弹窗界面
    self.setup_UI()
  def setup_UI(self):
    # from PIL import Image
    # im = Image.open(path + 'code/code.gif')
    # im.show()
    self._inputCode = tk.StringVar() # 将此处的验证码放置到类中,直接获取该值无法获取
    frame = tk.Frame(self)  #初始化一个框架
    frame.pack()

    im=Image.open(path  + "/code/code.gif")  
    self.photo=ImageTk.PhotoImage(im)  
    cv = tk.Canvas(frame)  
    cv.pack(side='top',fill='both', expand='false',padx=20,pady=20)  
    cv.create_image(0, 0, image=self.photo, anchor='nw')  

    # im=Image.open(path + 'code/code.gif')
    # img=ImageTk.PhotoImage(im)
    # imLabel=tk.Label(frame,image=img).pack()# 显示图片

    e1 = tk.Entry(frame,width=10,textvariable=self._inputCode).pack(anchor='w')
    tk.Button(frame,text='确定',command=self.setCode).pack(anchor='w')

  #点击确定将验证码赋值给主窗口  
  def setCode(self):
      self.inputCode = self._inputCode.get()
      self.destroy() # 销毁窗口



# 主窗
class MyApp(tk.Tk):
  def __init__(self):
    global path
    # super().__init__()
    tk.Tk.__init__(self)
    #self.pack() # 若继承 tk.Frame ,此句必须有!
    self.title('UC账号管家')
    self.geometry('1000x600')
    self.iconbitmap(default='code/logo.ico')  # 加图标

    # 获取所有账号
    self.getAccountsFirst()    
    # 调起程序界面
    self.setupUI()

  # 获取所有的投放账号
  def getAccountsFirst(self):
    f = open(path + 'code/account.log')
    content = f.read()
    f.close()
    #解密账号
    _account = base64.b64decode(content).replace(' ', '').split("\n")
    __account = []
    for i in range(len(_account)):
      __account.append(_account[i].split(","))
      # self.account[i] = _account[i].split(",")
    #将账号赋值给账号界面
    self.accounts = __account

  #拉起账号界面
  def setupUI(self):
    def callback():
        argAccount = var.get()
        for account in self.accounts:
            if(account[0].decode('utf-8') == argAccount):
                # 此时做登录操作
                self.login(account[0],account[1])
    row1 = tk.LabelFrame(self)
    var = tk.StringVar()
    group=tk.LabelFrame(row1,text='选择要登录的账号').pack(padx=100)   # 基于root 制定一个框架 . 

    count = 0
    row = 1
    for name,pwd in self.accounts:
        column = int(math.fmod(count,5))
        if(row * 5 == count):
          row = row + 1
        b = tk.Radiobutton(group,text=name,variable=var,value=name,indicatoron=0,padx=30,pady=3,command=callback)
        b.grid(row=row,column=column)
        count = count + 1
        # b.pack(anchor="w")
    label = tk.Label(row1)
    label.pack()

  def login(self,username,pwd):
    #开始登陆
    login_url = 'https://e.uc.cn/'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/58.0.3029.110 Safari/537.36'
    }
    options = webdriver.ChromeOptions()
    options.add_experimental_option("excludeSwitches", ["ignore-certificate-errors"])
    options.add_argument('disable-infobars')
    driver = webdriver.Chrome(chrome_options=options)
    # options.binary_location = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
    # driver.chrome_driver_binary = "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
    # driver = webdriver.Chrome()
    driver.delete_all_cookies()
    driver.get("https://e.uc.cn/sso/static/pages/hcsso.html?authorizeUrl=http%3A%2F%2Fe.uc.cn%2Fsso%2Fv1%2Fauthorize%3Fresponse_type%3Dcode%26scope%3Dopenid%26client_id%3DeyJjdHkiOiJKV1QiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiQTEyOEtXIn0.PYe1Zfthswo5iITZVGBkn5hCfdzyuQAkXWPE7VAO0eAuRNEzikoQgQ.3g8Cf2JZ2D8bhKdKlgaHGw.-56UrnfHvZPoryCii7MPSvoBUlnacryxYxBqQBLUQe3k_XJ1j3Trv-Io9JK9Pg3CyFbslM281pe8MsNGjvIfPUT7Z_Vc0N_0t_bCp3Lp4H0eJ3YODXapXgMX2qYROw1uWCbb8FcWpa37HyySgjsaOHIiDVkwmb3I_flywaJu5Tavbp09nwirOg-AJ8unie4nQXt9XqA5Dpq9F5qv36TFGVKRUbTMzvA8XGjUpE1ExL5oodpxfh8FfUfBLvF69PgjHwJiijrC702X5VHx0Og949xnmIX4znCbJ3MPUDjPwtS92IxGYypjWDTi4bfWYZYl8iPVoMbZCCz--QrmH1FUjznu6YmVavmKXasvHg6qI9Gpn5hnv--9rPp0CJgpJg_7DLyxr4D7jOj2Ju7gXGNPKqsoqP_GT1zsa1mkUZbeMSLYQVZJPwO6HLcpyZG-zH1_fz70IgIxACHBxky2V3P9WgUaExKys-e_8zawHxWpbyTl1DZlg7v1razzzrwgteHmpoJxyRUt_Gs7WQyYlCrgLrhVWEF7JKTy9MJFeepuGg8GWyzUtu86yRkIkDDL726B4J_sa779JzfutyZtVBAj36BuSj_EnvFsNau13vJ23Nyc3wm8TT8QS6xD6vrKRHWYCp7trDHcInlIczi7gnVth2c_RstjKeE8wcIPN1a1-4wkwIiUAkrnx_y2EaUECHp5vHITjbpBD1rPzZwKZT8Mlw.9hgjcRYoM3FgvXVF7YOgIw%26redirect_uri%3Dhttps%3A%2F%2Fe.uc.cn%2Fuc%2Fsso_auth_code%26target_url%3Dhttp%3A%2F%2Fe.uc.cn%2Fuc%2F%3FisFromPortal%3D0")

    # 将所有的cookie清除
    driver.delete_all_cookies()

    #重新获取验证码并且将cookie写入浏览器
    cookies = self.getCode()
    for cok in cookies:
        driver.add_cookie({'name':cok,'value':cookies[cok]})


    # 弹窗
    code = self.ask_inputCode()
    userName = driver.find_element_by_id('username')
    password = driver.find_element_by_id('password')
    captchaCode = driver.find_element_by_name('captchaCode')

    userName.clear()
    userName.send_keys(username.decode('utf-8'))
    password.clear()
    password.send_keys(pwd.decode('utf-8'))
    captchaCode.send_keys(code.decode('utf-8'))

    submit = driver.find_element_by_class_name('js-hc-loginBtn')
    submit.click()

  def ask_inputCode(self):
    inputOjb = showCode()
    self.wait_window(inputOjb) # 这一句很重要!!!
    return inputOjb.inputCode

  def getCode(self):
    global path
    img_src = "https://e.uc.cn/sso/auth.jpg"
    r = requests.get(img_src)
    r.raise_for_status()
    with open(path + 'code/code.gif',"wb") as f: #开始写文件,wb代表写二进制文件
        f.write(r.content)
        f.close()
    f.close()
    cookies = requests.utils.dict_from_cookiejar(r.cookies)
    return cookies

if __name__ == '__main__':
  app = MyApp()
  app.mainloop()

关于环境:

我是在mac里面先写完,然后最后因为要编译成exe,所以必须在window里面重新再搭建环境。
遇到的问题:
问题一、
同样是使用Tkinter,环境py27
mac中 import tkinter as tk 是没问题的

在window中使用    import tkinter as tk  报 ImportError:No module named tkinter

解决办法:原来一直以为是没有装tkinter,因为在mac里面使用(
mac安装Tkinter库brew install homebrew/dupes/tcl-tk)重新过tkinter,以为window也要重新搞一遍
后来发现用法用错了。在window中py2.7 要使用

import Tkinter as tk

问题二、

关于代码

问题一、最开始没有使用类的方式,所有的方法都放在一个文件中,然后在弹窗将输入的值返回给主界面,一直返回不回去。如果要设置的参数个数超过两个,那么tkinter提供的标准窗口就处理不了了。怎样将自定义窗口中的数据传回主窗口?
解决办法:原来一直以为是对python的类理解不深刻,然后是Tkinter中的使用就是返回不回去
参照:https://www.jb51.net/article/119817.htm 修改成了类的方式来做。我用的第一种,把值返回给主界面

1)松耦合
说明:
主窗类,继承了 tk.Tk
弹窗类,继承了 tk.Toplevel
要点:
弹窗,将多个数据,打包,放入一个名为 username 的私有 list 对象,销毁弹窗
主窗,待弹窗运行后,通过wait_window方法,取得弹窗的名为 username 私有变量

import tkinter as tk
'''松耦合'''
# 弹窗
class MyDialog(tk.Toplevel):
  def __init__(self):
    super().__init__()
    self.title('设置用户信息')
    # 弹窗界面
    self.setup_UI()
  def setup_UI(self):
    # 第一行(两列)
    row1 = tk.Frame(self)
    row1.pack(fill="x")
    tk.Label(row1, text='姓名:', width=8).pack(side=tk.LEFT)
    self.name = tk.StringVar()
    tk.Entry(row1, textvariable=self.name, width=20).pack(side=tk.LEFT)
    # 第二行
    row2 = tk.Frame(self)
    row2.pack(fill="x", ipadx=1, ipady=1)
    tk.Label(row2, text='年龄:', width=8).pack(side=tk.LEFT)
    self.age = tk.IntVar()
    tk.Entry(row2, textvariable=self.age, width=20).pack(side=tk.LEFT)
    # 第三行
    row3 = tk.Frame(self)
    row3.pack(fill="x")
    tk.Button(row3, text="取消", command=self.cancel).pack(side=tk.RIGHT)
    tk.Button(row3, text="确定", command=self.ok).pack(side=tk.RIGHT)
  def ok(self):
    self.userinfo = [self.name.get(), self.age.get()] # 设置数据
    self.destroy() # 销毁窗口
  def cancel(self):
    self.userinfo = None # 空!
    self.destroy()
# 主窗
class MyApp(tk.Tk):
  def __init__(self):
    super().__init__()
    #self.pack() # 若继承 tk.Frame ,此句必须有!
    self.title('用户信息')
    # 程序参数/数据
    self.name = '张三'
    self.age = 30
    # 程序界面
    self.setupUI()
  def setupUI(self):
    # 第一行(两列)
    row1 = tk.Frame(self)
    row1.pack(fill="x")
    tk.Label(row1, text='姓名:', width=8).pack(side=tk.LEFT)
    self.l1 = tk.Label(row1, text=self.name, width=20)
    self.l1.pack(side=tk.LEFT)
    # 第二行
    row2 = tk.Frame(self)
    row2.pack(fill="x")
    tk.Label(row2, text='年龄:', width=8).pack(side=tk.LEFT)
    self.l2 = tk.Label(row2, text=self.age, width=20)
    self.l2.pack(side=tk.LEFT)
    # 第三行
    row3 = tk.Frame(self)
    row3.pack(fill="x")
    tk.Button(row3, text="设置", command=self.setup_config).pack(side=tk.RIGHT)
  # 设置参数
  def setup_config(self):
    # 接收弹窗的数据
    res = self.ask_userinfo()
    #print(res)
    if res is None: return
    # 更改参数
    self.name, self.age = res
    # 更新界面
    self.l1.config(text=self.name)
    self.l2.config(text=self.age)
  # 弹窗
  def ask_userinfo(self):
    inputDialog = MyDialog()
    self.wait_window(inputDialog) # 这一句很重要!!!
    return inputDialog.userinfo
if __name__ == '__main__':
  app = MyApp()
  app.mainloop()

2)紧耦合
说明:
主窗类,继承了 tk.Tk
弹窗类,继承了 tk.Toplevel
要点:
弹窗,显式地保存父窗口,显式地修改父窗口数据,显式地更新父窗口部件,最后销毁弹窗
主窗,待弹窗运行后,通过wait_window方法,返回 None


import tkinter as tk
'''紧耦合'''
# 弹窗
class PopupDialog(tk.Toplevel):
  def __init__(self, parent):
    super().__init__()
    self.title('设置用户信息')
    self.parent = parent # 显式地保留父窗口
    # 第一行(两列)
    row1 = tk.Frame(self)
    row1.pack(fill="x")
    tk.Label(row1, text='姓名:', width=8).pack(side=tk.LEFT)
    self.name = tk.StringVar()
    tk.Entry(row1, textvariable=self.name, width=20).pack(side=tk.LEFT)
    # 第二行
    row2 = tk.Frame(self)
    row2.pack(fill="x", ipadx=1, ipady=1)
    tk.Label(row2, text='年龄:', width=8).pack(side=tk.LEFT)
    self.age = tk.IntVar()
    tk.Entry(row2, textvariable=self.age, width=20).pack(side=tk.LEFT)
    # 第三行
    row3 = tk.Frame(self)
    row3.pack(fill="x")
    tk.Button(row3, text="取消", command=self.cancel).pack(side=tk.RIGHT)
    tk.Button(row3, text="确定", command=self.ok).pack(side=tk.RIGHT)
  def ok(self):
    # 显式地更改父窗口参数
    self.parent.name = self.name.get()
    self.parent.age = self.age.get()
    # 显式地更新父窗口界面
    self.parent.l1.config(text=self.parent.name)
    self.parent.l2.config(text=self.parent.age)
    self.destroy() # 销毁窗口
  def cancel(self):
    self.destroy()
# 主窗
class MyApp(tk.Tk):
  def __init__(self):
    super().__init__()
    # self.pack() # 若继承 tk.Frame,此句必须有!!!
    self.title('用户信息')
    # 程序参数
    self.name = '张三'
    self.age = 30
    # 程序界面
    self.setupUI()
  def setupUI(self):
    # 第一行(两列)
    row1 = tk.Frame(self)
    row1.pack(fill="x")
    tk.Label(row1, text='姓名:', width=8).pack(side=tk.LEFT)
    self.l1 = tk.Label(row1, text=self.name, width=20)
    self.l1.pack(side=tk.LEFT)
    # 第二行
    row2 = tk.Frame(self)
    row2.pack(fill="x")
    tk.Label(row2, text='年龄:', width=8).pack(side=tk.LEFT)
    self.l2 = tk.Label(row2, text=self.age, width=20)
    self.l2.pack(side=tk.LEFT)
    # 第三行
    row3 = tk.Frame(self)
    row3.pack(fill="x")
    tk.Button(row3, text="设置", command=self.setup_config).pack(side=tk.RIGHT)
  # 设置参数
  def setup_config(self):
    pw = PopupDialog(self)
    self.wait_window(pw) # 这一句很重要!!!
    return
if __name__ == '__main__':
  app = MyApp()
  app.mainloop()

问题二、
“Use of super on an old style class” py27环境里面super不支持使用,需要使用老方式来显示
Python类的继承有两种写法,一是老样式(old style),一是新样式(new style),都能解决上述的错误。
解决办法:
参照我的代码。
好的博客:这个涉及到关于py的类和继承,这个有时间再看下,因为直接做项目,蒙头做,回过头再研究吧
https://blog.youkuaiyun.com/ws_cs_dn/article/details/37699195
https://blog.youkuaiyun.com/yiifaa/article/details/78068970

问题三、
下载验证码到本地,然后使用Tkinter,打开该文件一直打不开。不显示该图片。最开始使用Lab方式来显示图片,反正死活没显示出来,后来使用tk.Canvas 然后显示出来图片……
解释:首先,查了下Tkinter的Lab只支持gif格式的图片显示,如果想支持多格式,需要下PIL包,然后用PIL的TkinterImage来打开图片(参照我代码),最开始我理解的,可能我下载的图片格式不对,我直接把验证码文件下载下来在保存的时候,直接给了后缀,可能文件格式有问题~这是一个
另一个是Lab的用法,可能在类里面的使用方式不对。

另外,我使用 tk.Canvas显示图片,也要格外注意self的使用,不然可能会出现弹窗和主界面主键混乱的情况。。。虽然我实现了功能,很多我也要重新再看下,我只给出解决的方式,至于为什么…………以后慢慢研究吧……

问题四、
在使用chromeDriver时,chromeDriver会有一个弹窗,如何隐藏chromeDriver.exe 黑色弹窗?
修改selenium包文件中
参照:https://stackoverflow.com/questions/33983860/hide-chromedriver-console-in-python
*\selenium\webdriver\common\services.py文件
首先引入 from win32process import CREATE_NO_WINDOW
然后修改start 方法(如下例子),增加creationflags=CREATE_NO_WINDOW

def start(self):
    """
    Starts the Service.

    :Exceptions:
     - WebDriverException : Raised either when it can't start the service
       or when it can't connect to the service
    """
    try:
        cmd = [self.path]
        cmd.extend(self.command_line_args())
        self.process = subprocess.Popen(cmd, env=self.env,
                                        close_fds=platform.system() != 'Windows',
                                        stdout=self.log_file, stderr=self.log_file, creationflags=CREATE_NO_WINDOW)
    except TypeError:
        raise

这样子,就不会显示黑色chromeDriver.exe 窗口啦,嘻嘻嘻嘻~

屏蔽,运行自动化脚本
option = webdriver.ChromeOptions()
option.add_argument(‘disable-infobars’)
webdriver.Chrome(chrome_options = option,desired_capabilities = None)

关于打包:
python
打包使用了pyinstaller 来打包。
pip install pyinstaller
pyinstaller -F uc-end.py –noconsole

ARM compiler version5.06 keil5.37没有预装compiler version5,这是compiler version5安装包 立即下载

相关推荐

smzy_dnfcjgmgj_1233_

付老师的反馈了哥特人格人格人鬼如果让大哥二

部署Kubernetes集群-1.18.6版本

Kubeadm 部署 Kubernetes1.18.6 集群 一、环境说明 主机名 IP地址 角色 系统 k8s-master 192.168.182.150 k8s-master Centos7.6 k8s-node-1 192.168.182.160 k8s-node Centos7.6 k8s-node-2 192.168.182.170 k8s-node Centos7.6 注意:官方建议每台机器至少双核2G内存,同时需确保MAC和product_uuid唯一(参考下面

sehn_的博客 3万+

MAIXCAM无线连接实战:5分钟搞定远程调试与代码烧录(避坑版)

本文提供了一份详细的MAIXCAM无线连接实战指南,帮助嵌入式视觉开发者快速配置远程调试与代码烧录。文章重点介绍了通过MaixHub IDE进行Wi-Fi配置、建立远程终端连接、使用SFTP进行文件传输以及管理自启动应用程序的完整流程,并针对IP地址变动、信号中断等常见问题提供了实用的避坑解决方案,旨在提升开发效率与灵活性。

weixin_29188043的博客 297

【MySQL】Linux部署MySQL服务(官网部署方式rpm)

MySQL的安装步骤,超级详细(最重要的是:按照官网搭建的MySQL服务)

qq_45518774的博客 1043

分享一个我自用的 Python 消息发送模块,支持邮件、钉钉、企业微信

🔥 分享一个我自用的 Python 消息发送模块,支持邮件、钉钉、企业微信

XiaoqiangClub的博客 477

Sparse-ICP—(4) 加权稀疏迭代最近点算法(matlab版)

本文介绍了加权稀疏迭代最近点算法的实现。

点云侠的博客 642

Jenkins实现html代码上线与回滚

一、案例环境二、部署Gitlab1)部署Gitlab2) 配置免密登录3)测试免密登录三、部署Jenkins四、Jenkins集成Gitlab五、部署Nginx六、Jenkins实现代码自动上线七、Jenkins实现代码自动部署与回退及重复构建 一、案例环境 系统 IP地址 主机名 所运行的服务 Centos 7 192.168.1.6 gitlab gitlab Cento...

小健健的博客 1959

set_input_delay/set_output_delay介绍

针对这一类的情况,在做block时,cts之后,便需要将update_io_latency给关闭。那么,计算的timing就是错误的了。对于hier flow来讲,切分block,进行timing budget的时候,clock tree还未长。计算block端口上的timing,通常需要用到set_input_delay和set_output_delay告知工具外部电路的延迟信息,以方便工具计算端口上的timing。此时,工具在计算in2reg的timing时,便会将2.67ns的delay带进来。

芯冰乐 318

HTML5 和 CSS3 响应式 Web 设计入门指南(三)

查看了一些常见的用户交互示例后,您现在应该对可能不适用于所有视口大小的用户交互类型有所了解。记住这一点,您现在应该能够在需要的地方调整这些交互,以便更好地适应不同的视口大小。我相信管理用户体验不是一门科学,而更像是一门艺术——因此,做事没有严格的对错之分。这一章的目的仅仅是引导你开始塑造你的响应站点的旅程。值得注意的是,虽然讨论的许多内容都可以作为构建响应之旅的起点,但用户的最佳体验是围绕他们试图通过您的网站实现的目标而定制的。网站的内容是网站的核心,当你了解到用户感兴趣的内容时,你不应该害怕改变它。

龙哥盟 965

【STM32项目】基于Stm32c8t6-镭射激光打印机的设计(完整工程资料源码)

随着打印技术的快速发展,镭射打印技术也开始得到越来越广泛的应用。这种技术可以被用于在木材、塑料、皮革、织物等各种材料上进行图形打印,并且通常比传统机器更快、更准确和更灵活。

嵌入式技术开发 7198

学Simulink——基于Simulink的固态变压器(SST)多级协同控制​

本文介绍了基于Simulink的固态变压器(SST)多级协同控制系统设计与仿真方法。SST作为智能电网关键设备,包含AC-DC整流、DC-DC隔离和DC-AC逆变三级变换器。针对级间耦合问题,提出了能量-功率协同控制策略,通过纵向解耦和横向联动实现稳定运行。详细演示了在Simulink中搭建三级主电路、设计协同控制器(含电网定向控制、功率前馈和虚拟惯性控制)的全过程,并通过负载突变测试验证了系统动态性能(直流母线电压波动<2%)。最后给出了工程部署建议,包括数字控制延时补偿、启动序列设计和代码自动生成

xiaoheshang_123的博客 203

爬虫 第二讲 urllib模块和requests模块

一、urllib模块 1.什么是urllib模块? python内置的网络请求模块 2.urllib.request模块 python2 :urllib2、urllib python3 :把urllib和urllib2合并 3.常用的方法 urllib.request.urlopen(“网址”) 作用 :向网站发起一个请求并获取响应 字节流 = response.read() 字符串 = response.read().decode(“utf-8”) urllib.request.Request(“网

yangyusir的博客 13万+

1.4 KFD 设备文件的获取与驱动握手协议

本文分析了OpenClose模块中libhsakmt与KFD内核驱动建立通信的过程。首先通过hsaKmtOpenKFD()函数打开/dev/kfd设备文件,建立用户态与内核态的通信通道。随后通过AMDKFD_IOC_GET_VERSION ioctl命令完成版本握手,确认双方的接口兼容性。KFD驱动采用Major.Minor二级版本号体系,当前主要版本为1,从1.1演进到1.19不断添加新功能。整个过程构成了用户态与内核态之间的"建连协议",是所有后续GPU操作的基础前提。

图形/计算GPU的驱动与虚拟化技术分享园地 599

20190531——关于iconfont图标库的使用

方法一 进入项目,生成在线链接,如://at.alicdn.com/t/font_1199749_deo2fjl10md.css 在vue组件的style元素中,使用@import引入在线css @import "//at.alicdn.com/t/font_1199749_deo2fjl10md.css"; template元素中使用方式如下: <i class="iconfont ic...

寄蜉蝣于天地,渺沧海之一粟。 1027

基于Simulink的无线充电系统LCC补偿网络建模与控制

本文详细介绍了基于Simulink的无线充电系统LCC补偿网络建模与控制方法。首先分析了LCC补偿网络的恒流输出、软开关实现和抗偏移能力等优势,并对比了不同补偿拓扑特性。随后分步骤讲解了Simulink建模流程,包括LCC主电路构建、关键参数设计、双闭环控制系统实现等核心环节。重点阐述了移相控制策略和软开关验证方法,提供了系统效率计算和抗偏移测试的调试技巧。最后展示了仿真结果,在耦合系数变化20%时,闭环系统仍能保持输出电压稳定在±2%波动范围内。文章还探讨了工程扩展方向,并针对常见问题给出了解决方案,为无

xiaoheshang_123的博客 539

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Recaptcha2 图像识别 API 对接说明

本文将介绍一种 Recaptcha2 图像识别2 API 对接说明,它可以通过用户输入识别的内容和 Recaptcha2验证码图像,最后返回需要点击的小图像的坐标,完成验证。接下来介绍下 Recaptcha2 图像识别 API 的对接说明。

静觅 2401

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Selenium 隐藏浏览器指纹特征的几种方式

上面罗列出了多种应对网站反爬的解决方案,大家可以根据实际需求去选择适合自己的方案这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

nhb687096的博客 2317

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

selenium环境搭建,浏览器驱动下载教程,超详细!

web自动化测试,推荐使用谷歌浏览器。如果用的是其他浏览器,就下载对应浏览器的驱动,与下载谷歌浏览器驱动的方法类似。

colala6688的博客 8359

实时查询某宝某店铺口罩余量(python爬虫)

在新型冠状肺炎病毒的影响下,我们每个人都应该佩戴口罩,口罩成了我们日常生活的必需品,今天我们带着爬虫来到某宝的某店铺,看看口罩的库存......

zbp_12138的博客 2788

【Python网络蜘蛛 · 6】:明文和密文的转换、json模块的使用、jsonpath模块的使用(附源代码)

一、明文和密文的转换 1、什么是明文密文? 例如百度搜索,将查找的网址复制下来 然后粘贴到pycharm 2、明文和密文之间的转换 导入的模块:from urllib.parse import quote, unquote quote():将明文转为密文,将字符串编码转换成%xx%xx的形式 unquote():将密文转为明文 代码演示如下: 二、json模块的使用 1、什么是json? json本质是字符串 2、josn中字符串和字典的转换 json.l....

Oh_Python的博客 5476

【python】tkinter程序打包成exe可执行文件 全流程记录(windows系统)

window系统下,用tkinter编写的GUI应用程序打包成exe执行文件,可用于其他电脑使用,

weixin_47920722的博客 1万+

python使用Tkinter和打包exe程序

python使用Tkinter和打包exe程序

zhk 2711

python-GUI图形界面之Tkinter(对话框及文件打包.exe)

目录 colorchooser颜色选择对话框 filedialog文件对话框 下拉列表及滑块 simpledialog简单内容对话框 mnessagebox通用消息对话框 ttk子模块控件 colorchooser颜色选择对话框 from tkinter import * from tkinter.colorchooser import * root = Tk() root.title() root.geometry('500x300+300+400') def choose():

北冥有鱼的博客 4160

tkinter 打包成exe可执行文件

1.安装pyinstaller。

GMH的博客 1994

Tkinter打包成EXE安装文件

Python的Tkinter打包成EXE安装文件

原名又逢乱世。不要放下学习的脚步,毕竟比天天打牌、钓鱼、打游戏更能从内在充实自己。 1344
上一篇: git clone [github]下载速度慢问题解决
下一篇: redis高级用法
o王o
博客等级 码龄13年 32粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值