【技术分享】Python-selenium:大学语文脚本分享
大学语文代刷脚本
由于某某学校有大学语文学习时长要求,联想的之前学到的selenium,因此想写一个脚本代刷。
具体内容如下:
源文件自取:源文件
环境配置
1.浏览器
Edge浏览器,版本号:99
或chrome浏览器,版本号:96
2.驱动文件
将驱动文件放置在dist文件的上一级
3.依赖包配置
Python 3
pip install selenium
pip install pyinstaller
源码配置
Chrome版
import selenium
from selenium import webdriver
from selenium.webdriver import ChromeOptions
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from time import sleep
import sys
import random
def init_browser():
# 浏览器设置
chrome_options = ChromeOptions()
# 规避被检测到的风险; 忽略无用的日志
chrome_options.add_experimental_option("excludeSwitches", ['enable-automation', 'enable-logging'])
# 无头浏览器(还可以用phantomJs)
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
# 指定浏览器分辨率(设置截图大小)
chrome_options.add_argument('window-size=1920x1080') #1536x754
# 实例化浏览器
service = Service("chromedriver_win32_96\chromedriver.exe")
browser = webdriver.Chrome(service=service,options=chrome_options)
return browser
# 登录账号
def login(browser,userName,password,mark):
url = 'http://59.69.102.9/zgyw/index.aspx'
browser.get(url=url)
sleep(1)
# 获取用户名输入框
userName_input = browser.find_element(By.ID,'ctl00_ContentPlaceHolder1_name')
sleep(1)
# 获取密码输入框
password_input = browser.find_element(By.ID,'ctl00_ContentPlaceHolder1_pwd')
sleep(1)
userName_input.send_keys(userName)
sleep(1)
password_input.send_keys(password)
sleep(1)
# 获取登录按钮,并点击登录
login_button = browser.find_element(By.ID,'ctl00_ContentPlaceHolder1_login')
login_button.click()
# 判断是否登录成功
try:
name = browser.find_element(By.ID,'ctl00_name').text
if mark == 'time':
print('计时页面登录成功')
elif mark == 'learn':
print('学习页面登录成功')
return browser
except selenium.common.exceptions.NoSuchElementException:
if mark == 'time':
print('计时页面登录失败,请重试...')
elif mark == 'learn':
print('学习页面登录失败,请重试...')
return None
# 获取学习时间
def get_learn_time(browser):
# 浏览器刷新
browser.refresh()
sleep(1)
# 获取学习时长
total_time = browser.find_element(By.ID,'ctl00_ContentPlaceHolder1_lblonlineTime').text
print(total_time)
# 返回总学习时长
return(total_time)
def learn(learn_browser,time_browser):
# 初始化学习界面id
keyword = ['wen','shi','ci','qu','xiaoshuo']
# 初始化学习时间
time = get_learn_time(time_browser)
learn_time = int(time[:time.index('分')])
# 切换到学习界面
learn_page = learn_browser.find_element(By.ID,'nav_4')
learn_page.click()
sleep(1)
# 学习代码块
while learn_time <= 1000:
for id in keyword:
# 切换到对应学习界面
learn_button = learn_browser.find_element(By.ID,id)
learn_button.click()
# 随机休眠20-60秒
sleep(random.randint(20,60))
# 更新学习时长
time = get_learn_time(time_browser)
learn_time = int(time[:time.index('分')])
# 主函数
def main():
# 输入账号密码
userName = input('用户名:')
password = input('登录密码:')
# 初始化计时浏览器与学习浏览器
time_browser = init_browser()
learn_browser = init_browser()
time_browser = login(time_browser,userName,password,mark='time')
learn_browser = login(learn_browser,userName,password,mark='learn')
if time_browser == None or learn_browser == None:
print('本次登录失败,请检查:')
print('1.环境是否配置正确')
print('2.用户名密码是否输入错误')
sys.exit()
else:
name = time_browser.find_element(By.ID,'ctl00_name').text
print('欢迎 '+name+' 过来刷时长')
# 开始学习
learn(learn_browser,time_browser)
# 关闭浏览器
learn_browser.quit()
time_browser.quit()
# 程序入口
if __name__ == "__main__":
main()
Edge版
import selenium
from selenium import webdriver
from selenium.webdriver import EdgeOptions
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from time import sleep
import sys
import random
def init_browser():
# 浏览器设置
edge_options = EdgeOptions()
# 规避被检测到的风险; 忽略无用的日志
edge_options.add_experimental_option("excludeSwitches", ['enable-automation', 'enable-logging'])
# 无头浏览器(还可以用phantomJs)
edge_options.add_argument('--headless')
edge_options.add_argument('--disable-gpu')
# 指定浏览器分辨率(设置截图大小)
edge_options.add_argument('window-size=1920x1080') #1536x754
# 实例化浏览器
service = Service("edgedriver_win64_99\msedgedriver.exe")
browser = webdriver.Chrome(service=service,options=edge_options)
return browser
# 登录账号
def login(browser,userName,password,mark):
url = 'http://59.69.102.9/zgyw/index.aspx'
browser.get(url=url)
sleep(1)
# 获取用户名输入框
userName_input = browser.find_element(By.ID,'ctl00_ContentPlaceHolder1_name')
sleep(1)
# 获取密码输入框
password_input = browser.find_element(By.ID,'ctl00_ContentPlaceHolder1_pwd')
sleep(1)
userName_input.send_keys(userName)
sleep(1)
password_input.send_keys(password)
sleep(1)
# 获取登录按钮,并点击登录
login_button = browser.find_element(By.ID,'ctl00_ContentPlaceHolder1_login')
login_button.click()
# 判断是否登录成功
try:
name = browser.find_element(By.ID,'ctl00_name').text
if mark == 'time':
print('计时页面登录成功')
elif mark == 'learn':
print('学习页面登录成功')
return browser
except selenium.common.exceptions.NoSuchElementException:
if mark == 'time':
print('计时页面登录失败,请重试...')
elif mark == 'learn':
print('学习页面登录失败,请重试...')
return None
# 获取学习时间
def get_learn_time(browser):
# 浏览器刷新
browser.refresh()
sleep(1)
# 获取学习时长
total_time = browser.find_element(By.ID,'ctl00_ContentPlaceHolder1_lblonlineTime').text
print(total_time)
# 返回总学习时长
return(total_time)
def learn(learn_browser,time_browser):
# 初始化学习界面id
keyword = ['wen','shi','ci','qu','xiaoshuo']
# 初始化学习时间
time = get_learn_time(time_browser)
learn_time = int(time[:time.index('分')])
# 切换到学习界面
learn_page = learn_browser.find_element(By.ID,'nav_4')
learn_page.click()
sleep(1)
# 学习代码块
while learn_time <= 1000:
for id in keyword:
# 切换到对应学习界面
learn_button = learn_browser.find_element(By.ID,id)
learn_button.click()
# 随机休眠20-60秒
sleep(random.randint(20,60))
# 更新学习时长
time = get_learn_time(time_browser)
learn_time = int(time[:time.index('分')])
# 主函数
def main():
# 输入账号密码
userName = input('用户名:')
password = input('登录密码:')
# 初始化计时浏览器与学习浏览器
time_browser = init_browser()
learn_browser = init_browser()
time_browser = login(time_browser,userName,password,mark='time')
learn_browser = login(learn_browser,userName,password,mark='learn')
if time_browser == None or learn_browser == None:
print('本次登录失败,请检查:')
print('1.环境是否配置正确')
print('2.用户名密码是否输入错误')
sys.exit()
else:
name = time_browser.find_element(By.ID,'ctl00_name').text
print('欢迎 '+name+' 过来刷时长')
# 开始学习
learn(learn_browser,time_browser)
# 关闭浏览器
learn_browser.quit()
time_browser.quit()
# 程序入口
if __name__ == "__main__":
main()
程序打包
使用pyinstaller
cd [xxx.py源码目录]
pyinstaller -F [xxx.py源码文件名]
小结
经过测试,发现Chrome版打包的.exe文件可以使用,Edge版打包的.exe文件有一点问题,但是源码都在这里啦,需要的话可以根据源码注释来手动配置。有Python3环境的话也可以直接运行源码文件!
相比于之前学的selenium库,它的变化还是蛮大的,主要表现在配置项的整合方面;此外,这也是第一次使用pyinstaller打包工具,对它还不太了解,希望在以后的学习中逐渐熟悉。
本人代码技术有限,文中有错误的地方还请大家批评指正!
(最后的最后,本篇文章仅作为分享,如产生不好的影响请联系作者删除!)