用灵犀做油猴脚本填写react日期选择框

wils
wils Lv.4 核心创作者

Lv.4 核心创作者

刚才,在天浩大佬的提醒下,翻出了去年用来填写react网页上,日期时间选择框的脚本,发现早已不能用了

自己胡乱尝试了半天,没有头绪,直接问灵犀🤣

  • 给出一个wps在线表单的地址,让灵犀尝试用油猴脚本的方式,填写日期时间选择框,尽量避免模拟鼠标点击

function getFiber(el) {
  for (const k in el) {
    if (k.startsWith('__reactFiber$') || k.startsWith('__reactInternalInstance$'))
      return el[k];
  }
}

window.setFormDate = function(pickerEl, y, m, d, hh, mm) { // m 为自然月,11月传11
  let onChange = null, f = getFiber(pickerEl);
  while (f) {
    const p = f.memoizedProps || {};
    if (typeof p.onChange === 'function' && p.picker !== undefined) { onChange = p.onChange; break; }
    f = f.return;
  }
  if (!onChange) throw new Error('未找到picker onChange');

  const ts = new Date(y, m - 1, d, hh, mm, 0, 0).getTime(); // 本地时区
  onChange({ valueOf: () => ts });
}

这逆向做的,简直漂亮🎉

我也是在灵犀的帮助下,才能稍微看懂

  • 先找到日期选择框dom对应的fiber

  • 再顺着fiber找到输入日期时触发的onchange事件

  • 通过逆向得知,实际只用到参数的valueOf方法,所以伪造一个对象,传递需要填写的具体日期时间

自己用各种方法,填写日期后点击一次,都会变回原样

图中灵犀写的方法,一次修改成功,简直原汤化原食,哈哈🤣

海南省
浏览 53
收藏
3
分享
3 +1
+1
全部评论