豬腳本(原飛豬腳本)以按鍵精靈教學為主,涉及UiBot,Python,Lua等腳本編程語言,教學包括全自動辦公腳本,游戲輔助腳本,引流腳本,網頁腳本,安卓腳本,IOS腳本,注冊腳本,點贊腳本,閱讀腳本以及網賺腳本等各個領域。想學習按鍵精靈的朋友可以添加金豬腳本粉絲交流群:554127455 學習路上不再孤單,金豬腳本伴你一同成長.
1.什么是網頁元素特征字符串?
請參考網頁特征字符串詳解;
2.Html系列命令
2.1.HtmlSelect命令
1)HtmlSelect命令只能夠根據Select項的值來進行選擇,注意這里不是顯示在Select項上的文字,而是該項的value。
一個典型的下拉框HTML代碼如下:
<select name="city">
<option value="1">北京</option>
<option value="2">上海</option>
<option value="3">廣州</option>
</select>
這里如果要選擇上海,需要選擇值為2的項;
2)級聯的下拉列表組合。
在有的網頁中,會有幾個級聯的下拉列表,后一個下拉框會隨前一個框的值變化而發生變化,典型的有注冊頁面上的省份城市選擇,HtmlSelect命令能夠觸發Onchange事件,會導致后一個下拉框值發生變化,但是如果執行腳本太快,而導致后一個未能選中正確的值,可以在前一個HtmlSelect后加上適當的延時;
3)多選表單中的列表控件;有的列表支持多選,在有一些個求職網站中,職業是可以多選的,這時候可以用%將多個需要選擇的值連接起來傳遞給HtmlSelect命令實現多選;
2.2.HtmlExists命令
HtmlExists命令,能夠判斷指定特征的元素是否存在,并能夠返回具備該特征的元素的個數。這個命令能夠用來判斷某個元素是否存在,如果為0證明不存在;
2.3.HtmlGet命令
HtmlGet命令比較復雜,但是功能也非常強大,該命令具備兩個參數,第一個參數為獲取類型,目前支持的值如下所示:
序號 值 適用對象
1 text 得到指定元素的文本值,對應DOM屬性innerText
2 html 得到指定元素內部的HTML代碼,對應DOM屬性innerHTML
3 outerHtml 得到元素整體的HTML代碼,對應DOM屬性的outerHTML
4 value 得到元素的Value值,用于獲取表單元素內部的值
5 src 得到圖像元素的src屬性,用于IMG標簽對象
6 href 得到鏈接元素的鏈接地址,用于A標簽
7 …其他名稱 其他屬性,如果您使用的是合法的屬性名稱,就能夠返回對應的值。如何才是合法的屬性?請參閱HTML標準。
第二個參數為特征字符串,如果匹配多個,只能返回第一個元素的值;
例如,獲得淘寶貨物價格:
Plugin price=Web.HtmlGet("text","id:id_Price")
獲取某個表單文本的值
Plugin email=Web.HtmlGet("value","name:Email")
2.4.RunJS命令
RunJS命令提供了直接運行Javascript的功能,如果您對JS非常熟悉,就能夠極大的擴展WQM的功能。
RunJS命令支持兩中執行方式,第一個參數設置為0時,能夠執行一段沒有返回值的Javascript,
例如:
RunJS(0,"alert('hello');")
第一個參數設置為1時,能執行一段js并返回由return語句返回的值,返回值為字符串類型;
例如:返回Html文檔的title;
RunJS(1,"var t=document.title;return t;")
如果您分析到網頁中某個按鈕實際上就是執行了一個函數,例如
<input type="Button" … />
您就可以直接調用
RunJS(0,"dosomething();")
JQuery的支持,網頁按鍵精靈集成了Jquery1.3.2,為了不與其他JQ的庫發生沖突,使用了wqmjq來代替$操作符,如果您需要直接使用JQ來操作網頁,可使用wqmjq來執行Jquery語句:
eb組態,開發儀表組件echarts。
首先我們登陸系統就會看到新增的組件管理選項 如下圖:
點擊添加組件選擇2D組件我們就可以建立一個自己的組件了
《組件設計器》由 基礎設置(包括名稱 code 類型 狀態 icon 次序號 )HTML編輯區域 CSS編輯區域 JS編輯區域 和預覽區域組成。
首先我們給組件 起一個‘名字’ 和 ‘code’,在url輸入框中可以給組件設置一個icon。點擊保存系統會為我們建立一個組件模板。
由于web組態是由vue開發的所以開發組件也需要vue的的基礎知識。建議去看下vue的教程及生命周期,以方便開發組件。以下我附上組件代碼。
我們就開始設計一個炫酷的按鈕作為例子
HTML代碼如下:
<a href="#" class="btn123" :style="imrstyle" v-show="controlProp.commProp.visible">{{controlProp.textProp.text}}</a>
這里:
style="imrstyle":樣式 在web組態設計器中呈現的樣式
v-show="controlProp.commProp.visible":可見性 在web組態設計器中可實現顯示或閃爍
{{controlProp.textProp.text}}:文本 對應組件的文本屬性
更多屬性請參考:http://krmes.com:8000/md/design/#%E7%BB%84%E4%BB%B6%E5%9F%BA%E7%A1%80%E5%B1%9E%E6%80%A7
JS代碼如下:
export default {
props: {
controlProp: Object,
controlImports: Object,
previewId: String // 頁面容器的id,若控件在頁面容器中 用來區分生成canvas的元素
},
data() {
return {
myCharts: null,
}
},
mounted() {
let echarts = this.controlImports['echarts']
// 基于準備好的dom,初始化echarts實例
let box
if (this.previewId) {
box = $('.' + this.previewId + ' #' + this.controlProp.commProp.id)[0]
} else {
box = $('#' + this.controlProp.commProp.id)[0]
}
this.myCharts = echarts.init(box)
this.initCharts()
},
computed: {
imrstyle: function () {
return {
position: 'absolute',
width: this.controlProp.commProp.width + 'px',
height: this.controlProp.commProp.height + 'px',
// left: this.controlProp.commProp.x + 'px',
// top: this.controlProp.commProp.y + 'px',
'background-color': this.controlProp.commProp.backgroundColor,
'border': this.controlProp.commProp.borderwidth + 'px ' + this.controlProp.commProp.borderstyle + ' ' + this.controlProp.commProp.bordercolor,
'animation': this.controlProp.commProp.isFlash ? 'myfirst 1s infinite' : '',
'-webkit-animation': this.controlProp.commProp.isFlash ? 'myfirst 1s infinite' : '',
'transform': 'rotate(' + this.controlProp.commProp.angle + 'deg)',
'box-shadow': this.controlProp.spProp.isShowShadow ? '10px 0px 10px rgba(0,0,0,0.9)' : 'none'
}
}
},
watch: {
'controlProp.commProp.width': {
handler: function () {
this.myCharts.resize()
}
},
'controlProp.commProp.height': {
handler: function () {
this.myCharts.resize()
}
},
'controlProp.spProp.echartsOption'(val) {
this.initCharts()
},
'controlProp.spProp.value'(val) {
this.setValue()
},
'controlProp.spProp.name'(val) {
this.setValue()
},
'controlProp.spProp.max'(val) {
this.setValue()
},
},
created() {
console.log('echarts')
this.controlProp.spProp.update = this.update
},
methods: {
initCharts() {
//準備數據
let category = [{
name: this.controlProp.spProp.name,
value: this.controlProp.spProp.value
}];
let total = this.controlProp.spProp.max; //數據總數
let datas = [];
category.forEach(value => {
datas.push(value.value);
});
// 使用剛指定的配置項和數據顯示圖表。
let option = eval('(' + this.controlProp.spProp.echartsOption + ')')
option.xAxis.max = total
option.yAxis.data = category
option.series[0].data = category
option.series[1].data = [total, total, total, total]
option.series[1].symbolBoundingData = total
option.series[2].data = datas
option.series[2].label.normal.formatter = category[0].value + '%'
option.series[2].symbolBoundingData = total
option.series[3].data = [total, total, total, total]
option.series[4].data = [total, total, total, total]
this.myCharts.setOption(option, true);
},
setValue() {
//準備數據
let category = [{
name: this.controlProp.spProp.name,
value: this.controlProp.spProp.value
}];
let total = this.controlProp.spProp.max; //數據總數
let datas = [];
category.forEach(value => {
datas.push(value.value);
});
// 使用剛指定的配置項和數據顯示圖表。
let option = eval('(' + this.controlProp.spProp.echartsOption + ')')
option.xAxis.max = total
option.yAxis.data = category
option.series[0].data = category
option.series[1].data = [total, total, total, total]
option.series[1].symbolBoundingData = total
option.series[2].data = datas
option.series[2].label.normal.formatter = category[0].value + '%'
option.series[2].symbolBoundingData = total
option.series[3].data = [total, total, total, total]
option.series[4].data = [total, total, total, total]
//更新echarts
this.myCharts.setOption(option);
},
update() {
this.initCharts()
},
initImports() {
return {
'echarts': 'echarts'
}
},
initProp() {
return {
commProp: { // 基礎屬性
width: 600,
height: 60
},
textProp: {
padding: 0,
margin: 0
},
spProp: { // 特殊屬性
name: '進度',
value: 80,
max:100,
echartsOption: `{
xAxis: {
max: total,
splitLine: {
show: false
},
axisLine: {
show: false
},
axisLabel: {
show: false
},
axisTick: {
show: false
}
},
grid: {
left: 50,
top: 0, //設置條形圖的邊距
right: 50,
bottom: 0
},
yAxis: [{
type: "category",
inverse: false,
data: category,
axisLine: {
show: false
},
axisTick: {
show: false
},
axisLabel: {
show: false
}
}],
series: [{
//內
type: "bar",
barWidth: 28,
legendHoverLink: false,
silent: true,
itemStyle: {
color: {
type: "linear",
x: 0,
y: 0,
x2: 1,
y2: 0,
colorStops: [{
offset: 0,
color: "#0097ff" // 0% 處的顏色
},
{
offset: 0.4,
color: "#6dffe1" // 100% 處的顏色
},
{
offset: 0.8,
color: "#9d6fff" // 100% 處的顏色
}
]
}
},
label: {
normal: {
show: true,
position: "left",
formatter: "{b}",
offset: [0, 2], //設置右邊數據位置
textStyle: {
color: "#0097ff",
fontSize: 14,
fontWeight: 600
}
}
},
data: category,
z: 1,
animationEasing: "elasticOut"
},
{
// 分隔
type: "pictorialBar",
itemStyle: {
normal: {
color: "#07314a"
}
},
symbolRepeat: "fixed",
symbolMargin: 2,
symbol: "rect",
symbolClip: true,
symbolSize: [3, 28],
symbolPosition: "start",
symbolOffset: [3, -4],
symbolBoundingData: total,
data: [total, total, total, total],
z: 2,
animationEasing: "elasticOut",
},
{
//外邊框
type: "pictorialBar",
symbol: "rect",
symbolBoundingData: total,
itemStyle: {
normal: {
color: "none"
}
},
label: {
normal: {
formatter: "80"+"%",
show: true,
position: "right",
offset: [5, -3], //設置右邊數據位置
textStyle: {
color: "#0097ff",
fontSize: 14,
fontWeight: 600
}
}
},
data: datas,
z: 0,
animationEasing: "elasticOut"
},
{
name: "外框",
type: "bar",
barGap: "-130%", // 設置外框粗細
data: [total, total, total, total],
barWidth: 45,
itemStyle: {
normal: {
barBorderRadius: [5, 5, 5, 5],
color: "#07314a", // 填充色
barBorderColor: "#1588D1", // 邊框色
barBorderWidth: 3, // 邊框寬度
}
},
z: 0
},
{
type: 'scatter',
name: '條形',
symbol: 'roundRect',
symbolSize: [7,20],
symbolOffset: [3, -5],
symbolKeepAspect: true,
itemStyle: {
normal: {
color: "#1588D1"
}
},
data: [total, total, total, total],
}
]
}`,
update: null
},
spPropSetting: [ // 特殊屬性
{ label: '名稱', type: 'textinput', group: '特殊', valuename: 'name' },
{ label: '數值', type: 'numberinput', group: '特殊', valuename: 'value' },
{ label: '最大值', type: 'numberinput', group: '特殊', valuename: 'max' },
]
}
}
}
}
這里需要注意:
initProp():方法中實現對組件的 基礎屬性 文本屬性 特殊屬性的初始化配置
watch:中監聽'controlProp.spProp.value'屬性,這樣就可以使用web組態中的變量綁定功能,實現實時顯示數值。
更多屬性配置參考:http://krmes.com:8000/md/design/#%E7%BB%84%E4%BB%B6%E5%9F%BA%E7%A1%80%E5%B1%9E%E6%80%A7
點擊保存這樣我們設計的組件就顯示出來了!是不是很簡單。
這樣在我們的web組態中就可以使用我們自定義的儀表盤組件了!
?選擇框在HTML中的一般形式:
<select name="location" id="selLocation">
<option value="Sunnyvalue,CA">Sunnyvalue</option>
<option value="Los Angeles,CA">Los Angeles</option>
<option value="Mountain View,CA">Mountain View</option>
<option value="">China</option>
<option>Australia</option>
</select>
select的value有以下幾種情況:
每一個option都有以下的屬性:
通過以下方式訪問:
var text = select.options[0].text;
var value = select.options[0].value;
var index = select.options[0].index;
var label = select.options[0].label;
var selected = select.options[0].selected;
select的change事件與其他的不一樣,只要選中了選項就會觸發。其他控件的change事件是在值被修改且焦點離開當前字段時才會觸發。
通過selectedIndex可以獲得選中項的序號index,通過下面代碼可以得到被選中項的text:
var select = document.getElementById("selLocation");
var seleIndex = select.selectedIndex; // 得到被選中option的序號
var selectedOption = select.options[seleIndex]; // 通過序號來取得選中的項
alert(selectedOption.text); // 顯示選中項的文本
也可以通過設置selectedIndex來使某個option被選中:
select.selectedIndex = 1;
還可以設置某個option的selected = true來表示某個選項被選中:
select.options[1].selected = true;
如果select是多選的,可以通過循環遍歷來確定哪些項被選中了:
function getSelectedOptions(selectbox) {
var result = new Array();
var option = null;
for (var i=0,len=selectbox.options.length;i<len;i++){
option = selectbox.options[i];
if (option.selected){
result.push(option);
}
}
return result;
}
var selectbox = document.getElementById("selLocation");
// 創建元素
var newOption = document.createElement("option");
// 為元素文本的子節點
newOption.appendChild(document.createTextNode("新增加的option"));
newOption.setAttribute("value","newValue");
// 將新的節點掛到select下面
selectbox.appendChild(newOption);
可以使用以下方式移除某一項:
selectbox.removeChild(selectbox.options[0]);
selectbox.remove(0);
selectbox.options[0] = null;
在這里還編制了一個函數可以用來清除所有option:
// 移除所有select的option項
function clearSelectbox(selectbox) {
var len = selectbox.options.length;
for (i=len;i>0;i--){
selectbox.remove(i);
}
}
可以使用appendChild將option從一個select移動到另一個select下面。
var selectbox1 = document.getElementById("selectbox1");
var selectbox2 = document.getElementById("selectbox2");
selectbox2.appendChild(selectbox1.options[1]);
移動與移除option會重排index,使用insertBefore方法還能移動位置:
var optionToMove = selectbox1.options[1];
selectbox1.insertBefore(optionToMove,selectbox1.options[optionToMove.index-1]);
*請認真填寫需求信息,我們會在24小時內與您取得聯系。