Python 拍摄selenium屏幕截图并在tkinter gui上显示

Python 拍摄selenium屏幕截图并在tkinter gui上显示,python,selenium,tkinter,selenium-chromedriver,screenshot,Python,Selenium,Tkinter,Selenium Chromedriver,Screenshot,我试图截取selenium页面的屏幕快照,并将其显示在tkinter gui的画布上,但由于某些原因,我出现了错误: TypeError: __str__ returned non-string (type bytes) 这是代码,感谢您的帮助 from tkinter import * import tkinter as tk import time from selenium import webdriver root = tk.Tk() root.geometry('700x700')

我试图截取selenium页面的屏幕快照,并将其显示在tkinter gui的画布上,但由于某些原因,我出现了错误:

TypeError: __str__ returned non-string (type bytes)
这是代码,感谢您的帮助

from tkinter import *
import tkinter as tk
import time
from selenium import webdriver

root = tk.Tk()
root.geometry('700x700')


def picture():
    browser = webdriver.Chrome('C:\\Users\\Downloads\\chromedriver_win324\\chromedriver.exe')
    browser.get('https://google.co.uk')
    fil = browser.get_screenshot_as_png()
    img = PhotoImage(fil)
    canvas = Canvas(root, width=300,height=300)
    canvas.place(x=12.5,y=450)
    canvas.create_image(20,20, image=img)

Button(root, text='Start', command=lambda: picture()).pack()
root.mainloop()

问题是您试图将数据用作
PhotoImage
的第一个位置参数,但第一个位置参数用于名称,而不是图像本身

您需要提供数据作为
data
属性的值:

img = PhotoImage(data=fil)

尝试
PhotoImage(data=fil)
。我不知道它是否有效,但第一个位置参数是名称属性,而不是图像数据。在将数据传递给
PhotoImage
@BryanOakley之前,您可能需要对数据进行base64编码:它与
data
参数一起工作,因为
浏览器返回的图像是字节格式的。获取屏幕截图\u作为png()。没有对图像进行编码就可以正常工作。如何调整这种类型的图像大小?@coderoftheday:您可以从搜索此网站开始,了解如何使用tkinter调整图像大小。我在发表评论之前就做过,但不幸的是,没有人能工作。我得到了一个错误
AttributeError:“PhotoImage”对象没有属性“resize”
,而且由于屏幕截图不是一张普通的图片,一些“答案”并不存在
PhotoImage
的存在是一个标准的
PhotoImage
——你可以用一张图片做的任何事情都可以用另一张图片做。