Python 3.x 如何分配每个浏览器任务,使其具有自己随机生成的ID,以便我可以随时访问它?

Python 3.x 如何分配每个浏览器任务,使其具有自己随机生成的ID,以便我可以随时访问它?,python-3.x,selenium,selenium-chromedriver,Python 3.x,Selenium,Selenium Chromedriver,我想知道如何为我打开的每个浏览器窗口分配ID,这样我就可以跟踪它,也许以后可以访问它。我目前正在使用For循环来创建每个浏览器,但在此过程中,我想为每个浏览器指定一个单独的id。我想使用这个id,比如说,如果我想关闭浏览器id#5,我有一个按钮,可以只关闭该浏览器,我不必手动操作并找到需要关闭的浏览器。或者,如果我想刷新浏览器#3,我只需单击一个按钮,它就会自动访问它。我用python来做这件事,所以任何帮助都将非常感谢,因为这对我来说是一个巨大的障碍 def start():

我想知道如何为我打开的每个浏览器窗口分配ID,这样我就可以跟踪它,也许以后可以访问它。我目前正在使用For循环来创建每个浏览器,但在此过程中,我想为每个浏览器指定一个单独的id。我想使用这个id,比如说,如果我想关闭浏览器id#5,我有一个按钮,可以只关闭该浏览器,我不必手动操作并找到需要关闭的浏览器。或者,如果我想刷新浏览器#3,我只需单击一个按钮,它就会自动访问它。我用python来做这件事,所以任何帮助都将非常感谢,因为这对我来说是一个巨大的障碍

        def start():
            driver = webdriver.Chrome(chrome_path)
            ua = UserAgent()
            user_agent = ua.random
            options.add_argument(f'user-agent={user_agent}')
            options.add_argument("window-size=600,600")
            options.add_argument('--disable-extensions')
            options.add_argument('--profile-directory=Default')
            options.add_argument("--disable-plugins-discovery")
            options.add_argument('--allow-running-insecure-content')
            options.add_argument("ignore-certificate-errors-spki-list")
            options.add_experimental_option("detach", True)
            driver.set_window_size(500, 500)
            driver.set_window_position(70, 70)
            driver.get(page_address)
            browsers_opn.append(driver.get(page_address))
我还循环在UI的另一个选项卡中为每个浏览器窗口创建标签和按钮。这就是做这件事的代码

he = 50
            s = 95
            m = 235
            n = 435
            ss = 670
            hee = 45

            for task in range(0, num_tasks):
                Label(page2, text=page_name, bg='#1C2833', fg='#FDFEFE', font=("Helvetica", 10)).place(x=s, y=he)
                Label(page2, text=proxy_address, bg='#1C2833', fg='#FDFEFE', font=("Helvetica", 10)).place(x=m, y=he)
                Label(page2, text=stat, bg='#1C2833', fg='#FDFEFE', font=("Helvetica", 10)).place(x=n, y=he)
                button1 = Button(page2, text='Start', bg='#1C2833', fg='#FDFEFE', font=("Helvetica", 10),
                                 command=start).place(x=ss, y=hee)
                # button2 = Button(page2, text='Stop', bg='#1C2833', fg='#FDFEFE', font=("Helvetica", 10), command=stop).place(x=ss + 25, y=hee)
                tasks_btns.append(button1)
                # tasks_btns.append(button2)
                he = he + 30
                hee = hee + 30
我制作的每个按钮都有一个命令,当点击打开浏览器时。我现在想做的是跟踪浏览器,并将其指定给自己的id,然后我可以创建关闭、最小化甚至刷新特定浏览器窗口的按钮。类似于browserid1.close()的内容。我不知道如何在for循环中实现这一点

以下是我的全部代码供参考:

from tkinter import ttk
import tkinter as tk
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
from fake_useragent import UserAgent

root = tk.Tk()
root.title('FlashCop')
root.geometry('1000x750')
root.configure(bg='#2C3E50')
style = ttk.Style()
chrome_path = "chromedriver.exe"

style.theme_create("cool", parent="classic", settings={
    "TNotebook": {"configure": {"background": '#2C3E50', "tabmargins": [2, 5, 20, 0]}},
    "TNotebook.Tab": {
        "configure": {"padding": [5, 1], "background": '#2C3E50', "foreground": '#FDFEFE', 'font': ("Helvetica", '12')},
        "map": {"background": [("selected", '#212F3D')],
                "expand": [("selected", [1, 1, 1, 0])], }}})

page_name = ''
page_address = ''


def add_tasks():
    global page_name
    global page_address
    is_head = y_nh.get().lower()
    y_proxy = y_n.get().lower()
    tasks_btns = []
    browsers_opn = []

    if y_proxy == 'no' or y_proxy == 'n':
        proxy_address = 'N/A'

        def start():
            driver = webdriver.Chrome(chrome_path)
            ua = UserAgent()
            user_agent = ua.random
            options.add_argument(f'user-agent={user_agent}')
            options.add_argument("window-size=600,600")
            options.add_argument('--disable-extensions')
            options.add_argument('--profile-directory=Default')
            options.add_argument("--disable-plugins-discovery")
            options.add_argument('--allow-running-insecure-content')
            options.add_argument("ignore-certificate-errors-spki-list")
            options.add_experimental_option("detach", True)
            driver.set_window_size(500, 500)
            driver.set_window_position(70, 70)
            driver.get(page_address)
            browsers_opn.append(driver.get(page_address))

        if is_head == 'yes' or is_head == 'y':
            print("do headless mode")
        else:
            options = Options()
            stat = 'IDLE'
            site_page = site.get()
            if site_page == 'ys' or site_page == 'yeezysupply':
                page_name = 'YeezySupply'
                page_address = 'https://yeezysupply.com/'
            elif site_page == 'adidas':
                page_name = 'Adidas'
                page_address = 'https://www.adidas.com/yeezy'
            num_tasks = int(num.get())
            he = 50
            s = 95
            m = 235
            n = 435
            ss = 670
            hee = 45

            for task in range(0, num_tasks):
                Label(page2, text=page_name, bg='#1C2833', fg='#FDFEFE', font=("Helvetica", 10)).place(x=s, y=he)
                Label(page2, text=proxy_address, bg='#1C2833', fg='#FDFEFE', font=("Helvetica", 10)).place(x=m, y=he)
                Label(page2, text=stat, bg='#1C2833', fg='#FDFEFE', font=("Helvetica", 10)).place(x=n, y=he)
                button1 = Button(page2, text='Start', bg='#1C2833', fg='#FDFEFE', font=("Helvetica", 10),
                                 command=start).place(x=ss, y=hee)
                # button2 = Button(page2, text='Stop', bg='#1C2833', fg='#FDFEFE', font=("Helvetica", 10), command=stop).place(x=ss + 25, y=hee)
                tasks_btns.append(button1)
                # tasks_btns.append(button2)
                he = he + 30
                hee = hee + 30

                def startall():
                    driver = None
                    ua = None
                    for start_tasks in range(0, num_tasks):
                        driver = webdriver.Chrome(chrome_path)
                        ua = UserAgent()
                        user_agent = ua.random
                        driver.set_window_size(350, 350)
                        options.add_argument(f'user-agent={user_agent}')
                        options.add_argument("--window-size=600,600")
                        options.add_argument('--disable-extensions')
                        options.add_argument('--profile-directory=Default')
                        options.add_argument("--disable-plugins-discovery")
                        options.add_argument('--allow-running-insecure-content')
                        options.add_argument("ignore-certificate-errors-spki-list")
                        options.add_experimental_option("detach", True)
                        driver.set_window_position(70, 70)
                        driver.get(page_address)

                start_all = Button(page2, text='Start All', bg='#1C2833', fg='#FDFEFE', font=("Helvetica", 14),
                                   command=startall)
                start_all.place(x=900, y=5)


firstclick = True


def on_entry_click(event):
    global firstclick
    if firstclick:
        firstclick = False
        site.delete(0, 'end')


def saveproxy():
    proxy_list = prox.get("1.0", 'end-1c')
    proxy_file = open('proxies.txt', 'w')
    proxy_file.write(proxy_list)
    proxy_file.close()


style.theme_use("cool")
style.configure('body.TFrame', background='#1C2833')
rows = 0
while rows < 50:
    root.rowconfigure(rows, weight=1)
    root.columnconfigure(rows, weight=1)
    rows += 1

pro_file = open('proxies.txt', 'r')
data = pro_file.read()

nb = ttk.Notebook(root)
nb.grid(row=1, column=0, columnspan=50, rowspan=49, sticky='NESW')

page1 = ttk.Frame(nb, style='body.TFrame')
nb.add(page1, text='Create Tasks')

a = Label(page1, text="Site", bg='#1C2833', fg='#FDFEFE', font=("Helvetica", 14))
a.place(x=8, y=25)
site = Entry(page1, width=20, bg='#212F3D', fg='#FDFEFE')
site.insert(0, 'YeezySupply/Adidas')
site.bind('<FocusIn>', on_entry_click)
site.place(x=10, y=55)

h = Label(page1, text="Tasks:", bg='#1C2833', fg='#FDFEFE', font=("Helvetica", 14))
h.place(x=8, y=135)
num = Entry(page1, width=5, bg='#212F3D', fg='#FDFEFE')
num.place(x=75, y=140)

yes_no = Label(page1, text="Use Proxys?", bg='#1C2833', fg='#FDFEFE', font=("Helvetica", 14))
yes_no.place(x=8, y=220)
y_n = Entry(page1, width=5, bg='#212F3D', fg='#FDFEFE')
y_n.place(x=10, y=250)

headless = Label(page1, text="Headless Mode?", bg='#1C2833', fg='#FDFEFE', font=("Helvetica", 14))
headless.place(x=8, y=330)
y_nh = Entry(page1, width=5, bg='#212F3D', fg='#FDFEFE')
y_nh.place(x=10, y=360)

save = Button(page1, text="Create tasks", bg='#1B2631', fg='#FDFEFE', command=add_tasks)
save.place(x=10, y=650)

page2 = ttk.Frame(nb, style='body.TFrame')
nb.add(page2, text='Tasks')

tasks_id = Label(page2, text='ID', bg='#1C2833', fg='#FDFEFE', font=("Helvetica", 14))
tasks_id.place(x=25, y=5)

tasks_stat = Label(page2, text='Page', bg='#1C2833', fg='#FDFEFE', font=("Helvetica", 14))
tasks_stat.place(x=95, y=5)

proxy_t = Label(page2, text='Proxy', bg='#1C2833', fg='#FDFEFE', font=("Helvetica", 14))
proxy_t.place(x=225, y=5)

status_t = Label(page2, text='Status', bg='#1C2833', fg='#FDFEFE', font=("Helvetica", 14))
status_t.place(x=425, y=5)

browser_open = Label(page2, text='Monitoring Browser', bg='#1C2833', fg='#FDFEFE', font=("Helvetica", 14))
browser_open.place(x=655, y=5)

page3 = ttk.Frame(nb, style='body.TFrame')
nb.add(page3, text='Proxys')

prox = Text(page3, width=50, height=40, bg='#1C2833', fg='#FDFEFE')
prox.place(x=15, y=15)
prox.insert(END, data)
save_prox = Button(page3, text="Save Proxy", bg='#1B2631', fg='#FDFEFE', command=saveproxy)
save_prox.place(x=15, y=675)

page4 = ttk.Frame(nb, style='body.TFrame')
nb.add(page4, text='Settings')

root.mainloop()
从tkinter导入ttk
将tkinter作为tk导入
从selenium.webdriver.chrome.options导入选项
从selenium导入webdriver
从fake_useragent导入useragent
root=tk.tk()
root.title('FlashCop')
根几何体('1000x750')
root.configure(bg='#2C3E50')
style=ttk.style()
chrome\u path=“chromedriver.exe”
样式。主题\u创建(“酷”,parent=“classic”,设置={
“TNotebook”:{“configure”:{“background”:#2C3E50',“tabmargins”:[2,5,20,0]},
“TNotebook.Tab”:{
“configure”:{“padding”:[5,1],“background”:“#2C3E50”,“front”:“#FDFEFE”,“font”:(“Helvetica”,“12”),
“地图”:{“背景”:[(“选定的”,“#212F3D”)],
“展开”:[(“选定的”,[1,1,1,0]),})
页面名称=“”
第页地址=“”
def add_tasks():
全局页面名称
全局页面地址
is_head=y_nh.get().lower()
y_proxy=y_n.get().lower()
任务\u btns=[]
浏览器\u opn=[]
如果y_proxy=='no'或y_proxy=='n':
代理服务器地址='N/A'
def start():
driver=webdriver.Chrome(Chrome\u路径)
ua=UserAgent()
用户\代理=ua.random
options.add_参数(f'user-agent={user_-agent}')
选项。添加参数(“窗口大小=600600”)
options.add_参数('--disable extensions')
options.add_参数('--profile directory=Default')
options.add_参数(“--disable plugins discovery”)
options.add_参数(“--允许运行不安全的内容”)
选项。添加参数(“忽略证书错误spki列表”)
选项。添加实验选项(“分离”,真)
驱动程序。设置窗口大小(500500)
驾驶员。设置车窗位置(70,70)
获取驱动程序(第页地址)
浏览器\u opn.append(driver.get(page\u address))
如果是“是”或是“y”:
打印(“无头模式”)
其他:
选项=选项()
stat='IDLE'
site\u page=site.get()
如果站点页面=='ys'或站点页面=='yeezysupply':
页面名称='YeezySupply'
第页地址:https://yeezysupply.com/'
elif site_page==“阿迪达斯”:
页面名称='阿迪达斯'
第页地址:https://www.adidas.com/yeezy'
num_tasks=int(num.get())
他=50
s=95
m=235
n=435
ss=670
hee=45
对于范围内的任务(0,num_任务):
标签(第2页,文本=页面名称,背景='#1C2833',前景='#FDFEFE',字体=(“Helvetica”,10))。位置(x=s,y=he)
标签(第2页,文本=代理地址,背景='#1C2833',前景='#FDFEFE',字体=(“Helvetica”,10))。位置(x=m,y=he)
标签(第2页,text=stat,bg='#1C2833',fg='#FDFEFE',font=(“Helvetica”,10))。位置(x=n,y=he)
button1=按钮(第2页,文本='Start',背景='1C2833',前景='FDFEFE',字体=(“Helvetica”,10),
命令=开始)。放置(x=ss,y=hee)
#button2=按钮(第2页,text='Stop',bg='1C2833',fg='FDFEFE',font=(“Helvetica”,10),command=Stop)。放置(x=ss+25,y=hee)
任务附加(按钮1)
#任务附加(按钮2)
他=他+30
hee=hee+30
def startall():
驱动程序=无
ua=无
对于范围(0,num_任务)内的开始_任务:
driver=webdriver.Chrome(Chrome\u路径)
ua=UserAgent()
用户\代理=ua.random
驱动程序。设置窗口大小(350350)
options.add_参数(f'user-agent={user_-agent}')
options.add_参数(“--windowsize=600600”)
options.add_参数('--disable extensions')
options.add_参数('--profile directory=Default')
options.add_参数(“--disable plugins discovery”)
options.add_参数(“--允许运行不安全的内容”)
选项。添加参数(“忽略证书错误spki列表”)
选项。添加实验选项(“分离”,真)
驾驶员。设置车窗位置(70,70)
获取驱动程序(第页地址)
“全部启动”按钮(第2页,文本为“全部启动”,背景为“1C2833”,前景为“FDFEFE”,字体为(“Helvetica”,14),
命令=startall)
全部开始位置(x=900,y=5)
firstclick=True
进入时的def单击(事件):
全局首次单击