竹韵编程
前言
说到python众所周知是一门跨平台的解释型的脚本语言,对于开发者而言,它有着独特的魅力,由于它的简洁和易于移植的特性深得信赖,对于初学者而言是不错的一个选择,可以说是简单易懂,而且语法和书写规范都很严格,从python学起可以养成良好的编码习惯。python本身也和java一样有着python虚拟机用来执行编译好的字节码,可随时运行于window、mac、linux等系统中,只需要有python 环境即可执行pyhton程序了。
正文
开发一个自动填写日报的功能总体来说是比较简单,首先要准备好相对应的环境,比如浏览器和驱动对于应多的版本、安装python环境等。这里使用的是selenium,当然还有其他自动化程序包,这里就用这个了。
一、python开发流程
1、我这里开发用的谷歌浏览器,所以先下载chrome和chromeDriver对应的版本驱动程序,看下面的内容。
ChromeDriver ---------- Chrome
78.0.3904.11 ----------- 78
77.0.3865.40 ----------- 77
77.0.3865.10 ----------- 77
76.0.3809.126 ---------- 76
76.0.3809.68 ----------- 76
76.0.3809.25 ----------- 76
76.0.3809.12 ----------- 76
75.0.3770.90 ----------- 75
75.0.3770.8 ------------ 75
74.0.3729.6 ------------ 74
73.0.3683.68 ----------- 73
72.0.3626.69 ----------- 72
2.46 ------------------ 71-73
2.45 ------------------ 70-72
2.44 ------------------ 69-71
2.43 ------------------ 69-71
2.42 ------------------ 68-70
2.41 ------------------ 67-69
2.40 ------------------ 66-68
2.39 ------------------ 66-68
2.38 ------------------ 65-67
2.37 ------------------ 64-66
2.36 ------------------ 63-65
2.35 ------------------ 62-64
通过上述版本的对照可以到ChmoreDriver的仓库中去下载对应的版本驱动http://chromedriver.storage.googleapis.com/index.html,下载后再下载对应的谷歌浏览器进行安装
将下载的chromedriver.exe文件拷贝到本地浏览器安装的目录
chrome安装目录
2、开始下载python安装包部署python环境,从python官方网站下载安装程序,这里开发用3.7.0的版本,安装成功后再安装JetBrains PyCharm Community Edition 2018.3.3 x64客户端开发工具,当然也可以用脚本窗体直接开发。
python脚本编写窗体
客户端工具安装成功后可以直接引入python部署的环境,下载需要的包程序,点击+号即可搜索下载本次开发所需要的包,如下图所示
file->project interpreter->setting面板
3、开始创建工程pythonWebdriver并且创建一个用来执行自动程序的.py脚本程序。
项目工程
如上图所示,创建了一个webdriver.py的脚本,接下来就引入此脚本开发需要的包程序,类似于java开发时导入包是一样的。
python头部引入包程序
由于本次开发自动填写的数据都在数据库存放,所以才此处需要连接数据库来动态的获取需要的数据来进行日报填写。
python连接数据库
4、开发的整体代码如下:
# -*- coding:utf-8 -*-
from selenium import webdriver
from time import sleep
import time
import pymysql.cursors
from selenium.webdriver.support.ui import Select
##定义连接数据库
connect = pymysql.Connect(
host='localhost',
port=3306,
user='root',
passwd='root',
db='webdriver',
charset='utf8'
)
##获取游标
cursor = connect.cursor()
sql = 'SELECT t.* FROM webdriverdaily t';
cursor.execute(sql)
##循环打开浏览器进行日报填写
for row in cursor.fetchall():
print(row)
##获取浏览器加载驱动
chrome_driver = 'C:\\Users\\Administrator\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe'
##设置后台默认运行
option = webdriver.ChromeOptions()
option.add_argument('headless')
brower = webdriver.Chrome(executable_path=chrome_driver,chrome_options=option)
##窗体最大化
##brower.maximize_window()
##打开地址
brower.get("日报系统地址")
##打开页面后等待2秒再输入
time.sleep(2)
##输入用户名密码
brower.find_element_by_id("username").send_keys(row[1])
brower.find_element_by_id("password").send_keys(row[2])
##单机登录
brower.find_element_by_id("submitBtn").click()
##开始填写表单
brower.find_element_by_xpath('//*[@id="mainmenu"]/a[7]').click()
time.sleep(1)
inputValue = brower.find_element_by_xpath('//*[@id="wtime[1]"]').get_attribute('value')
print("================日报正在填写中。。。==================")
time.sleep(2)
brower.find_element_by_xpath('//*[@id="wtime[1]"]').send_keys(row[3])
brower.find_element_by_xpath('//*[@id="edit_form"]/table/tbody/tr[3]/td[3]/div[1]/div/div').click()
time.sleep(1)
brower.find_element_by_xpath('//*[@id="edit_form"]/table/tbody/tr[3]/td[3]/div[1]/div/dl/dd[' + row[4] + ']').click()
time.sleep(1)
brower.find_element_by_xpath('//*[@id="edit_form"]/table/tbody/tr[3]/td[3]/div[2]/div/div').click()
time.sleep(1)
brower.find_element_by_xpath(
'//*[@id="edit_form"]/table/tbody/tr[3]/td[3]/div[2]/div/dl/dd[' + row[5] + ']').click()
time.sleep(1)
brower.find_element_by_xpath('//*[@id="edit_form"]/table/tbody/tr[3]/td[3]/div[3]/div/div').click()
time.sleep(1)
brower.find_element_by_xpath('//*[@id="edit_form"]/table/tbody/tr[3]/td[3]/div[3]/div/dl/dd[' + row[6] + ']').click()
time.sleep(1)
brower.find_element_by_xpath('//*[@id="edit_form"]/table/tbody/tr[4]/td[2]/div[1]/div/div').click()
time.sleep(1)
brower.find_element_by_xpath(
'//*[@id="edit_form"]/table/tbody/tr[4]/td[2]/div[1]/div/dl/dd[' + row[7] + ']').click()
time.sleep(1)
brower.find_element_by_id("worktdesc[1]").send_keys(row[8])
time.sleep(1)
brower.find_element_by_xpath('//*[@id="edit_form"]/table/tbody/tr[5]/td[2]/div/div/div').click()
time.sleep(1)
brower.find_element_by_xpath('//*[@id="edit_form"]/table/tbody/tr[5]/td[2]/div/div/dl/dd[' + row[9] + ']').click()
time.sleep(1)
brower.find_element_by_id("log[1]").send_keys(row[10])
time.sleep(1)
brower.find_element_by_id("save").click()
time.sleep(2)
##执行完成后关闭浏览器
brower.quit()通过上述代码就可以实现自动填写日报了。
二、java开发流程
1、上面的python脚本写完后这里使用xxl-job定时调度系统进程实时的调度执行写日报。具体的xxl-job可以到网上自行下载后部署就可以使用了,这里不再详细赘述了。
2、使用java代码调用python脚本代码如下,将调用放入定时执行代码块
@JobHandler("startWriteJobHandler")
@Component
public class DemoJobHandler extends IJobHandler {
@Resource
private testService testService;
public ReturnT<String> execute(String param) throws Exception{
System.out.println("============开始调用python脚本执行自动化=============");
Process proc;
try {
proc = Runtime.getRuntime().exec("F:\\pythonWebdriver\\Scripts\\python.exe F:\\pythonWebdriver\\webdriver.py");// 执行py文件
//用输入输出流来截取结果
BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
in.close();
proc.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
return SUCCESS;
}3、访问定时调度系统开发调度执行py脚本。
调度系统
总结:到此使用python和java结合一个简单的定时写日报功能就完成了,接下来就可以将其部署到window主机上面定时写日报了。还有很多方式可以实现,不足之处一起讨论。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2236/viewspace-3132843/ ,如需转载,请注明出处,否则将追究法律责任。