0.前言

由于特殊原因,对部分背景内容有所更改。
与浏览器自动化交互的两种常见方式:

  • 模拟客户端向服务端直接发送报文
  • 利用浏览器驱动去模仿人操作浏览器去填报

个人觉得第二个方法简单一点,所需知识也不多(真正大佬请忽略)。

1.安装python和selenium以及浏览器驱动(chrome为例)

1.1安装python

Python官网:https://www.python.org/ 不过速度较慢

百度网盘:本人使用的版本 为python 3.7.1

链接:https://pan.baidu.com/s/1SudrBM5ILIyTReImZrDGuA 提取码:410n

下载后,双击下载包,进入 Python 安装向导,安装非常简单,你只需要使用默认的设置一直点击"下一步"直到安装完成即可。

如果没有填加到环境变量中,请添加至环境变量中:

python 网页动态交互 python和网页交互_python

1.2安装selenium

selenium是一个浏览器为web自动化测试工具,原本是用来检测浏览器的。由于selenium可以控制浏览器,即用selenium打开的浏览器内容都可以通过特定的方式获取到。一般用于获取javaScript动态渲染的页面。
最简单的方法:win+r打开命令行,输入:

pip install selenium

静待安装完成。安装完成后,在输入:

pip list

即可查看是否安装成功。

python 网页动态交互 python和网页交互_selenium_02


如果说过程中报错了或者没有成功。可能是没有下载pycharm。请参考下载教程:https://www.runoob.com/w3cnote/pycharm-windows-install.html

下载专业版本(教师或者学生可以免费使用,具体申请可以自行百度),

如果先麻烦的话,社区版完全免费,对于此项目也是完全可行的。

1.3下载对应浏览器驱动(以chrome为例)
1.3.1查看自己的浏览器版本

浏览器地址栏输入:chrome://version 会得到关于你的chrome浏览器的具体信息。以下为部分截图:

python 网页动态交互 python和网页交互_selenium_03


例如 我使用的就是上图中第一行所写的:78.0.3904.70 (正式版本)

1.3.2下载对应浏览器驱动

下载地址:

下载完成后,进行解压。解压后将webdriver移动/复制到chrome浏览器安装目录下。

python 网页动态交互 python和网页交互_webdriver_04


最后将chrome.exe的路径添加到环境变量的path中去:

python 网页动态交互 python和网页交互_python 网页动态交互_05

2.编写代码

这一部分是核心,却也是最简单的部分。因为此次使用的方法是模拟浏览器操作,想一想也就两步:

  1. 找到一个元素
  2. 输入或者点击

完事了!!!

2.1定位一个元素

selenium webdriver中有很多的定位方法:
By.id()、By.xpath()、By.linkText()、By.partialLinkText() 、By.tagName() 、By.className()、By.cssSelector()等等
通过名字也都可以看出来,无非是每一个标签的id、name、class、xpath等等去定位的。在网页中摁f12,可以查看源代码。就能准确获知每一个标签的属性了,通过属性去定位就OK了。
本人说一下我使用的最笨的方法,不管你啥标签,我都是用xpath去定位,又准又好(对于一些学习前端的小伙伴,建议都去试一试)。
那么xpath是什么呢?问得好,不知道,自个百度吧,我也讲不清
虽然讲不清,但是不妨碍我去获取标签的xpath:
f12打开源代码,找到网页上对应的元素。右键单击-》copy-》copy xpath 。
这样就讲该元素的xpath复制到了剪贴板了。
使用下面这个函数就可以定位了:
driver.find_element_by_xpath()
其他的也一样例如:
driver.find_element_by_partial_link_text()

2.2 对定位到的元素模拟操作。
  • 点击:调用click()函数就模拟了一次点击
  • 清空文本框:clear()
  • 输入文本:send_keys()
    以上内容就足以填写所有的东西了。
2.3大功告成,完整代码(供参考,内为西工大和西电)

西工大版本(可以提交多次,拿来作实验):

from selenium import webdriver
import time

# 打开chrome浏览器
driver = webdriver.Chrome()
#输入待交互的网址
url = r''
driver.get(url)
# 最大化窗口
driver.maximize_window()
# 登录信息
username = driver.find_element_by_id('username')
stu_number = '自己的账号'
username.send_keys(stu_number)
stu_password = '自己的密码'
password = driver.find_element_by_id('password')
password.send_keys(stu_password)
# 点击登录
driver.find_element_by_class_name('submit_button').click()
time.sleep(1)
#
#执行自己想要的其他操作
#
# 关闭浏览器
driver.close()

PS:代码中的time.sleep()是让线程暂停一段时间,单位为秒(s)。目的是为了防止部分页面打开(跳转)较慢,导致后续代码运行失败。

2.4 发个qq邮件通知(不需要也可以直接跳过)

先上代码:填好对应的邮箱、授权码(获取方法在注释中)、以及发送内容即可。

import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 发送给个人邮箱
# 用于构建邮件头
# 发信方的信息:发信邮箱,QQ 邮箱授权码
from_addr = '发送方@qq.com'
# 进入qq邮箱->设置->账户->找到stmp服务,点击开启。验证后会给你一个授权码,直接复制,填入下方即可
password = '自己的授权码'

# 收信方邮箱
to_addr = '收信方@qq.com'

# 发信服务器
smtp_server = 'smtp.qq.com'

# 邮箱正文内容,第一个参数为内容(正文部分),第二个参数为格式(plain 为纯文本),第三个参数为编码
msg = MIMEText('写信内容', 'plain', 'utf-8')

# 邮件头信息
msg['From'] = Header(from_addr)
msg['To'] = Header(to_addr)
msg['Subject'] = Header('标题')

# 开启发信服务,这里使用的是加密传输
server = smtplib.SMTP_SSL(smtp_server)
server.connect(smtp_server, 465)
# 登录发信邮箱
server.login(from_addr, password)
# 发送邮件
server.sendmail(from_addr, to_addr, msg.as_string())
# 关闭服务器
server.quit()
2.5 配合自动开关机,实现自动打卡。

定时自动关机的方法很简单:
控制面板-》搜索计划任务-》打开计划任务-》点击右侧创建基本任务-》输入名称(必填)及详细内容(选填)-》下一步,触发器选择‘每天’-》下一步,选择好每一天的触发时间-》下一步,操作选择‘启动程序’-》下一步,程序或脚本 中填入 ‘shutdown’,参数为 ‘-s -t 00’ 意思是延迟0s关机,也就是触发时立即关机。-》完成。
关于定时开机:
我尝试了很多种方法,包括创建计划任务、修改注册表、定时开关机软件等等,都没能够成功。本人也正在努力!

以上就是全部内容了,有知道如何自动开机的小伙伴,一定要评论告诉我呀!

欢迎评论和指正!