OptionScript.ts 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. export const OptionScript = (
  2. request: any,
  3. sender: any,
  4. sendResponse: (response?: any) => void
  5. ) => {
  6. // 自动发送消息的函数
  7. const autoSendMessages = async (
  8. messages: string[],
  9. inputSelector: string,
  10. buttonSelector: string
  11. ) => {
  12. const results = [];
  13. // 逐条发送消息
  14. for (const message of messages) {
  15. // 点开弹窗
  16. // 获取输入框和按钮
  17. // 点击按钮搜索
  18. // 获取搜索结果
  19. // 搜索结果发送
  20. // 结果返回
  21. // 查找输入框和发送按钮
  22. const inputElement = document.querySelector(inputSelector) as
  23. | HTMLInputElement
  24. | HTMLTextAreaElement
  25. | null;
  26. const sendButton = document.querySelector(
  27. buttonSelector
  28. ) as HTMLElement | null;
  29. console.log(sendButton, "sendButton", message);
  30. if (!inputElement || !sendButton) {
  31. throw new Error("找不到输入框或发送按钮");
  32. }
  33. try {
  34. // 设置输入框的值
  35. inputElement.value = message;
  36. // 触发输入事件(有些网站需要)
  37. const inputEvent = new Event("input", { bubbles: true });
  38. inputElement.dispatchEvent(inputEvent);
  39. // 触发change事件(有些网站需要)
  40. const changeEvent = new Event("change", { bubbles: true });
  41. inputElement.dispatchEvent(changeEvent);
  42. // 点击发送按钮
  43. sendButton.click();
  44. // 记录发送的消息
  45. results.push({ message, status: "sent", timestamp: Date.now() });
  46. // 没有按顺序发送,输入框需存在值后按钮才会启用,设置disabled无效
  47. // 结束标识
  48. // 等待一段时间再发送下一条消息(可根据需要调整)
  49. await new Promise((resolve) => setTimeout(resolve, 10000));
  50. } catch (error) {
  51. results.push({
  52. message,
  53. status: "error",
  54. error: error instanceof Error ? error.message : "未知错误",
  55. timestamp: Date.now(),
  56. });
  57. }
  58. }
  59. return results;
  60. };
  61. console.log("OptionScript");
  62. autoSendMessages(
  63. request.messages ||
  64. Array.from({ length: 10 }, (_, i) => (i + 1).toString()),
  65. request.inputSelector,
  66. request.buttonSelector
  67. )
  68. .then((results) => {
  69. sendResponse({ success: true, results });
  70. })
  71. .catch((error) => {
  72. sendResponse({ success: false, error: error.message });
  73. });
  74. // 异步响应,需要返回 true
  75. return true;
  76. };