python - 蟒蛇硒| 要求输入,输出到网站?
问题描述
这是我第一次在这里发帖,如果我犯了任何错误,很抱歉..无论如何:
我有这个脚本可以在我学校的网站上输入我的登录信息,并勾选基本上意味着我感觉良好(并且我没有 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)
如果有人有任何指示或任何帮助,我将不胜感激!假期愉快!
编辑:如果有一种简单的方法来存储这些数据,这样他们就不必在每次打开程序时都输入它。这也会很有帮助(基本上只是他们第一次打开程序时询问登录详细信息,然后下次打开它时,它会自动转到网站,甚至不询问您的登录详细信息)
解决方案
使用加密是明智的。话虽如此,我冒昧地制作了一个模板,该模板可以使用自行生成的 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()
推荐阅读
- uml - 用例序列
- angular - 保存数组值并将其传递到下一页
- capl - 如何使用 capl 在 FlexRay 中停止发送 PDU
- c# - 'System.Int16' 和 'System.Boolean' 类型之间没有定义强制运算符
- javascript - 以 DD:MM:YYYY HH:MM:SS 格式获取日期
- java - Tomcat在war部署后显示错误状态404
- react-native - 反应本机 Firebase 导航无法导航第二个屏幕
- php - PHP & Eloquent 匹配数组与数组
- jenkins - 是否可以删除詹金斯中的存档文件?
- angular - Internet Explorer 11,ECMAScript 对象属性分配问题