используя tkinter GUI для установки переменных в скрипте webscraper, затем запустите его - PullRequest
0 голосов
/ 12 апреля 2020

Мне нужно руководство, как добавить мой код 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}&currentViewId={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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...