一段PYTHON代码,使用TK和DrissionPage,帮我看下,错误在哪里,应该怎么解决。怎么才能让程序正确的跑起来?


# GUI图像
import tkinter as tk
# 操作浏览器的的库
from DrissionPage import ChromiumPage
# ChromiumOptions类用于设置浏览器启动参数
from DrissionPage import ChromiumOptions
#全局监听热键
from pyhooked import Hook, KeyboardEvent


# 创建浏览器配置对象,指定浏览器路径
co = ChromiumOptions().set_paths(browser_path=r'C:\Program Files\Chrome109\chrome.exe')
# 创建浏览器对象
page = ChromiumPage(co)


class Script:
    def start_script():
        page.get('https://gitee.com/login')
        # 定位到账号文本框,获取文本框元素
        ele = page.ele('#user_login')
        # 输入对文本框输入账号
        ele.input('test')
        # 定位到密码文本框并输入密码
        page.ele('#user_password').input('test')
        # 点击登录按钮
        page.ele('@value=登 录').click()

    def stop_script():
        # 中断脚本执行
        page.stop()


# 创建一个窗口
window = tk.Tk()
# 设置窗口标题
window.title("自动操作浏览器")
# 设置窗口大小
window.geometry("300x100")
# 创建开始按钮
start_button = tk.Button(window, text="开始", command=start_script)
start_button.pack(side=tk.LEFT, padx=10)
# 创建停止按钮
stop_button = tk.Button(window, text="停止", command=stop_script)
stop_button.pack(side=tk.LEFT)
# 绑定快捷键
window.bind("", start_script)
window.bind("", stop_script)
# 运行GUI界面
window.mainloop()

DrissionPage的开发文档在码云里有,这部分应该没问题,是事例代码。

# --*-- utf-8 --*--

import tkinter as tk
# 操作浏览器的的库
from DrissionPage import ChromiumPage
# ChromiumOptions类用于设置浏览器启动参数
from DrissionPage import ChromiumOptions
#全局监听热键
from pyhooked import Hook, KeyboardEvent



class Script:
    def __init__ (self):
        self.page = None
    def start_script(self):
        # 创建浏览器配置对象,指定浏览器路径
        co = ChromiumOptions().set_paths(browser_path=r'C:\Program Files\Google\Chrome\Application\chrome.exe')
        # 创建浏览器对象
        self.page = ChromiumPage(co)      
        self.page.get('https://gitee.com/login')
        # 定位到账号文本框,获取文本框元素
        ele = self.page.ele('#user_login')
        # 输入对文本框输入账号
        ele.input('test')
        # 定位到密码文本框并输入密码
        self.page.ele('#user_password').input('test')
        # 点击登录按钮
        self.page.ele('@value=登 录').click()

    def stop_script(self):
        # 中断脚本执行
        self.page.stop_loading() 


sample = Script()
# 创建一个窗口
window = tk.Tk()
# 设置窗口标题
window.title("自动操作浏览器")
# 设置窗口大小
window.geometry("300x100")
# 创建开始按钮
start_button = tk.Button(window, text="开始", command=sample.start_script)
start_button.pack(side=tk.LEFT, padx=10)
# 创建停止按钮
stop_button = tk.Button(window, text="停止", command=sample.stop_script)
stop_button.pack(side=tk.LEFT)
# 绑定快捷键
window.bind("<F8>", lambda x:sample.start_script())
window.bind("<Escape>", lambda x: sample.stop_script())
# 运行GUI界面
window.mainloop()

# GUI图像
import tkinter as tk

# 操作浏览器的的库
from DrissionPage import ChromiumPage

ChromiumOptions类用于设置浏览器启动参数
from DrissionPage import ChromiumOptions
#全局监听热键
from pyhooked import Hook, KeyboardEvent

# 创建浏览器配置对象,指定浏览器路径
co = ChromiumOptions().set_paths(browser_path=r'C:\Program Files\Chrome109\chrome.exe')

# 创建浏览器对象
page = ChromiumPage(co)

def start_script():
page.get('https://gitee.com/login')
# 定位到账号文本框,获取文本框元素
ele = page.ele('#user_login')
# 输入对文本框输入账号
ele.input('test')
# 定位到密码文本框并输入密码
page.ele('#user_password').input('test')
# 点击登录按钮
page.ele('@value=登 录').click()

def stop_script():
# 中断脚本执行
page.stop()

# 创建一个窗口
window = tk.Tk()

# 设置窗口标题
window.title("自动操作浏览器")

# 设置窗口大小
window.geometry("300x100")

# 创建开始按钮
start_button = tk.Button(window, text="开始", command=start_script)
start_button.pack(side=tk.LEFT, padx=10)

# 创建停止按钮
stop_button = tk.Button(window, text="停止", command=stop_script)
stop_button.pack(side=tk.LEFT)

# 绑定快捷键
hk = Hook()
hk.handler = lambda event: start_script() if event.event_type == 'key down' and event.current_key == 'F8' else None
hk.hook()
window.bind("<Escape>", stop_script)

# 运行GUI界面
window.mainloop()
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

以下内容部分参考ChatGPT模型:


问题在于start_script和stop_script函数没有定义为类的方法,需要在函数定义时加上self参数。同时,在绑定快捷键时,需要使用lambda表达式将函数包装起来传入。

修改后的代码如下:

# GUI图像
import tkinter as tk
# 操作浏览器的的库
from DrissionPage import ChromiumPage
# ChromiumOptions类用于设置浏览器启动参数
from DrissionPage import ChromiumOptions
#全局监听热键
from pyhooked import Hook, KeyboardEvent


# 创建浏览器配置对象,指定浏览器路径
co = ChromiumOptions().set_paths(browser_path=r'C:\Program Files\Chrome109\chrome.exe')
# 创建浏览器对象
page = ChromiumPage(co)


class Script:
    def start_script(self):
        page.get('https://gitee.com/login')
        # 定位到账号文本框,获取文本框元素
        ele = page.ele('#user_login')
        # 输入对文本框输入账号
        ele.input('test')
        # 定位到密码文本框并输入密码
        page.ele('#user_password').input('test')
        # 点击登录按钮
        page.ele('@value=登 录').click()

    def stop_script(self):
        # 中断脚本执行
        page.stop()


# 创建一个窗口
window = tk.Tk()
# 设置窗口标题
window.title("自动操作浏览器")
# 设置窗口大小
window.geometry("300x100")
# 创建开始按钮
start_button = tk.Button(window, text="开始", command=Script().start_script)
start_button.pack(side=tk.LEFT, padx=10)
# 创建停止按钮
stop_button = tk.Button(window, text="停止", command=Script().stop_script)
stop_button.pack(side=tk.LEFT)
# 绑定快捷键
window.bind("<F8>", lambda event: Script().start_script())
window.bind("<Escape>", lambda event: Script().stop_script())
# 运行GUI界面
window.mainloop()

这样代码就能正常运行了。


如果我的建议对您有帮助、请点击采纳、祝您生活愉快