I did some research on this; Below are some of my findings:
When evaluating:
const result = await Runtime.evaluate({ expression: 'console.log("aaa")' });
The result is always:
{result: {type: 'undefined'}}
However, the following expression:
const result = await Runtime.evaluate({expression: 'window.location.toString()'});
Return:
{result: {type: 'string', value: ' https://www.chromestatus.com/features'}}
, , :
const result = await Runtime.evaluate({ expression: 'console.log' });
:
{result: {type: 'function', className: "", description: 'function log() {[native code]}', objectId: '{ "injectedScriptId": 2, "id": 1}'}}
, , console.log messageAdded .
, Console messageAdded, , .
, :
const chromeLauncher = require('chrome-launcher');
const CDP = require('chrome-remote-interface');
const file = require('fs');
(async function() {
async function launchChrome() {
return await chromeLauncher.launch({
chromeFlags: [
'--headless',
'--disable-gpu'
]
});
}
const chrome = await launchChrome();
const protocol = await CDP({
port: chrome.port
});
const {
DOM,
Network,
Page,
Emulation,
Runtime,
Console
} = protocol;
await Promise.all([Network.enable(), Page.enable(), DOM.enable(), Runtime.enable(), Console.enable()]);
await Page.navigate({url: 'https://www.chromestatus.com/'});
Console.messageAdded((result) => {
console.log(result);
});
Page.loadEventFired(async () => {
const result = await Runtime.evaluate({ expression: 'console.log("aaa")' });
console.log(result);
protocol.close();
chrome.kill();
});
})();
Chrome ViewTools Viewer -
:
Console.messageAdded
.
, !