Мне нужно руководство, как добавить мой код tkinter в мой скрипт webscraper, где он установит переменные, необходимые скрипту, а затем запустит его.
цель:
-user open gui
-user заполняет форму
-пользователь отправляет форму
- GUI форма заполняет переменные скрипта
-скрипт выполняет webscrape на основе gui input
GUI:
import tkinter as tk
root = tk.Tk()
root.title("Export App")
root.geometry("280x300")
# You will create two text labels namely 'username' and 'password' and and two input labels for them
tk.Label(root, text = "Username: ").grid(row = 0)
tk.Entry(root).grid(row = 0, column = 1)
tk.Label(root, text = "Password: ").grid(row = 1)
tk.Entry(root).grid(row = 1, column = 1)
clickedentityName = tk.StringVar()
clickedentityName.set("Shipment")
tk.Label(root, text = "entityName:").grid(row = 2)
drop = tk.OptionMenu(root, clickedentityName, "OrderHeader", "OrderLine", "Shipment", "ShipmentLine", "Item", "StockUnit").grid(row = 2, column = 1)
tk.Label(root, text = "currentView:").grid(row = 3)
tk.Entry(root).grid(row = 3, column = 1)
tk.Label(root, text = "pageSize:").grid(row = 4)
tk.Entry(root).grid(row = 4, column = 1)
tk.Label(root, text = "pageRange:").grid(row = 5)
tk.Entry(root).grid(row = 5, column = 1)
myButton = tk.Button(root, text="Export Data", bg= "#0088cc").grid(rowspan = 6, columnspan = 2)
root.mainloop()
сценарий webscraper:
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
import pandas as pd
from datetime import datetime
import time
import random
import string
start_time = time.time() # capture apps start time
# set login credentials
wmsusername = "xxx"
wmspassword = "xxx"
# launch WMS
loginurl = "https://inserturlhere.com/solution/login.htm"
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.set_window_size(1000, 600)
driver.get(loginurl)
#Login start
username = driver.find_element_by_id("username")
username.clear()
username.send_keys(wmsusername)
password = driver.find_element_by_id("password")
password.clear()
password.send_keys(wmspassword)
driver.find_element_by_id("loginButton").click()
#login end
# set variables for url to pull from
wmsLoggedIn = "https://inserturlhere.com/solution/entitylist.htm?" #root logged in page
pageSize = 500 # how many results per page
pageNo = 0 # starting page; starts at 0
entityName = "StockUnit" # entity of the view
currentView = 30946 # view id to pull data from
pageRange = 2 # total pages returned on wms view
# set variables for filename function
now = datetime.now()
randomstring = ''.join([random.choice(string.ascii_letters
+ string.digits) for n in range(6)])
def generate_filename():
return str(entityName) + "-" + str(now.strftime("%m%d%Y-%H%M%S")) + "-" + str(randomstring) + ".csv"
modified_dfs = []
for pageNo in range(pageRange + int(1)):
urlSpecifics = "entityName={entityName}&pageNo={pageNo}&pageSize={pageSize}¤tViewId={currentView}".format(entityName=entityName, pageNo=pageNo, pageSize=pageSize, currentView=currentView)
# open entity page
driver.get(wmsLoggedIn+urlSpecifics)
html = driver.page_source
for df in pd.read_html(html, attrs={"class":"roundedTable"}, header=5):
df.dropna(how="all", axis="columns", inplace=True)
df.drop({"No"}, axis="columns", inplace=True)
df.dropna(how='all', axis=0, inplace=True)
modified_dfs.append(df)
pd.concat(modified_dfs).to_csv(generate_filename(), index=False)
elapsed_time = time.time() - start_time # capture total time it took for the process to run
print("Process Success and saved the file as: " + generate_filename() + " It took " + time.strftime("%H:%M:%S", time.gmtime(elapsed_time)) + " to process!")
driver.quit()