Python webbrowser模块结合列表使用时无法打开链接的问题求助
Python webbrowser模块结合列表使用时无法打开链接的问题求助
嘿,我来帮你解决这个问题~其实不是webbrowser模块不支持列表,是你在处理URL的时候犯了个小错误,咱们一步步理清楚:
核心问题所在
你在fetch()函数里写了url = [lines[0]],这会把单个URL字符串包装成一个列表,之后用str(url)转换的话,得到的会是类似['https://your-link.com']这种带方括号和引号的格式,浏览器根本识别不了这种格式的地址,自然打不开啦。
还有这些可以优化的地方
除了上面的核心问题,你的代码还有几个可以改进的点,能让它更高效更规范:
- 没必要在每次循环里都注册Chrome浏览器,注册一次就够了;
- 使用
with语句打开文件时,它会自动帮你关闭文件,不需要再手动调用f.close(); - 用
while循环遍历列表有点繁琐,直接用for循环遍历lines会更简洁直观。
修正后的完整代码
from tkinter import * from customtkinter import CTk import webbrowser # 提前注册Chrome浏览器,只需要做一次 chrome_path = r"C:\Program Files\Google\Chrome\Application\chrome.exe" webbrowser.register('chrome', None, webbrowser.BackgroundBrowser(chrome_path)) def submit(): file = open("links.txt","a") file.write(entry.get()+"\n") file.close() def fetch(): with open("links.txt") as f: lines = f.read().splitlines() # 直接遍历每一行URL for url in lines: # 直接用字符串类型的url,无需转列表再转字符串 webbrowser.get('chrome').open_new_tab(url) app = CTk() app.geometry("217x115") app.iconbitmap() app.title("Linkment") label = Label(text="Enter Links Below",font=("Sans Serif",15,"bold"),bg="#242424",fg="White") label.pack() entry = Entry(bg="#3b3b3b",font=("Sans Serif",11),fg="White") entry.pack() submit_btn = Button(text="Submit",font=("Sans Serif",11),bg="#3b3b3b",fg="White",command=submit) submit_btn.pack() fetch_btn = Button(text="Fetch Links",font=("Sans Serif",11),bg="#3b3b3b",fg="White",command=fetch) fetch_btn.pack() app.mainloop()
修正点说明
- 把Chrome浏览器的注册代码移到了全局区域,避免每次调用
fetch()都重复注册; - 把
while循环改成了for url in lines,直接遍历每个URL字符串; - 去掉了
url = [lines[0]]这个错误的列表包装,直接使用遍历到的url字符串; - 删除了多余的
f.close(); - 还把按钮变量名从
submit、fetch改成了submit_btn、fetch_btn,避免和函数名重名(虽然当前代码没出问题,但这是个好的编程习惯)。
这样修改之后,点击“Fetch Links”按钮应该就能正常在Chrome的新标签页里打开每个链接啦~
备注:内容来源于stack exchange,提问作者Loquacious Lizard Lover




