debug.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. let puppeteer = false;
  2. try{
  3. puppeteer = require('puppeteer');
  4. }
  5. catch(err)
  6. {
  7. console.log('To use the debugging function, you need to install the puppeteer module through "npm install puppeteer" command.');
  8. process.exit();
  9. }
  10. const { spawn, fork } = require('child_process');
  11. let n = 2;
  12. let entry_js = process.argv[n]; ++n;
  13. let form_name = process.argv[n]; ++n;
  14. let resource = process.argv[n]; ++n;
  15. let x = process.argv[n]; ++n;
  16. let y = process.argv[n]; ++n;
  17. let w = process.argv[n]; ++n;
  18. let h = process.argv[n]; ++n;
  19. let cp = spawn('node', ['--inspect-brk', entry_js, form_name, resource]);
  20. let g_first = true;
  21. let g_output = '';
  22. cp.stderr.on('data', data=>{
  23. if(data.toString() === '') return;
  24. g_output += data;
  25. if(data.toString().indexOf('Debugger attached') !== -1)
  26. {
  27. process.send('ready');
  28. }
  29. if(g_output.indexOf('For help, see: https://nodejs.org/en/docs/inspector') !== -1)
  30. {
  31. if(g_first)
  32. {
  33. g_first = false;
  34. let uuid = false;
  35. const match = g_output.match(/ws:\/\/[^/]+\/([\w-]+)/);
  36. if(match)uuid = match[1];
  37. if(!uuid) process.exit();
  38. (async () => {
  39. const browser = await puppeteer.launch({
  40. ignoreHTTPSErrors : true,
  41. headless: false, // 确保可视化模式
  42. args: [
  43. '--no-sandbox',
  44. '--disable-infobars',
  45. `--window-size=${w},${h}`,
  46. `--window-position=${x},${y}`
  47. //`--window-size=1024,720`,
  48. //`--window-position=328,144`
  49. //'--start-maximized'
  50. ]
  51. });
  52. cp.on('close', function(code){
  53. browser.close();
  54. });
  55. // 获取默认页面(浏览器启动时的初始标签页)[[13, 20]]
  56. const pages = await browser.pages();
  57. const defaultPage = pages[0]; // 默认页面是页面列表的第一个元素
  58. await defaultPage.goto('chrome://inspect', {
  59. waitUntil: 'domcontentloaded' // 确保DOM就绪
  60. }); // 使用默认页面导航[[10, 13]]
  61. await defaultPage.waitForSelector('#node-frontend'); // 确保按钮加载完成
  62. await defaultPage.click('#node-frontend'); // 点击按钮
  63. defaultPage.close();
  64. })();
  65. }
  66. }
  67. });