31
2021
07

Remark to FTIR Id

~async function(){  //~代表一開始執行這個函式,結尾要有(),async代表這個函式是非同步的。

  var delay = (ms) => { //js設定 timeSleep方法,確保程式不會運行太快。

return new Promise(function(resolve){

setTimeout(resolve,ms); //過了一段時間才可以resolve這個承諾。

    }); }; 

//用RegExp 取得component 總數。

var No_of_ComponentsparseInt(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加載下一頁數據,一般都很快完成。

 



« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。