如下代码在vsc中正常运行,用pyinstaller编译.exe后,报错

求救如下代码在vsc中正常运行,用pyinstaller编译.exe后,报错:
https://www.wireking.com/product.aspx?ParentId=4
20
src=/Upload/2020系列图/五金/中英系列图一家居收纳车系列rollingcart01-11325285039.jpg
https://www.wireking.com/Upload/2020系列图/五金/中英系列图一家居收纳车系列rollingcart01-11325285039.jpg
Exception in Tkinter callback
Traceback (most recent call last):
File "tkinter_init_.py", line 1883, in call
File "get_html.py", line 80, in ok
File "get_html.py", line 206, in get_html_img
FileNotFoundError: [Errno 2] No such file or directory: './down_jpg/0.jpg'
以上为报错

import requests, bs4,sys
import tkinter as win
from tkinter import messagebox


class win_main(win.Tk):  # 主窗体
    def __init__(self):
        super().__init__()
        self.title('获取网页图片src=')
        # self.config(background="green")
        # self.url_m1 = win.StringVar()  
        self.url_c1 = win.StringVar()  # 初始化变量
        self.class_name1 = win.StringVar()
        self.label_nr = win.StringVar()

        self.resizable(width=False, height=False)
        # self['background'] = 'white'
        screenheight = self.winfo_screenheight()
        screenwidth = self.winfo_screenwidth()
        win_width = 800
        win_height = 450
        self.geometry(
            '%dx%d+%d+%d' % (win_width, win_height, (screenwidth-800) / 2, (screenheight - win_height) / 2))
        # self.protocol('WM_DELETE_WINDOW', self.cancel)
        """self.overrideredirect(1)  # 隐藏标题栏"""
        """self.attributes('-toolwindow', True)  # 隐藏标题栏最大化与最小化,只保留关闭按钮"""
        self.setup_UI()

    def setup_UI(self):    # 录入窗体函数

        main = win.Frame(self,bg="blue",width=300,height=450)
        main.pack(anchor=win.NE, side=win.RIGHT)

        # 第一行
        row1 = win.Frame(main, bg='white')
        row1.pack(padx=2, pady=10)
        win.Label(row1, text="下载网址:", font=("微软雅黑", 12, 'bold'), fg='white', bg='navy').pack(side=win.RIGHT)
        win.Entry(row1, textvariable=self.url_c1, width=34, bd=2).pack(side=win.RIGHT)
        self.url_c1.set("")

        # 第二行
        row2 = win.Frame(main, bg='blue')
        row2.pack(padx=2, pady=5)
        win.Label(row2, text="查询元素:", font=("微软雅黑", 12, 'bold'), fg='white', bg='navy').pack(side=win.RIGHT)
        win.Entry(row2, textvariable=self.class_name1, width=34,bd=2).pack(side=win.RIGHT)


        # 第三行
        row3 = win.Frame(main, bg='blue')
        row3.pack(padx=65, pady=15)
        win.Button(row3, text='重置', width=9, command=self.cancel,
                   font=("微软雅黑", 9, 'bold'), fg='white',bg='navy', borderwidth=1,
                   highlightbackground="navy").pack(side=win.RIGHT, padx=5)
        win.Button(row3, text='确定', width=9, command=self.ok,
                   font=("微软雅黑", 9, 'bold'), fg='white',bg='navy', borderwidth=1,
                   highlightbackground="navy").pack(side=win.RIGHT, padx=5)
        
        # 第四行
        row4 = win.Frame(main, bg='blue')
        row4.pack(padx=2, pady=15)
        win.Label(row4, text="查询元素:img或img[class='类名'", font=("微软雅黑", 12, 'bold'), fg='white', bg='navy').pack(side=win.RIGHT)

         # 左侧显示窗口
        left1_js = win.Frame(self,bg="white",width=490,height=450)
        left1_js.pack(side=win.RIGHT)
        self.text_label = win.Label(left1_js,bg="white",textvariable=self.label_nr).pack()
        self.label_nr.set("下载记录内容")

        self.text_js = win.Text(left1_js, width=70, height=25, bg='#FFFACD', font=("微软雅黑", 9), pady=0, padx=1)
        self.text_js.pack()

    def ok(self):
        de = ""
        if str(self.url_c1.get()) == "" or str(self.class_name1.get()) == "":
            win.messagebox.showinfo('提示', '请输入下载网址与关键字')
            self.focus()
            return
        self.text_js.delete(1.0,win.END)
        self.label_nr.set("正在下载。。。。。。。。")
        de = self.get_html_img()
        self.label_nr.set(de)
        win.messagebox.showinfo('提示', de) 

    def cancel(self):
        """self.userinfo = None  # 空值"""
        self.url_c1.set("")
        self.class_name1.set("")
        self.text_js.delete(1.0,win.END)
        self.label_nr.set("下载记录内容")

    def get_html_img(self):

        # 获取网址创建对象,检查网址是否正确。
        url_c1_w = '' # 下载子网址
        htm_str = "" # 下载图片网址
        url_www = '' # 域名
        down = '' # 下载绝对地址
        exp = ""

        '''
        user_agents = [
                'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11',
                'Opera/9.25 (Windows NT 5.1; U; en)',
                'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)',
                'Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Kubuntu)',
                'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.12) Gecko/20070731 Ubuntu/dapper-security Firefox/1.5.0.12',
                'Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/1.2.9',
                "Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.7 (KHTML, like Gecko) Ubuntu/11.04 Chromium/16.0.912.77 Chrome/16.0.912.77 Safari/535.7",
                "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0) Gecko/20100101 Firefox/10.0 ",
                ] 
        '''
        headers={
        'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36 LBBROWSER'
        }
        try:
            url_c1_w = self.url_c1.get().strip().strip('\n')
            if url_c1_w[-1] == '/':
                url_c1_w = url_c1_w.strip('/')
            print(url_c1_w)

            res = requests.get(url_c1_w,headers=headers)
            # res.encoding = 'gbk'  # 转码,避免乱码
            res.raise_for_status()  # 检查网址是否下载成功
        except Exception as exc:
            return '网页下载失败1'+str(exc)
            # sys.exit()
            quit()

        html = res.text # 下载网址文件
        noStarchSoup = bs4.BeautifulSoup(html,features='lxml') # 网址传递给解析对象
        # sprint(type(noStarchSoup))
      
        elems = noStarchSoup.select(self.class_name1.get().strip().strip('\n'))  # 寻找网页元素存储在列表。
        # print(elems)

        print(len(elems))

        if 'com' in url_c1_w:
            url_www = url_c1_w.split('com')[0]+'com'
        if 'cn' in url_c1_w:
            url_www = url_c1_w.split('cn')[0]+'cn'
        if 'xyz' in url_c1_w:
            url_www = url_c1_w.split('xyz')[0]+'xyz'
        if 'org' in url_c1_w:
            url_www = url_c1_w.split('org')[0]+'org'
        if 'net' in url_c1_w:
            url_www = url_c1_w.split('net')[0]+'net'
        if 'cc' in url_c1_w:
            url_www = url_c1_w.split('cc')[0]+'cc'
        if 'vip' in url_c1_w:
            url_www = url_c1_w.split('vip')[0]+'vip'
        if 'online' in url_c1_w:
            url_www = url_c1_w.split('online')[0]+'online'
        if 'tech' in url_c1_w:
            url_www = url_c1_w.split('tech')[0]+'tech'
        # print(url_www)

        for i in range(len(elems)):
            try:
                # print(elems[0].getText())  # 打印索引关键字之间元素
                # print(elems[0])    # 打印包含元素的HTML代码
                htm_str = elems[i].attrs['src']
                print("src="+htm_str)
            except IndexError as exc:
                return '列表无索引'+str(exc)
            if '.' in htm_str[-7:]:
                # 判断下载链接地址是否绝对地址
                if 'https' in htm_str or 'http' in htm_str:
                    down = htm_str
                elif '//' in htm_str:
                    if url_www[:7] == 'https:':
                        down = 'https:'+htm_str
                    if url_www[:6] == 'http:':
                        down = 'http:'+htm_str
                elif htm_str[0] == '/':
                    down = url_www+htm_str
                else:
                    down = url_www+'/'+htm_str
                print(down)
                # self.text_js.insert('insert', down+'\n') # 插入文本显示框
                # 下载html图片
                try:
                    res1 = requests.get(down,headers=headers)
                    # res.encoding = 'gbk'  # 转码,避免乱码
                    res1.raise_for_status()  # 检查网址是否下载成功
                    # print(url_m + htm_str)
                except Exception as exc:
                    return '图片下载失败2'+str(exc)
                    # sys.exit()
                    quit()
                exp = htm_str.split('.')[-1]
                if 'png' in exp:
                    exp = 'png'
                elif 'jpg' in exp:
                    exp = 'jpg'
                elif 'gif' in exp:
                    exp = 'gif'
                elif 'jpeg' in exp:
                    exp = 'jpeg'
                elif 'bmp' in exp:
                    exp = 'bmp'
                else:
                    exp = 'jpg'
                

                htm_file = open('./down_jpg/'+str(i)+'.'+exp,'wb') # 打开二进制写入模式。
                for chunk1 in res1.iter_content(100000):
                    htm_file.write(chunk1)
                htm_file.close()
                
        return '已全部下载完成'    
        
if __name__ == "__main__":
    app = win_main()
    app.mainloop()      

图片和exe文件不在同一位置,把down_jpg文件夹移到exe的目录处即可

html_file=open(......)那行文件路径写的是相对路径,不打包运行没问题,打包后这样写不行的,写成绝对路径看看。采纳哦!

1、程序打包为.exe文件后,所需的各种图片或者目录资源建议放在同打包文件同一目录下,否则大概率会会出现文件无法找到的报错(如果写的是相对路径的话,写绝对路径就不会有这些问题)

不知道你这个问题是否已经解决, 如果还没有解决的话:

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