selenium安装流程及应用实例

安装

安装selenium模块

pip install selenium

下载geckodriver

Firefox版下载地址
如果网站没法访问,那就得想特殊方法了,
下载下来是个这玩意
geckodriver

找到python.exe文件

python.exe
把上一步下载好的geckodriver.exe文件和python.exe放到一起

一个自动打卡截图应用实例

需求描述

因为疫情影响,不能返校,于是每天在家都需要健康打卡并且把打卡记录截图发送到qq群里, 这种机械的任务时间一久就让人感到厌烦,于是想到用python+selenium自动化完成这一切。

解决思路

工作分为三步

  1. 打卡
  2. 截图
  3. 发送qq消息*

具体内容

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.keys import Keys
from PIL import ImageGrab
import time
from PIL import Image
from io import BytesIO
import win32clipboard
import os
# import win32gui
# import win32con

id = '' # 自己的学号 
paword = '' # 密码
firefox_options = Options()
firefox_options.add_argument('--headless') # 静默启动浏览器

print("正在启动浏览器,请稍等")
driver = webdriver.Firefox(options=firefox_options)
driver.get("http://login.cuit.edu.cn/Login/xLogin/Login.asp")
print("已打开学校网页")

userName = driver.find_element_by_class_name("TxtUserNameCssClass")
userName.send_keys(id)
print("已输入账号:%s" % id)

password = driver.find_element_by_class_name("TxtPasswordCssClass")
password.send_keys(paword)
print("已输入密码,正在登录")

enterButton = driver.find_element_by_class_name("IbtnEnterCssClass").click()

time.sleep(4) #很关键的一点,在网页没有加载完全时是找不到下面元素的
first = driver.find_element_by_partial_link_text("师生")
print("正在打开网页:%s" % first.text)
first.click()

time.sleep(1)
home_status = driver.find_element_by_xpath('//select[@name="sF21650_5"]/option[@value=1]')
print("现居住地状态:%s" % home_status.text)
home_status.click()
work_status = driver.find_element_by_xpath('//select[@name="sF21650_6"]/option[@value=5]')
print("今天工作状态:%s" % work_status.text)
work_status.click()
health_status = driver.find_element_by_xpath('//select[@name="sF21650_7"]/option[@value=1]')
print("个人健康状态:%s" % health_status.text)
health_status.click()
lift_status = driver.find_element_by_xpath('//select[@name="sF21650_8"]/option[@value=1]')
print("个人生活状态:%s" % lift_status.text)
lift_status.click()
positive_status = driver.find_element_by_xpath('//select[@name="sF21650_9"]/option[@value=1]')
print("家庭成员状况:%s" % positive_status.text)
positive_status.click()

summit = driver.find_element_by_xpath('//input[@value="提交打卡"]').click()

time.sleep(1)
driver.switch_to.alert.accept() # 处理js弹窗

print("正在截图")
driver.execute_script("document.body.style.transform='scale(0.8)'") # 缩放浏览器以截得所有屏幕内容
driver.execute_script('window.scrollTo(0,83)') # 模拟鼠标滚动,目的同上
driver.get_screenshot_as_file("text.png")
print("截图完成")
driver.close()
print("浏览器已关闭")

# 将截图放于剪贴板
image = Image.open("text.png")
output = BytesIO()
image.save(output, 'BMP')
data = output.getvalue()[14:]
output.close()
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardData(win32clipboard.CF_DIB, data)
win32clipboard.CloseClipboard()
print("截图已放于剪贴板")
if os.path.exists("text.png"):
    os.remove("text.png")
    print("截图已删除")

# 发送qq消息
# to_who = "TROTS"
# qq = win32gui.FindWindow(None, to_who)
# win32gui.SendMessage(qq, 258, 22, 2080193)
# win32gui.SendMessage(qq, 770, 0, 0)
# win32gui.SendMessage(qq, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
# win32gui.SendMessage(qq, win32con.WM_KEYUP, win32con.VK_RETURN, 0)
# print("消息已通过qq发送到%s"%to_who)

注:关于发送qq消息为什么给注释了?这个东西其实局限性还是挺大的,通俗地说它采用的原理是检测窗口的名称(当然这么说并不准确,先这么理解吧,能理解这个问题就行),所以我们必须要手动把这个窗口打开,使它成为一个独立的窗口,才可以实现发送消息,因为这个过程确实不太符合我们简化整个流程的最初目的,所以暂时先不加这个。

用到的一些知识

xpath教程
弹窗怎么解决
switch_to_alert
如何保存截图
如何缩放浏览器
模拟鼠标
鼠标键盘事件
Window.scrollTo()
selenium静默启动浏览器
selenium静默启动浏览器
python3将图片复制到剪贴板
使用python发送qq消息
No module named 'pip’解决方法
No module named 'pip._internal’解决方法
PIL安装失败解决方法
win32clipboard安装出错解决方法
selenium文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值