You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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()
  • 还把按钮变量名从submitfetch改成了submit_btnfetch_btn,避免和函数名重名(虽然当前代码没出问题,但这是个好的编程习惯)。

这样修改之后,点击“Fetch Links”按钮应该就能正常在Chrome的新标签页里打开每个链接啦~

备注:内容来源于stack exchange,提问作者Loquacious Lizard Lover

火山引擎 最新活动