python-3.x - 如何为每个浏览器任务分配随机生成的 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()