首页 > 解决方案 > 使用 tktinter 输入获取字符串 URL 和下载文件夹

问题描述

我制作了一个脚本,该脚本获取一个包含整个 mp3 专辑的页面并下载每首歌曲。如果我在代码中插入所需的数据,这就像一个魅力,但我想通过 GUI 插入它。但它不会运行。结果出现以下错误:

  File "C:\Users\Luan\AppData\Local\Programs\Python\Python38-32\lib\copy.py", line 230, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "C:\Users\Luan\AppData\Local\Programs\Python\Python38-32\lib\copy.py", line 161, in deepcopy
    rv = reductor(4)
TypeError: cannot pickle '_tkinter.tkapp' object

这是整个代码,任何帮助将不胜感激。谢谢。

import tkinter as tk

def show_entry_fields():
    print("First Name: %s\nLast Name: %s" % (givenurl.get(), givenplace.get()))

master = tk.Tk()
tk.Label(master, 
         text="Url do Album").grid(row=0)
tk.Label(master, 
         text="Local para baixar").grid(row=1)

givenurl = tk.Entry(master)
givenplace = tk.Entry(master)

givenurl.grid(row=0, column=1)
givenplace.grid(row=1, column=1)

tk.Button(master, 
          text='Quit', 
          command=master.quit).grid(row=3, 
                                    column=0, 
                                    sticky=tk.W, 
                                    pady=4)
tk.Button(master, 
          text='Show', command=show_entry_fields).grid(row=3, 
                                                       column=1, 
                                                       sticky=tk.W, 
                                                       pady=4)

tk.mainloop()

# Ferramenta de Robot do Navegador
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.keys import Keys
# need the below imports to work with Explicit wait
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

## DEFINE LUGAR ONDE OS ARQUIVOS SERAO SALVOS
chromeOptions = webdriver.ChromeOptions()
prefs = {"download.default_directory" : givenplace}
chromeOptions.add_experimental_option("prefs",prefs)

browser = webdriver.Chrome('C:/Windows/chromedriver.exe', chrome_options=chromeOptions)

browser.get(givenurl)
songs = browser.find_elements_by_class_name('player')

## CODIGO QUE PREVINIRA ERRO NA CONSTATE TROCA DE DOMINIO DO SITE
#site = browser.current_url
#print (site)

## PEGA AS INSFORMACOES DENTRO DO SITE, ARMAZENA DADOS DO ARTISTA E DA MUSICA, FAZ O DOWNLOAD
for i in songs:
    print (i.get_attribute("data-title"))
    print (i.get_attribute("data-mp3url"))
    info = i.get_attribute("data-info")
    down = i.get_attribute("data-mp3url")
    browser.find_element_by_tag_name('body').send_keys(Keys.COMMAND + 't')
    browser.get("https://red3mp3.me" +down)

标签: pythonstringseleniumgoogle-chrometkinter

解决方案


您收到的错误是因为该条目是一个对象,您无法获取数据,因为您获取错误。尝试检索对象中的数据,它很可能是一本字典!

givenurl = tk.Entry(master)
givenplace = tk.Entry(master)

如果你想使用 givenurl,试试这个

url_var = givenurl.get()
browser.get(url_var)

推荐阅读