python selenium | запрашивает ввод, выводит его на веб-сайт?

#python #selenium #selenium-webdriver #tkinter #selenium-chromedriver

#python #селен #selenium-webdriver #tkinter #selenium-chromedriver

Вопрос:

я впервые публикую здесь, поэтому извините, если я допускаю какие-либо ошибки.. во всяком случае:

у меня есть этот скрипт, который заходит на веб-сайт моей школы и вводит мою регистрационную информацию и помечает что-то, что в основном означает, что я чувствую себя хорошо (и что у меня нет COVID).

я пытаюсь донести это до своих друзей в школе, но я не хочу давать им код, так как боюсь, что они прикоснутся к нему и что-то испортят… поэтому я хочу сделать что-то простое вроде этого: простой графический интерфейс, который я создал с помощью 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: %snPassword: %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 amp; website
browser = webdriver.Chrome(executable_path=r"D:DocumentsMashovHaxarat Briutchromedriver.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)

 

если у кого-нибудь есть какие-либо указания или какая-либо помощь, я был бы очень признателен!
приятного отдыха!

РЕДАКТИРОВАТЬ: и если есть простой способ сохранить эти данные, чтобы им не приходилось вводить их каждый раз, когда они открывают программу .. это также было бы очень полезно (в основном, только при первом открытии программы запрашиваются данные для входа, а затем при следующем открытиия просто автоматически перейду на веб-сайт, даже не запрашивая ваши данные для входа)

Ответ №1:

Мое предложение состояло бы в том, чтобы создать каталог с именем «autologin config» или что-то в этом роде, в легкодоступном месте. Попросите ваш скрипт проверить наличие текстового файла с именем «autologin.txt «или что-то подобное. Если он не существует, создайте его, запросите имя пользователя и запишите его в файл. Затем введите новую строку (n) и запросите пароль. Добавьте его во вторую строку файла. Если файл действительно существует, или после его создания автоматически перейдите на веб-сайт школы и извлеките учетные данные для входа с «C:UsersUserDesktopautologin конфигурация autologin.txt » или как там называется ваш файл, и используйте их для входа в систему.

Комментарии:

1. Я надеюсь, что это поможет достаточно хорошо удовлетворить ваши потребности. На самом деле я бы написал примерный сценарий, но в данный момент я на работе.

2. рассмотрим здесь шифрование …. используя serial # вашего компьютера в качестве ключа. (Поскольку вы сохраняете информацию для входа.)

3. Совершенно определенно @pcalkins.

Ответ №2:

Было бы разумно использовать шифрование. При этом я взял на себя смелость создать шаблон, который будет служить вашим целям, используя самогенерируемый 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 amp; website
    browser = webdriver.Chrome(executable_path=r"D:DocumentsMashovHaxarat 
    Briutchromedriver.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()
 

Комментарии:

1. я постараюсь это сделать, я отвечу, если у меня получится.. Большое вам спасибо!

2. Это готовый к запуску код, поэтому не стесняйтесь копировать и вставлять, чтобы увидеть, как он работает. Если это вам поможет, пожалуйста, установите это как принятый ответ.

3. это работает отлично, единственная проблема, с которой я сталкиваюсь, — это распечатать имя пользователя и пароль в скрипте selenium, есть идеи, как это сделать? я попытался использовать self.username или даже просто username, но это не сработало..

4. Внесите правку в свой вопрос вместе с попыткой написания кода, и я проведу вас по этому вопросу.

5. Кроме того, если вы используете Selenium вне класса «Window», вам придется получить доступ к пользовательской информации через объект класса. Предполагая, что у вас есть участник с именем «self.username», как только у вас появится запись пользователя в self.username, вы должны написать: » username.send_keys (window.username) «.