Chrome как отключить ключевое слово отладчика или отключить паузу

1

Я знаю, что Never pause here, но это не работает для кода, подобного этому

setInterval(function(){
  eval('debugger;'+Math.random())
},1000)

Если я не могу найти setInterval, я не могу отключить паузу, это очень раздражает.

Есть ли какой-либо флаг или каким-то образом отключить его?

РЕДАКТИРОВАТЬ

Я нашел эти проблемы (DevTools: невозможно отключить точку останова, вызванную оператором "отладчик"), относятся к этой проблеме, в тестовом коде я нашел флаг --expose-debug-as debug, но как я могу использовать этот флаг для безголового,

chrome --expose-debug-as debug --headless --disable-gpu '<URL>' --repl
[0610/020053.677043:ERROR:headless_shell.cc(459)] Open multiple tabs is only supported when the remote debug port is set.
Теги:
google-chrome-devtools
google-chrome

2 ответа

1

Ну, единственный выбор, который у вас есть, - это ввести код на страницу, которая переопределяет eval и удаляет ее.

(function () {
  var _eval = window.eval;
  window.eval = function (str) {
    _eval(str.replace(/debugger;/,""));
  };
}());
eval("debugger;alert('a');")
  • 0
    Звучит хорошо, я также пытаюсь очистить все интервалы, замена eval может привести к сбою скрипта, потому что некоторые компиляторы используют eval для шифрования кода.
  • 0
    Обратите внимание, что переопределение eval нарушит код, который создает переменные вне его внутренней области, т. Е. В области вызываемого объекта - это может сделать только встроенный eval .
0

Я сделал это, отключив интервал и тайм-аут, некоторые сайты используют это, чтобы другие не наблюдали за кодом.

Я вставляю код перед загрузкой, используя хром без головы

Начать без головы

chrome --headless --disable-gpu <URL> --remote-debugging-port=9222

Другой сеанс оболочки

yarn add chrome-remote-interface

test.es6

const CDP = require('chrome-remote-interface');
async function test() {
  const protocol = await CDP({port: 9222});
  // Extract the DevTools protocol domains we need and enable them.
  // See API docs: https://chromedevtools.github.io/devtools-protocol/
  const {Page, Runtime, Debugger, Log, Console} = protocol;
  try {
      await Promise.all([
          Page.enable(),
          Runtime.enable(),
          Log.enable(),
          Console.enable(),
          Debugger.disable(),
      ]);
  } catch (e) {
      console.log('Failed', e)
      return
  }

  Log.entryAdded(({entry: e}) =>
      console.log('${new Date(e.timestamp).toISOString()} ${e.source}:${e.level} ${e.text}')
  );
  Console.messageAdded(({message: e}) =>
      console.log('${new Date().toISOString()} ${e.source}:${e.level} ${e.text}')
  )
  Page.navigate({url: URL_HERE});
  // Inject code,disable setInterval and setTimeout
  Runtime.executionContextCreated(async ({context}) => {
      console.log('executionContextCreated')
      let result = await Runtime.evaluate({
          expression: '
          window._si=window.setInterval
          window.setInterval=(...args)=>{
              let id = 1//window._si.apply(window,args)
              console.warn(\'setInterval:\${args}\',)
              return id
          }

          window._st=window.setTimeout
          window.setTimeout=(...args)=>{
              let id = 1//window._st.apply(window,args)
              console.warn(\'setTimeout:\${args}\',)
              return id
          }
          ;location.href
          ',
          contextId: context.id,
      });
      console.log('executionContextCreated', result)
  });
  // Wait for window.onload before doing stuff.
  Page.loadEventFired(async () => {

      // Debugger.setSkipAllPauses(true)
      const js = '
      console.log('Page load');
      document.querySelector('title').textContent
      ';
      // Evaluate the JS expression in the page.
      const result = await Runtime.evaluate({expression: js});
      console.log('Title of page: ' + result.result.value);
      protocol.close();
  });
}
test()

После сценария откройте "localhost: 9222" в chrome, проверьте страницу, отладчик не запустится.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню