Firbase批量创建表单

通过创建excel批量上传表单

目前為 2023-04-23 提交的版本,檢視 最新版本

// ==UserScript==
// @name         Firbase批量创建表单
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  通过创建excel批量上传表单
// @author       zjl
// @match        https://console.firebase.google.com/project/*
// @icon         https://www.gstatic.com/mobilesdk/160503_mobilesdk/logo/favicon.ic
// @require      https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.js
// @require      https://cdn.bootcdn.net/ajax/libs/xlsx/0.18.5/xlsx.core.min.js
// @grant        GM_openInTab
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        window.onurlchange
// @grant        unsafeWindow
// @license      MIT
// ==/UserScript==

(function() {
  'use strict';
  // Your code here...
  var goLink
  var result
  var count=0
  var rate=500
  var reloadFalg=true
  if (window.onurlchange === null) {
     window.addEventListener('urlchange', async (info) => {
      reloadFalg=false
      var { url } = info
      if (/index=(\d+)/.exec(url)){
        var index = /index=(\d+)/.exec(url)[1]
        var results = await GM.getValue("excel", []);
        result=results[index]
      }
      if (
        RegExp(
          /https:\/\/console\.firebase\.google\.com\/project\/[\w-]+\/messaging/
        ).test(url)
      ) {
        checkObj('.filter-chips-row', function (obj) {
          const regex = /\/project\/(.+?)\//
          const match = url.match(regex)
          const projectId = match[1]
          goLink = `https://console.firebase.google.com/project/${projectId}/notification/compose`
          addExcel()
        })
      } else if (
        RegExp(
          /https:\/\/console\.firebase\.google\.com\/project\/[\w-]+\/notification\/compose/
        ).test(url)
      ) {
        if (/campaignId=(\d+)/.exec(url)){
          return
        }else{
          console.log('enter-do')
          //执行函数
          checkObj('.banner-content', function (obj) {
            Do()
          })
        }
      }
    },true)
    let timer=setTimeout(()=>{
      if (reloadFalg){
        window.location.reload()
          clearTimeout(timer)
      }
    },5000)
  }
  function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
  }
  async function checkObj(selection, fn) {
     while (true) {
      // 每隔一段时间刷新页面
      await sleep(200);
      let obj = $(selection).eq(0) //声明要查询的对象
      if (obj) {
        $('.mat-drawer-backdrop.mat-drawer-shown.ng-star-inserted').click()
        //判断对象是否存在,存在则开始设置值
          fn(obj)
         break;
      }
    }
  }
  function padding(fn) {
    count+=1
    var timer = setTimeout(() => {
      fn()
      clearTimeout(timer)
    }, count*rate)
  }
  function formatDate(serial, format) {
    var utc_days = Math.floor(serial - 25569);
    var utc_value = utc_days * 86400;
    var date_info = new Date(utc_value * 1000);
    var fractional_day = serial - Math.floor(serial) + 0.0000001;
    var total_seconds = Math.floor(86400 * fractional_day);
    var seconds = total_seconds % 60;
    total_seconds -= seconds;
    var hours = Math.floor(total_seconds / (60 * 60));
    var minutes = Math.floor(total_seconds / 60) % 60;

    var daytime = new Date(date_info.getFullYear(), date_info.getMonth(), date_info.getDate(), hours, minutes, seconds);
    var returnDate = date_info.getFullYear();
    returnDate += format + (date_info.getMonth() < 9 ? '0' + (date_info.getMonth() + 1) : (date_info.getMonth() + 1));
    returnDate += format + (date_info.getDate() < 10 ? '0' + date_info.getDate() : date_info.getDate());
    returnDate += " " + (daytime.getHours() < 10 ? '0' + daytime.getHours() : daytime.getHours());
    returnDate += ":" + (daytime.getMinutes() < 10 ? '0' + daytime.getMinutes() : daytime.getMinutes());
    return returnDate;
  }
   function step1() {
   return new Promise(resolve => {
      padding(() => {
        $('.message-title').focus()
        document.execCommand('inserttext', false, result['推送标题'])
      })
       padding(() => {
        $('.message-text').focus()
        document.execCommand('inserttext', false, result['推送文案'])
      })
      padding(() => {
        if (result['推送资源名称']){
          $('.message-label').focus()
          document.execCommand('inserttext', false, result['推送资源名称'])
        }
      })
      padding(()=>{
        $('.notification-image-input').focus()
        document.execCommand('inserttext', false,  result['图片链接'])
      })
      padding(() => {
        $('.mat-focus-indicator .mat-stepper-next').eq(0).click()
      })
      resolve()
    });

  }
  function step2() {
   return new Promise(resolve => {
      checkObj('.mat-select-trigger',  () => {
        padding(() => {
          $('.mat-select-trigger').eq(0).click()
        })
        padding(() => {
          $(`.mat-option-text:contains(${result["定向应用"]})`).eq(0).click()
        })
        if (result["用户选择1"]){
          padding(() => {
            $('.mat-focus-indicator.and-button.mat-button').eq(0).click()
          })
          padding(()=>{
            $('.mat-focus-indicator.mat-menu-trigger.trigger.mat-button.mat-button-base')
            .eq(1)
            .click()
            $(`option-title:contains(${result["用户选择1"]})`).click()
          })
          padding(() => {
            $('.mat-select-min-line').eq(0).click()
            $(`.mat-option-text:contains(${result["用户选择2"]})`).click()
          })

          padding(() => {
            $('.mat-select-min-line').eq(1).click()
            let clickElement=result["用户选择3"].split('/')
            for(let i=0;i<clickElement.length;i++){
              $(`enumerated-option:contains(${clickElement[i]})`).click()
            }
            $('.cdk-overlay-backdrop-showing').eq(0).click()
          })
          padding(()=>{
            $('.cdk-overlay-backdrop-showing').eq(0).click()
          })
        }
        padding(() => {
          $('.mat-focus-indicator.mat-stepper-next').eq(1).click()
        })
        padding(()=>{
          $('.cdk-overlay-backdrop-showing').eq(0).click()
        })
        resolve()
      })
    });


  }
  function step3() {
    var monthEnglish=new Map()
    monthEnglish.set("01","JAN")
    monthEnglish.set("02","FEB")
    monthEnglish.set("03","MAR")
    monthEnglish.set("04","APR")
    monthEnglish.set("05","MAY")
    monthEnglish.set("06","JUN")
    monthEnglish.set("07","JUL")
    monthEnglish.set("08","AUG")
    monthEnglish.set("09","SEP")
    monthEnglish.set("10","OCT")
    monthEnglish.set("11","NOV")
    monthEnglish.set("12","DEC")
    let PushDateTime=formatDate((result['推送日期']-0)+( result['推送时间']-0),'/')
    let PushDate=PushDateTime.split(" ")[0]
    let PushTime=PushDateTime.split(" ")[1]
    console.log(PushTime)
    var nowDay=PushDate.split('/')[2]
    var nowMonth=PushDate.split('/')[1]
    var nowMonthFlag= monthEnglish.get(`${nowMonth+''}`)
   return new Promise(resolve => {
      padding(() => {
        $('.mat-menu-trigger.can-recur').click()
      })
      padding(() => {
        $('.mat-focus-indicator.mat-menu-trigger.mat-menu-item').click()
      })
      padding(()=>{
        for(let i=1;i<=12;i++){
          if ($(`tr:contains(${nowMonthFlag})`).length>0){
            break
          }else{
            $('.mat-calendar-next-button').eq(0).click()
         }
        }
      })
      padding(() => {
        $(`span:contains(${nowDay})`).eq(0).click()
      })
      padding(()=>{
        $('.c5e-input-container.dense.ng-star-inserted').eq(0).children(':first-child').attr('type','text')
        $('.c5e-input-container.dense.ng-star-inserted').eq(0).children(':first-child').val('')
        $('.c5e-input-container.dense.ng-star-inserted').eq(0).children(':first-child').focus()
        document.execCommand('inserttext', false,  PushTime+'')
        $('.mat-focus-indicator.mat-stepper-next').eq(2).click()
      })
      resolve()
    });

  }
  function step4(){
    return new Promise(resolve=>{
      padding(()=>{
        $('.c5e-input-element.trigger-btn').eq(0).click()
      })
      padding(()=>{
        $(`button:contains(${result['转化事件']})`).eq(0).click()
        $('.mat-focus-indicator.mat-stepper-next').eq(3).click()
      })
      resolve()
    })

  }
  function step5() {
    return new Promise(resolve=>{
      padding(()=>{
        window.scrollTo(0, document.documentElement.scrollHeight)
        $('.cdk-overlay-backdrop').remove()
        $('.cdk-overlay-connected-position-bounding-box').remove()
        document.querySelectorAll('.c5e-input-container.gcm-high-density-container.key')[0].childNodes[0].focus()
        document.execCommand('inserttext', false, result['自定义1'])
        document.querySelectorAll('.c5e-input-container.gcm-high-density-container.value')[0].childNodes[0].focus()
        document.execCommand('inserttext', false, result['自定义1-value'])
      })
      if(result['自定义2']){
        padding(()=>{
          $('.cdk-overlay-backdrop').remove()
          $('.cdk-overlay-connected-position-bounding-box').remove()
          document.querySelectorAll('.c5e-input-container.gcm-high-density-container.key')[1].childNodes[0].focus()
          document.execCommand('inserttext', false, result['自定义2'])
          document.querySelectorAll('.c5e-input-container.gcm-high-density-container.value')[1].childNodes[0].focus()
          document.execCommand('inserttext', false, result['自定义2-value'])
        })
      }

      padding(()=>{
        $('.cdk-overlay-backdrop').remove()
        $('.cdk-overlay-connected-position-bounding-box').remove()
        if ( $('label:contains(Apple badge)').length>0 ){
          console.log('eenter')
          padding(()=>{
            $('.cdk-overlay-backdrop').remove()
            $('.cdk-overlay-connected-position-bounding-box').remove()
            $('.mat-select-min-line').eq(1).click()
            $(`.mat-option:contains(${result['声音']})`).eq(0).click()
          })
          if (result['Apple Badge']){
            if (result['Apple Badge']==='Enabled'){
              padding(()=>{
                $('.cdk-overlay-backdrop').remove()
                $('.cdk-overlay-connected-position-bounding-box').remove()
                $('.mat-select-min-line').eq(2).click()
                $(`.mat-option:contains(${result['Apple Badge']})`).eq(0).click()
              })
              padding(()=>{
                $('.cdk-overlay-backdrop').remove()
                $('.cdk-overlay-connected-position-bounding-box').remove()
                document.querySelectorAll('.badge-count-input')[0].value=''
                document.querySelectorAll('.badge-count-input')[0].focus()
                document.execCommand('inserttext', false, result['Badge Count'])
              })
              padding(()=>{
                $('.cdk-overlay-backdrop').remove()
                $('.cdk-overlay-connected-position-bounding-box').remove()
                let expires_time=result['过期时间1']
                $('.mat-select-min-line').eq(3).click()
                $(`.mat-option-text:contains(${expires_time})`).eq(0).click()
                $('.mat-vertical-stepper-content').eq(4).click()
              })
              padding(()=>{
                $('.cdk-overlay-backdrop').remove()
                $('.cdk-overlay-connected-position-bounding-box').remove()
                let expires_day=result['过期时间2']
                $('.mat-select-min-line').eq(4).click()
                $(`.mat-option-text:contains(${expires_day})`).eq(0).click()
                $('.mat-vertical-stepper-content').eq(4).click()
                resolve()
              })
            }
            else{
              padding(()=>{
                $('.cdk-overlay-backdrop').remove()
                $('.cdk-overlay-connected-position-bounding-box').remove()
                $('.mat-select-min-line').eq(2).click()
              })
              padding(()=>{
                $('.cdk-overlay-backdrop').remove()
                $('.cdk-overlay-connected-position-bounding-box').remove()
                $(`.mat-option:contains(${result['Apple Badge']})`).eq(0).click()
                $('.mat-vertical-stepper-content').eq(4).click()
              })
              padding(()=>{
                $('.cdk-overlay-backdrop').remove()
                $('.cdk-overlay-connected-position-bounding-box').remove()
                let expires_time=result['过期时间1']
                $('.mat-select-min-line').eq(3).click()
                $(`.mat-option-text:contains(${expires_time})`).eq(0).click()
                $('.mat-vertical-stepper-content').eq(4).click()
              })
              padding(()=>{
                $('.cdk-overlay-backdrop').remove()
                $('.cdk-overlay-connected-position-bounding-box').remove()
                let expires_day=result['过期时间2']
                $('.mat-select-min-line').eq(4).click()
                $(`.mat-option-text:contains(${expires_day})`).eq(0).click()
                $('.mat-vertical-stepper-content').eq(4).click()
                resolve()
              })
            }
          }
        }else{
          console.log('else')
          padding(()=>{
            $('.cdk-overlay-backdrop').remove()
            $('.cdk-overlay-connected-position-bounding-box').remove()
            $('.mat-select-min-line').eq(0).click()
            $(`.mat-option:contains(${result['声音']})`).eq(0).click()
            $('.mat-vertical-stepper-content').eq(4).click()
          })
          padding(()=>{
            $('.cdk-overlay-backdrop').remove()
            $('.cdk-overlay-connected-position-bounding-box').remove()
            let expires_time=result['过期时间1']
            $('.mat-select-trigger').eq(2).click()
            $('.mat-option-text').filter(`span:contains(${expires_time})`).eq(0).click()
            $('.mat-vertical-stepper-content').eq(4).click()
          })
          padding(()=>{
            $('.cdk-overlay-backdrop').remove()
            $('.cdk-overlay-connected-position-bounding-box').remove()
            let expires_day=result['过期时间2']
            $('.mat-select-trigger').eq(3).click()
            $('.mat-option-text').filter(`span:contains(${expires_day})`).eq(0).click()
            $('.mat-vertical-stepper-content').eq(4).click()
            resolve()
          })
        }

      })

    })

  }
  function step6(){
    return new Promise(resolve=>{
      padding(() => {
        $('button:contains(Review)').eq(0).click()
      })
      padding(() => {
        $('button:contains(Publish)').eq(0).click()
      })
      resolve()
    })

  }
  async function Do() {
   await step1()
   await step2()
   await step3()
   await step4()
   await step5()
   await step6()
  }
  function getHeaderRow(sheet) {
    const headers = []
    const range = XLSX.utils.decode_range(sheet['!ref'])
    let C
    const R = range.s.r
    /* start in the first row */
    for (C = range.s.c; C <= range.e.c; ++C) {
      /* walk every column in the range */
      const cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })]
      /* find the cell in the first row */
      // let hdr = 'UNKNOWN ' + C // <-- replace with your desired default
      if (cell && cell.t) {
        let hdr = XLSX.utils.format_cell(cell)
        headers.push(hdr)
      }
    }
    return headers
  }
  function openTab(index) {
    GM_openInTab(`${goLink}?index=${index}`)
  }
  function getExcelData(rawFile) {
    const reader = new FileReader()
    reader.onload = async (e) => {
      const data = e.target.result
      const workbook = XLSX.read(data, { type: 'array' })
      const firstSheetName = workbook.SheetNames[0]
      const worksheet = workbook.Sheets[firstSheetName]
      const header = getHeaderRow(worksheet)
      const results = XLSX.utils.sheet_to_json(worksheet)
      console.log(header, results)
      await GM.setValue("excel",results);
      for (let i = 0; i < results.length; i++) {
        openTab(i)
      }
    }
    reader.readAsArrayBuffer(rawFile)
  }
  function addExcel() {
    if ($('#upExcel')) {
      $('#upExcel').remove()
      $('#upExcelLabel').remove()
    }
    var button = document.createElement('input')
    button.setAttribute('type', 'file')
    button.setAttribute('id', 'upExcel')
    button.style.display = 'none'
    button.textContent = '上传excel'
    button.addEventListener('change', (event) => {
      getExcelData(event.target.files[0])
    })
    var label = document.createElement('label')
    label.setAttribute('for', 'upExcel')
    label.setAttribute('id', 'upExcelLabel')
    var conten = document.createElement('div')
    conten.setAttribute('id', 'uploadContent')
    conten.textContent = '上传Excel'
    label.append(conten)
    $('.ng-star-inserted').eq(0).prepend(label)
    $('.ng-star-inserted').eq(0).prepend(button)
    $('#uploadContent').css({
      width: '80px',
      'background-color': 'orange',
      'text-align': 'center',
      'font-size': '12px',
      'border-radius': '5px',
      padding: '5px 10px'
    })
  }
})();










QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址