案例介绍
在一些网页自动化的场景中,需要在网页页面中选择日期,然而有的页面没有提供输入日期的方式,只能通过鼠标点击的方式指定日期。在这些页面中,通过控件捕捉编写自动化流程,逻辑上会比较复杂,导致流程冗长,不便于后期维护,因此可以通过在网页中执行JS脚本的方式实现日期选择。本案例主要以百度日历这个场景为例。
案例实现
编码模式
编码模式通过js组件实现在日历选择器中选择指定的日期
from rpa.core import *
from rpa.utils import *
import rpa4 as rpa # 使用V4引擎
def start1():
# 在此处开始编写您的应用
# 设置指定日期
date = '2022-9-22'
# js脚本
js_code = """
function data(params){
var years = params.split('-')[0];
var month = params.split('-')[1];
var day = params.split('-')[2];
var date_doc = document.getElementsByClassName('header-box-test_4tbHI WA_LOG_BTN')[0];
setTimeout(function(){
console.log('开始选年份');
var year = date_doc.getElementsByClassName('_select_9e3yq_11 select_2qDA2')[0].getElementsByTagName('div')[0].getElementsByTagName('span')[0].innerText.split('年')[0];
if(year != years){
date_doc.getElementsByClassName('_select_9e3yq_11 select_2qDA2')[0].getElementsByTagName('i')[0].click();
setTimeout(function() {
years_list=date_doc.getElementsByClassName('_select_9e3yq_11 select_2qDA2')[0].getElementsByClassName('_select-list_9e3yq_82')[0].getElementsByClassName('_selectItem_9e3yq_23 ');
for(var i = 0;i < years_list.length;i++){
year = years_list[i].innerText.split('年')[0];
if(year == years){
years_list[i].click();
console.log('年份已选');
}
}
}, 1000);
}
},1000)
setTimeout(function(){
console.log('开始选月份');
month_part = date_doc.getElementsByClassName('_select_9e3yq_11 select_kn5XK')[0].getElementsByTagName('div')[0].getElementsByTagName('span')[0].innerText.split('月')[0];
if(month_part != month){
date_doc.getElementsByClassName('_select_9e3yq_11 select_kn5XK')[0].getElementsByTagName('i')[0].click();
setTimeout(function() {
month_list = date_doc.getElementsByClassName('_select_9e3yq_11 select_kn5XK')[0].getElementsByClassName('_select-list_9e3yq_82')[0].getElementsByClassName('_selectItem_9e3yq_23 ');
for(var i = 0;i < month_list.length;i++){
month_part = month_list[i].innerText.split('月')[0];
if(month_part == month){
month_list[i].click();
console.log('月份已选');
}
}
}, 1000);
}
},3000)
setTimeout(function(){
console.log('开始选日期');
var lists = document.getElementsByClassName('content_27h2V')[0].getElementsByClassName('_page-list_pslwo_132 page-list_6fhk3')[0].getElementsByClassName('content_1Jdsr')[1].getElementsByClassName('cos-row')[0].getElementsByClassName('cos-col');
for(var i = 0;i < lists.length;i++){
class_name = lists[i].className;
var reg = RegExp('opacity_496bW')
if(reg.test(class_name) != true){
date = lists[i].getElementsByClassName('number_7sHfk')[0].innerText;
if(date == day){
lists[i].getElementsByClassName('number_7sHfk')[0].click();
console.log('日期已选');
}
}
}
}, 5000);
return('日期操作完成')
};
// 调用js函数
result = data('%s');
return result;
"""%date
# 打开百度页面
page = rpa.app.chrome.create('www.baidu.com')
# 在百度输入框输入日历
page.input_text('百度输入框','日历')
# 点击百度一下按钮
page.click('百度一下按钮')
# 等待3秒页面数据加载
sleep(3)
# 通过execute_js组件执行js脚本
result = page.execute_js(js_code)
print(result)
可视化模式
可视化模式通过js组件实现在日历选择器中选择指定的日期
以下代码为执行JS组件中JavaScript脚本那一项脚本内容
function data(params){
var years = params.split('-')[0];
var month = params.split('-')[1];
var day = params.split('-')[2];
var date_doc = document.getElementsByClassName('header-box-test_4tbHI WA_LOG_BTN')[0];
setTimeout(function(){
console.log('开始选年份');
var year = date_doc.getElementsByClassName('_select_9e3yq_11 select_2qDA2')[0].getElementsByTagName('div')[0].getElementsByTagName('span')[0].innerText.split('年')[0];
if(year != years){
date_doc.getElementsByClassName('_select_9e3yq_11 select_2qDA2')[0].getElementsByTagName('i')[0].click();
setTimeout(function() {
years_list=date_doc.getElementsByClassName('_select_9e3yq_11 select_2qDA2')[0].getElementsByClassName('_select-list_9e3yq_82')[0].getElementsByClassName('_selectItem_9e3yq_23 ');
for(var i = 0;i < years_list.length;i++){
year = years_list[i].innerText.split('年')[0];
if(year == years){
years_list[i].click();
console.log('年份已选');
}
}
}, 1000);
}
},1000)
setTimeout(function(){
console.log('开始选月份');
month_part = date_doc.getElementsByClassName('_select_9e3yq_11 select_kn5XK')[0].getElementsByTagName('div')[0].getElementsByTagName('span')[0].innerText.split('月')[0];
if(month_part != month){
date_doc.getElementsByClassName('_select_9e3yq_11 select_kn5XK')[0].getElementsByTagName('i')[0].click();
setTimeout(function() {
month_list = date_doc.getElementsByClassName('_select_9e3yq_11 select_kn5XK')[0].getElementsByClassName('_select-list_9e3yq_82')[0].getElementsByClassName('_selectItem_9e3yq_23 ');
for(var i = 0;i < month_list.length;i++){
month_part = month_list[i].innerText.split('月')[0];
if(month_part == month){
month_list[i].click();
console.log('月份已选');
}
}
}, 1000);
}
},3000)
setTimeout(function(){
console.log('开始选日期');
var lists = document.getElementsByClassName('content_27h2V')[0].getElementsByClassName('_page-list_pslwo_132 page-list_6fhk3')[0].getElementsByClassName('content_1Jdsr')[1].getElementsByClassName('cos-row')[0].getElementsByClassName('cos-col');
for(var i = 0;i < lists.length;i++){
class_name = lists[i].className;
var reg = RegExp('opacity_496bW')
if(reg.test(class_name) != true){
date = lists[i].getElementsByClassName('number_7sHfk')[0].innerText;
if(date == day){
lists[i].getElementsByClassName('number_7sHfk')[0].click();
console.log('日期已选');
}
}
}
}, 5000);
return('日期操作完成')
};
//通过"''' + date_time + '''"这个方法来传date_time变量值到js中
result = data("''' + date_time + '''");
return result;
文档内容是否对您有帮助?