首页 > 解决方案 > 如何为每个浏览器任务分配随机生成的 ID,以便我可以随时访问它?

问题描述

我想知道如何将 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()

标签: python-3.xseleniumselenium-chromedriver

解决方案


推荐阅读