首页 > 解决方案 > 蟒蛇硒| 要求输入,输出到网站?

问题描述

这是我第一次在这里发帖,如果我犯了任何错误,很抱歉..无论如何:

我有这个脚本可以在我学校的网站上输入我的登录信息,并勾选基本上意味着我感觉良好(并且我没有 COVID)的东西。

我想把这个送给我在学校的朋友,但我不想给他们代码,因为我害怕他们会碰它并弄乱一些东西......所以我想做一些像这样简单的东西: 我制作的简单 GUI使用 tkinter

问题是,我不知道如何将从那里得到的输入存储到一个变量中,以便稍后在脚本中调用以在学校网站上打印出来。这是我的代码:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
import time

import tkinter as tk

def show_entry_fields():
    print("Username: %s\nPassword: %s" % (e1.get(), e2.get()))

master = tk.Tk()
tk.Label(master,
         text="Username").grid(row=0)
tk.Label(master,
         text="Password").grid(row=1)

e1 = tk.Entry(master)
e2 = tk.Entry(master)

e1.grid(row=0, column=1)
e2.grid(row=1, column=1)

username = e1.get()
password = e2.get()

tk.Button(master, 
          text='Go', 
          command=master.quit).grid(row=3, 
                                    column=0, 
                                    sticky=tk.W, 
                                    pady=4)


tk.mainloop()


#opens the browser & website
browser = webdriver.Chrome(executable_path=r"D:\Documents\Mashov\Haxarat Briut\chromedriver.exe")
browser.maximize_window()
browser.get("blah blah blah")
time.sleep(2)

#types the school name
school = browser.find_element_by_xpath("//input[@id='mat-input-3']")
school.send_keys("blah blah bla")
school.send_keys(Keys.ENTER)
time.sleep(2)



#types username
username = browser.find_element_by_xpath("//*[@id='mat-input-0']")
username.send_keys(username)
username.send_keys(Keys.ENTER)
time.sleep(2)



#types password
password = browser.find_element_by_xpath('//*[@id="mat-input-4"]')
password.send_keys(password)
password.send_keys(Keys.ENTER)
time.sleep(2)

如果有人有任何指示或任何帮助,我将不胜感激!假期愉快!

编辑:如果有一种简单的方法来存储这些数据,这样他们就不必在每次打开程序时都输入它。这也会很有帮助(基本上只是他们第一次打开程序时询问登录详细信息,然后下次打开它时,它会自动转到网站,甚至不询问您的登录详细信息)

标签: pythonseleniumselenium-webdrivertkinterselenium-chromedriver

解决方案


使用加密是明智的。话虽如此,我冒昧地制作了一个模板,该模板可以使用自行生成的 CSV 文件来存储用户信息,从而达到您的目的。

我建议挑选我在下面写的内容,并根据您的需要自行调整。

import tkinter as tk
import csv 
import os 

class Window(tk.Frame):
    def __init__(self, root):
        tk.Frame.__init__(self, root)
        self.root = root 
        self.username = "" 
        self.password = ""

        # Some random consant file name
        self.USER_PROFILE = 'user-profile.csv' 

        # Entries 
        self.username_entry = tk.Entry(self.root)
        self.password_entry = tk.Entry(self.root)

        # Buttons
        self.go_button = tk.Button(self.root, command=self.goPressed, text='Go')
     
    def setUI(self):
        # Labels
        tk.Label(self.root, text='Username').grid(row=0, column=0)
        tk.Label(self.root, text='Password').grid(row=1, column=0)

        # Entries
        self.username_entry.grid(row=0, column=1)
        self.password_entry.grid(row=1, column=1)

        #Buttons
        self.go_button.grid(row=3, column=0, sticky=tk.W, pady=4)

    def show(self):
        self.setUI()

    def goPressed(self):
        self.updateUserProfile()
        self.root.quit()

    def updateUserProfile(self):
        self.username = self.username_entry.get()
        self.password = self.password_entry.get()
        # Create the user profile file if it doesn't exist
        if not os.path.isfile(self.USER_PROFILE):
            # Make sure user filled the entries
            if self.username and self.password:
                with open(self.USER_PROFILE, 'w', newline='') as up:
                    writer = csv.writer(up)
                    # Write the row for the user name into the file 
                    writer.writerow(['username', self.username])
                    # and password...
                    writer.writerow(['password', self.password])

        # Otherwise, a profile already exists, I would modify this to
        # change the username and password if say, a "change username or password"
        # checkbox is set. 
        else:
            # Read the user profile
            with open(self.USER_PROFILE, 'r') as up:
                reader = csv.reader(up)
                # Read user info into selenium.
                # Right here I just have it write into the entry, but
                # it should be easy for you to change that to a selenium entry.
                for line in reader:
                    if line[0] == 'username':
                        self.username = line[1]
                        self.username_entry.insert(0, self.username)
                    elif line[0] == 'password':
                        self.password = line[1]
                        self.password_entry.insert(0, self.password)
    
def main():
    root = tk.Tk()
    window = Window(root)
    window.show()
    root.mainloop()

    #opens the browser & website
    browser = webdriver.Chrome(executable_path=r"D:\Documents\Mashov\Haxarat 
    Briut\chromedriver.exe")
    browser.maximize_window()
    browser.get("blah blah blah")
    time.sleep(2)

    #types the school name
    school = browser.find_element_by_xpath("//input[@id='mat-input-3']")
    school.send_keys("blah blah bla")
    school.send_keys(Keys.ENTER)
    time.sleep(2)

    #types username
    username = browser.find_element_by_xpath("//*[@id='mat-input-0']")
    username.send_keys(window.username)
    username.send_keys(Keys.ENTER)
    time.sleep(2)

    #types password
    password = browser.find_element_by_xpath('//*[@id="mat-input-4"]')
    password.send_keys(window.password)
    password.send_keys(Keys.ENTER)
    time.sleep(2)

   if __name__ == '__main__':
      main()

推荐阅读