~async function(){ //~代表一開始執行這個函式,結尾要有(),async代表這個函式是非同步的。 var delay = (ms) => { //js設定 timeSleep方法,確保程式不會運行太快。 return new Promise(function(resolve){ setTimeout(resolve,ms); //過了一段時間才可以resolve這個承諾。 }); }; //用RegExp 取得component 總數。 var No_of_Components = parseInt(document.querySelector("#divDetail > span:nth-child(1)").textContent.match(/([\d]+)\,/)[1]); console.log(No_of_Components); //顯示component 數目。 var count = 1; //count page,一開始執行第一頁,所以設為1。 var N=0; //換頁指令,當去到該頁的最後一個component,就會設為1,進行換頁。 while (parseInt(document.querySelector("#divDetail > span:nth-child(1) > label:nth-child(2)").textContent)==1) { document.querySelector("#divDetail > span:nth-child(1) > label:nth-child(2)").click(); //當第1頁可以按時,即表示你可能不在第1頁,就幫你按下第1頁,避免出錯。 delay(1000); //之後延遲1秒,因為program 換頁需要時間。 } for(var i=0; i<No_of_Components; i++) { //基本for循環。 if(N==1 && No_of_Components<=60) { //如果N=1,就按下一頁,因為如果component數目不同,換頁定位是不同的,需要使用2個函式處理,這次用第1個函式。 await nextPage(delay); //await 即表示要等待該項指令執行完成,才可以進行下一步。 var N=0 //因為已經按下一頁,所有要設定返N=0,避免再次換頁。 }; if(N==1 && No_of_Components>60) {//如果N=1,就按下一頁,因為如果component數目不同,換頁定位是不同的,需要使用2個函式處理,這次用第2個函式。 await nextPage2(count,delay); //await 即表示要等待該項指令執行完成,才可以進行下一步。 count++ //換完頁後要加count page, 下一次換頁需要用count page定位。 var N=0 //因為已經按下一頁,所有要設定返N=0,避免再次換頁。 }; if(i%30==29) //因為開始是i=0,如果i除以30餘29,即表示處理該頁最後一個component = true 時, var N=1; //就要設N=1,下一次就要換頁。 if(document.querySelector("#tableEntry > tbody > tr:nth-child("+(i%30+3)+") > td:nth-child(2) > button").disabled) { //灰左的component就直接skip,不作處理。 await delay(50); //理論上可以不設延遲時間,延遲些少避免出錯。 continue; //直接skip下面操作,返回for迴圈的下一步。 } // 取得需要處理的component number, program 設定定位由3開始,即定位3代表該頁的第1個component number,定位32代表該頁的第30個component number,所以用i%30+3餘數定位。 var Number = parseInt(document.querySelector("#tableEntry > tbody > tr:nth-child("+(i%30+3)+") > td:nth-child(1) > label").textContent); var remark = "#taRemark_"+ Number; //remark 在該component number中的定位。 var FTIR_Id ="#txtFTIRMapID_"+ Number; // FTIR ID 在該component number中的定位。 var Text = document.querySelector(remark).value; //取得該component number remark中的值。 console.log(Text); //顯示該component number remark中的值。 document.querySelector(FTIR_Id).value = Text; //將remark中的值複製落FTIR ID 位置。 document.querySelector(remark).value = ""; //將原先在remark中的值清空。 await delay(50); //稍微延遲,防止程式跑太快,理論上可以不設延遲時間。 } console.log("finished"); //當for循環完成時,即處理完所有components,就顯示完成。 }(); //結尾要加() 。 async function nextPage(delay) { //按第2頁函式,component 總數<=60。 console.log("Going to page 2"); do { //do, while 會先做一次,然後視乎 while true or false 而繼續或者中止。 await document.querySelector("#divDetail > span:nth-child(1) > label").click(); //按下第2頁,並等待按下完成。 await delay(100); //延遲0.1秒。 } while (document.querySelector("#divDetail > span:nth-child(1) > label").textContent==2); //有時program按下一頁時沒反應,所以用while,直至按到以及顯示下一頁為止。 delay (1000); //延遲1秒,等待program加載下一頁數據,一般都很快完成。 } async function nextPage2(count,delay) {//按下一頁函式,component 總數<=60。 console.log("Going to page " + (count+1)); //開始時 count = 1, 所以按第2頁時就會顯示2,按完count 會加1,之後原理一樣。 do { //do, while 會先做一次,然後視乎 while true or false 而繼續或者中止。 var page = "#divDetail > span:nth-child(1) > label:nth-child("+(count+1)+")"; //按下一頁的定位,頁數會隨count不同而改變。 await document.querySelector(page).click(); //按下一頁,並等待按下完成。 await delay(100); //延遲0.1秒。 } while (document.querySelector(page).textContent==(count+1));//有時program按下一頁時沒反應,所以用while,直至按到以及顯示下一頁為止。 delay (1000); //延遲1秒,等待program加載下一頁數據,一般都很快完成。 }
31
2021
07
Remark to FTIR Id
作者:john | 分类:Programme | 浏览:27 | 评论:0
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。