Код: Выделить всё
const { Builder, By, until, Capabilities } = require("selenium-webdriver");
const cheerio = require("cheerio");
const ps = require("ps-node");
const { exec, spawn } = require("child_process");
const fs = require("fs");
const net = require("net");
const fetch = require("node-fetch");
async checkAndKillExistingChrome(port) {
return new Promise((resolve, reject) => {
ps.lookup(
{ command: "chrome", arguments: `--remote-debugging-port=${port}` },
(err, resultList) => {
if (err) {
return reject(err);
}
const chromeProcess = resultList[0];
if (chromeProcess) {
console.log(
`Killing existing Chrome process with PID: ${chromeProcess.pid}`
);
ps.kill(chromeProcess.pid, (err) => {
if (err) {
return reject(err);
}
console.log("Existing Chrome process terminated.");
resolve();
});
} else {
resolve();
}
}
);
});
}
async startChrome() {
return new Promise(async (resolve, reject) => {
const port = 9223;
await this.checkAndKillExistingChrome(port);
console.log(
"Starting Chrome with remote debugging enabled and in headless mode..."
);
exec(
`"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe" --remote-debugging-port=${port} --user-data-dir=C:\\selenium\\ChromeProfile2 --headless --disable-gpu --no-sandbox --enable-logging --v=1 --log-file=C:\\path\\to\\chrome.log`,
(error, stdout, stderr) => {
if (error) {
console.error(`Error starting Chrome: ${error}`);
reject(error);
return;
}
console.log(`Chrome stdout: ${stdout}`);
console.error(`Chrome stderr: ${stderr}`);
}
);
setTimeout(async () => {
try {
const response = await fetch(`http://127.0.0.1:${port}/json`);
if (response.ok) {
const jsonResponse = await response.json();
if (jsonResponse.length > 0) {
console.log(`Chrome is running and listening on port ${port}.`);
resolve();
} else {
console.error(
`Chrome is running on port ${port} but no pages are available.`
);
reject(
new Error(
`Chrome is running on port ${port} but no pages are available.`
)
);
}
} else {
console.error(`Chrome is not listening on port ${port}.`);
reject(new Error(`Chrome is not listening on port ${port}.`));
}
} catch (err) {
console.error(
"Failed to connect to Chrome remote debugging port:",
err
);
reject(err);
}
}, 15000);
});
}
async setupDriver() {
try {
console.log("Setting up the driver...");
const chromeCapabilities = Capabilities.chrome();
chromeCapabilities.set("goog:chromeOptions", {
debuggerAddress: "127.0.0.1:9223", // Use 127.0.0.1 explicitly
});
this.driver = await new Builder()
.withCapabilities(chromeCapabilities)
.build();
console.log("Driver setup complete.");
} catch (err) {
console.error("Error setting up driver:", err);
}
}
Код: Выделить всё
Error setting up driver: SessionNotCreatedError: session not created: cannot connect to chrome at 127.0.0.1:9223
from unknown error: unable to discover open pages
Я попробовал увеличить время ожидания, проверив журналы Chrome и проверка команды, используемой для запуска Chrome, но я все еще не могу получить доступ к информации об отладке. Могу ли я предпринять какие-либо другие действия для устранения этой проблемы?
Будем очень признательны за любую помощь или рекомендации. Спасибо!
Я попробовал запустить Chrome с включенной удаленной отладкой и в автономном режиме, используя определенный порт (9223), а затем получить доступ к информации об отладке с помощью curl http://127.0.0.1:9223. /json.
Я ожидал получить ответ JSON, содержащий отладочную информацию (например, список целей отладки). Однако вместо этого я получил пустой ответ.
Я также проверил журналы Chrome и убедился, что Chrome работает и прослушивает порт 9223 с помощью netstat.
Какие еще шаги я могу предпринять, чтобы устранить эту проблему и успешно получить доступ к отладочной информации?
Подробнее здесь: https://stackoverflow.com/questions/786 ... bdriver-in