本文将介绍如何使用Python编写一个自动化脚本,该脚本可以自动登录大学习网站并完成学习任务。我们将使用SQLite数据库来存储用户信息,使用DrissionPage库来模拟浏览器操作。
1. 准备工作
首先,我们需要安装一些必要的Python库。在命令行中运行以下命令来安装这些库:
pip install sqlite3
pip install DrissionPage
pip install prettytable
2. 创建数据库
我们将使用SQLite数据库来存储用户的昵称和学习编号。如果数据库文件不存在,我们将创建一个新的数据库,并在其中创建一个名为`study`的表,该表有两个字段:`name`和`learning_id`。
import sqlite3,os
from DrissionPage import ChromiumPage
from urllib.parse import quote,unquote
import prettytable
# 数据库
dbdase = 'le.db'
# 如果没有数据库文件,则创建数据库
if not os.path.exists(dbdase):
# 连接数据库
conn = sqlite3.connect(dbdase)
cur =conn.cursor()
# 创建表头
cur.execute("""CREATE TABLE study (
name TEXT,
learning_id integer
);""")
3. 写入用户信息
接下来,我们将用户的昵称和学习编号写入数据库。这些信息将通过输入框获取。我们使用`quote`函数将昵称进行URL编码,以便在URL中使用。
_name = input('>>>请输入大学习昵称:')
learning_id = input('>>>请输入学习编号:')
name = quote(_name)
cur.execute("INSERT INTO study (name, learning_id) VALUES (?, ?)", (name, learning_id))
conn.commit()
conn.close()
print('写入数据成功!')
4. 自动登录和学习
接下来,我们将使用DrissionPage库来模拟浏览器操作,自动登录大学习网站并完成学习任务。
for data in _data:
page = ChromiumPage()
page.set.load_strategy.eager()
page.get('http://qndxx.bestcood.com/nanning/daxuexi')
# 模拟点击操作
# 尝试点击退出登录,如果有退出登录
try:
page.ele('.sign-out').click()
except:
pass
# 输入名字
page.ele('#userName').input(unquote(data[0]))
# 输入编号
page.ele('#userId').input(data[1])
# 点击登录
page.ele('#btn-login').click()
# 等待加载
page.wait.load_start()
5. 删除用户信息
如果需要,我们可以从数据库中删除用户信息。我们可以选择删除所有用户信息,或者只删除特定用户的信息。
def delete_(num,bool):
conn = sqlite3.connect(dbdase)
cur = conn.cursor()
if bool:
if num == 0:
cur.execute("DELETE FROM study")
elif num == 1:
na = input(">>>你要删除谁的数据?")
name = quote(na)
cur.execute("DELETE FROM study WHERE name = ?;", (name,))
print(name,'it is delete!')
conn.commit()
conn.close()
6. 查看数据库信息
最后,我们可以查看数据库中的用户信息。我们将使用prettytable库来美化输出的表格。
if _inquire:
table = prettytable.PrettyTable()
table.field_names = ['姓名','编号']
conn = sqlite3.connect(dbdase)
cur = conn.cursor()
cur.execute("SELECT * FROM study;")
for row in cur.fetchall():
rq = unquote(row[0])
table.add_row((rq,row[1]))
print(table)
cur.close()
以上就是使用Python编写的自动登录大学习网站并完成学习任务的自动化脚本。希望这篇文章对你有所帮助!
完整代码
# -*- coding: utf-8 -*-
"""
# @FilePath : qndxx\\gx\\mian.py
# @creationTime : 2023-10-27 00:38:57
# @Author : 魔法师
# @E-mail : 2782226338@qq.com
# @BlogLink : bytesquadblog.cn
# @Motto : No sailor skilled was ever made By sailing on a sea of jade.
# @Description:
1、可以写入数据,删除数据
2、可以是单人学习,也可以是多人学习
3、直接运行Python代码,不用做太多操作
4、很好的保护隐私,大学习信息不外露
5、官方接口,不怕信息泄露
6、需要安装的库很少
在终端输入以下命令
pip install prettytable
pip install DrissionPage
pip install prettytable
pip install DrissionPage --upgrade
"""
import sqlite3,os
from DrissionPage import ChromiumPage
from urllib.parse import quote,unquote
import prettytable
# 数据库
dbdase = 'le.db'
# 是否需要输入输入框输入信息
_inoput = False
# 是否删掉数据
delete_dase = True
# 写入数据
is_write = False
# 查看信息
_inquire = True
# ---------------------------start-------------------
# 如果没有数据库文件,则创建数据库
if not os.path.exists(dbdase):
# 连接数据库
conn = sqlite3.connect(dbdase)
cur =conn.cursor()
# 创建表头
cur.execute("""CREATE TABLE study (
name TEXT,
learning_id integer
);""")
_name = input('>>>请输入大学习昵称:')
learning_id = input('>>>请输入学习编号:')
name = quote(_name)
cur.execute("INSERT INTO study (name, learning_id) VALUES (?, ?)", (name, learning_id))
conn.commit()
conn.close()
print('写入数据成功!')
# 如果需要再写入数据,则显示提示框
elif _inoput:
conn = sqlite3.connect(dbdase)
cur = conn.cursor()
_name = input('>>>请输入大学习昵称:')
learning_id = input('>>>请输入学习编号:')
name = quote(_name)
cur.execute("INSERT INTO study (name, learning_id) VALUES (?, ?)", (name, learning_id))
conn.commit()
conn.close()
print('写入数据成功!')
# 写入班级信息
while is_write:
conn = sqlite3.connect(dbdase)
cur = conn.cursor()
_name = input('>>>请输入大学习昵称(按q结束写入):')
if _name.strip() == 'q':
is_write = False
quit()
else:
learning_id = input('>>>请输入学习编号:')
name = quote(_name)
cur.execute("INSERT INTO study (name, learning_id) VALUES (?, ?)", (name, learning_id))
conn.commit()
conn.close()
print('写入数据成功!')
#-------------------- end -------------------------
# // 完成写入信息start--------------------------------
con = sqlite3.connect(dbdase)
cur = con.cursor()
cur.execute("SELECT name,learning_id FROM study;")
_data = []
for row in cur.fetchall():
_data.append(row)
# // 完成写入信息end----------------------------------------
# --------------start 删除个人信息---------------------------
def delete_(num,bool):
conn = sqlite3.connect(dbdase)
cur = conn.cursor()
if bool:
if num == 0:
cur.execute("DELETE FROM study")
elif num == 1:
na = input(">>>你要删除谁的数据?")
name = quote(na)
cur.execute("DELETE FROM study WHERE name = ?;", (name,))
print(name,'it is delete!')
conn.commit()
conn.close()
# 删除数据or删除某项数据,1 是删除某个同学的信息,0是全部删除
delete_(0,delete_dase)
#---------------------删除信息end-----------------------------------
# quit()
# 查看数据库里有谁----------------------start------------------------
if _inquire:
table = prettytable.PrettyTable()
table.field_names = ['姓名','编号']
conn = sqlite3.connect(dbdase)
cur = conn.cursor()
cur.execute("SELECT * FROM study;")
for row in cur.fetchall():
rq = unquote(row[0])
table.add_row((rq,row[1]))
print(table)
cur.close()
quit()
# -------------------------end--------------------------
if _inquire:
pass
for data in _data:
page = ChromiumPage()
page.set.load_strategy.eager()
page.get('http://qndxx.bestcood.com/nanning/daxuexi')
# 模拟点击操作
# 尝试点击退出登录,如果有退出登录 】
try:
page.ele('.sign-out').click()
except:
pass
# 输入名字
page.ele('#userName').input(unquote(data[0]))
# 输入编号
page.ele('#userId').input(data[1])
# 点击登录
page.ele('#btn-login').click()
# 等待加载
page.wait.load_start()
bd = page('.bd').text
# 点击开始学习
page.ele('#btn-learn-start').click()
# 尝试以下操作
try:
el = page('tag:select')
# 选择广西
el.select.by_index(21)
page.wait.load_complete()
# 选择南宁
el = page('#city')
el.select.by_text(text='南宁市')
# 点击确定
page.ele('.sure').click()
page.wait.load_complete()
# 点击开始查看
page.ele('.start_btn on').click()
page.wait.load_complete()
# 观看完毕,返回首页
page.get('http://qndxx.bestcood.com/nanning/daxuexi')
except:
page.wait.load_complete()
# 点击开始查看
page.ele('.start_btn on').click()
# 返回到首页
page.get('http://qndxx.bestcood.com/nanning/daxuexi')
h1 = page.ele('tag:h1').text
print(unquote(data[0]),h1,bd,'完成!!')
© 版权声明
THE END
暂无评论内容