【问题标题】:Tkinter selenium.common.exceptions.InvalidArgumentException: Message: invalid argument [closed]Tkinter selenium.common.exceptions.InvalidArgumentException:消息:无效参数[关闭]
【发布时间】:2021-05-17 22:03:08
【问题描述】:

所以我正在编写一个简单的 selenium 脚本来在网络上执行一些操作。该脚本运行良好,出于无聊,我决定让它也有一个 GUI。我不确定我在这里做错了什么。它启动 chrome web 驱动程序,但 gui 永远不会运行。

from tkinter import *
from selenium import webdriver

browser = webdriver.Chrome()

root = Tk()


root.geometry('285x179')
root.configure(background='#F0F8FF')
root.title('MC Vote')


pageField=Entry(root)
pageField.place(x=74, y=26)


voteField=Entry(root)
voteField.place(x=75, y=75)


page=pageField.get()
upvoteCSS=voteField.get()
accounts = ['1','2','3','4']

browser.get(page)
browser.maximize_window()


def btnClickFunction():
    for i in accounts:
        upvoteButton = browser.find_element_by_css_selector(upvoteCSS)
        upvoteButton.click()
        browser.get(page)


Button(root, text='Start bot', bg='#F0F8FF', font=('arial', 12, 'normal'), command=btnClickFunction).place(x=99,y=124)

root.mainloop()
Traceback (most recent call last):
  File "C:\Users\PycharmProjects\Training\accounts.py", line 36, in <module>
    browser.get(page)

【问题讨论】:

  • 这就是你的全部代码吗?您缺少导入和变量定义。在它尝试运行之前,您应该会遇到几个错误。
  • 错误来自 selenium ,你不能通过 browser.get(page) 它应该是 html 文件或 url 。页面中有什么
  • 我没有发布整个脚本,因为它包含私人信息。 “页面”应该是来自文本字段 gui 的输入。
  • 我们不需要整个脚本。我们需要的只是足够的可运行代码来重现问题。见minimal reproducible example。但是,问题的根源是您在创建条目小部件后大约一毫秒调用pageField.get()。用户还没有时间输入任何内容。
  • 总是将完整的错误消息(从单词“Traceback”开始)作为文本(不是截图,不是链接到外部门户)有问题(不是评论)。还有其他有用的信息。

标签: python selenium tkinter


【解决方案1】:

GUI 不像input() 那样工作。当您创建 pageField() 时,它不会等待您的文本。它只通知tkinter 它必须显示什么小部件。当您运行mainloop() 时,它会创建窗口和显示小部件。因此,即使在窗口中显示pageField 之前,您也尝试从pageField 中获取价值。在将文本放入pageField 并按下按钮后,您必须使用Button 运行从pageField 获取值的函数。

小例子

import tkinter as tk  # PEP8: `import *` is not preferred
from selenium import webdriver

# --- functions --- (PEP8: lower_case_names)

def btn_click_function():
    page = pageField.get()
    upvote_css = vote_field.get()
    
    browser.get(page)
    browser.maximize_window()
    
    for _ in range(4):
        upvote_button = browser.find_element_by_css_selector(upvote_css)
        upvote_button.click()
        browser.get(page)

# --- main --- (PEP8: lower_case_names)

browser = webdriver.Chrome()

root = tk.Tk()

page_field = tk.Entry(root)
page_field.pack()

vote_field = tk.Entry(root)
vote_field.pack()

button = tk.Button(root, text='Start bot', command=btn_click_function)
button.pack()

root.mainloop()

PEP 8 -- Style Guide for Python Code

【讨论】:

  • 是的,有道理,这是我第一次在 Python 中使用 GUI。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-03
  • 2022-01-24
  • 1970-01-01
  • 2020-09-30
  • 2021-04-08
  • 2022-01-19
  • 2022-01-01
相关资源
最近更新 更多