preLoadFile.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. function simulateTyping(searchBox, text, callBack) {
  2. if (!searchBox) return;
  3. // 确保搜索框获得焦点
  4. searchBox.focus();
  5. // 模拟逐个字符输入
  6. text.split('').forEach((char, index) => {
  7. setTimeout(() => {
  8. // 创建键盘事件
  9. const keyDownEvent = new KeyboardEvent('keydown', {
  10. key: char,
  11. code: `Key${char.toUpperCase()}`,
  12. bubbles: true
  13. });
  14. const keyPressEvent = new KeyboardEvent('keypress', {
  15. key: char,
  16. bubbles: true
  17. });
  18. const keyUpEvent = new KeyboardEvent('keyup', {
  19. key: char,
  20. bubbles: true
  21. });
  22. // 触发事件
  23. searchBox.dispatchEvent(keyDownEvent);
  24. searchBox.dispatchEvent(keyPressEvent);
  25. // 插入字符
  26. document.execCommand('insertText', false, char);
  27. searchBox.dispatchEvent(keyUpEvent);
  28. // 如果是最后一个字符,触发搜索
  29. if (index === text.length - 1) {
  30. const inputEvent = new Event('input', { bubbles: true });
  31. searchBox.dispatchEvent(inputEvent);
  32. }
  33. }, index * 100 + 500); // 100ms 间隔模拟打字
  34. });
  35. setTimeout(() => {
  36. // 触发所有可能的事件
  37. const events = ['input', 'change', 'keyup', 'keydown', 'keypress', 'blur', 'focus'];
  38. events.forEach(eventType => {
  39. const event = eventType.startsWith('key')
  40. ? new KeyboardEvent(eventType, { bubbles: true })
  41. : new Event(eventType, { bubbles: true });
  42. searchBox.dispatchEvent(event);
  43. });
  44. if (callBack) callBack()
  45. }, text.split('').length * 100);
  46. }
  47. function simulateFullClick(element) {
  48. // 鼠标按下
  49. const mouseDownEvent = new MouseEvent('mousedown', {
  50. view: window,
  51. bubbles: true,
  52. cancelable: true,
  53. buttons: 1
  54. });
  55. // 鼠标抬起
  56. const mouseUpEvent = new MouseEvent('mouseup', {
  57. view: window,
  58. bubbles: true,
  59. cancelable: true,
  60. buttons: 1
  61. });
  62. // 点击事件
  63. const clickEvent = new MouseEvent('click', {
  64. view: window,
  65. bubbles: true,
  66. cancelable: true,
  67. buttons: 1
  68. });
  69. // 按顺序触发事件
  70. element.dispatchEvent(mouseDownEvent);
  71. element.dispatchEvent(mouseUpEvent);
  72. element.dispatchEvent(clickEvent);
  73. }
  74. function searchText(text, sendText) {
  75. const searchBox = document.querySelector('div[contenteditable="true"][aria-label="搜索输入内容文本框"]');
  76. if (document.querySelector('._ah_y.x1eu8d0j')) {
  77. document.querySelector('._ah_y.x1eu8d0j').click()
  78. }
  79. setTimeout(() => {
  80. simulateTyping(searchBox, text, () => {
  81. setTimeout(() => {
  82. const gridcellList = document.querySelectorAll('.x1n2onr6[role="gridcell"]')
  83. if (gridcellList.length > 0) {
  84. simulateFullClick(gridcellList[0].querySelector('._ak72'))
  85. setTimeout(() => {
  86. simulateTyping(document.querySelector('[aria-placeholder="输入消息"]'), sendText)
  87. }, 2000);
  88. }
  89. }, 2000);
  90. });
  91. }, 1000);
  92. }