import { configDotenv } from "dotenv";
import puppeteer from "puppeteer";
configDotenv({ path: "./config.env" });
let browserInstance;
export async function getBrowserInstance() {
try {
if (!browserInstance || !browserInstance.isConnected()) {
browserInstance = await puppeteer.launch({
// executablePath: process.env.CHROME,
headless: false,
args: [
'--disable-blink-features=AutomationControlled',
'--disable-infobars',
'--no-sandbox',
'--disable-dev-shm-usage',
'--start-maximized',
'--disable-extensions',
'--disable-default-apps',
'--disable-popup-blocking',
'--disable-renderer-backgrounding',
'--disable-background-timer-throttling',
'--disable-backgrounding-occluded-windows'
]
});
browserInstance.on('disconnected', () => {
console.error('Browser disconnected.');
browserInstance = undefined;
});
}
return browserInstance;
} catch (error) {
return error;
}
}
export async function newPage(browser, docSize) {
try {
if (!browser || !browser.isConnected()) throw new Error("Browser is not active!");
const page = await browser.newPage();
const { width, height } = docSize;
if (typeof width !== "number" || typeof height !== "number") {
throw new Error("The width and height of page should be type of number.");
}
await page.setUserAgent(process.env.USER_AGENT);
await page.evaluateOnNewDocument(() => {
Object.defineProperty(navigator, 'platform', {
get: () => 'Win32',
});
Object.defineProperty(navigator, 'webdriver', {
get: () => false,
});
window.chrome = {};
const originalQuery = window.navigator.permissions.query;
window.navigator.permissions.query = (parameters) =>
parameters.name === 'notifications'
? Promise.resolve({ state: 'denied' })
: originalQuery(parameters);
});
page.setDefaultNavigationTimeout(300000);
if (width && height) page.setViewport({ width, height });
return page;
} catch (error) {
return error.message;
}
}
export async function launchBrowserAndGotoPage(docSize, docUrl) {
let Browser, Page;
try {
Browser = await getBrowserInstance();
Page = await newPage(Browser, docSize);
console.log()
if (typeof Page === "string") throw new Error(Page);
const pageResponse = await Page.goto(docUrl, { waitUntil: "networkidle0" });
const pageStatus = pageResponse.status();
if (pageStatus !== 200) {
throw new Error(`The third-party server responded with ${pageStatus}`);
}
console.log("I am inside launchBrowserAndGotoPage ", Page)
console.log("Page type: ", Page.constructor.name) // Should print "Page"
console.log("Page object keys: ", Object.keys(Page)) // Explore what properties/methods are available
return { Browser, Page };
} catch (error) {
console.log(error);
if (typeof Page === "object") Page.close();
return { error: error.message }
}
}
Когда я вызываю launchBrowserAndGotoPage(), запускается браузер и открывается страница с предоставленной ссылкой. Но объект неполный, и я не могу использовать такие методы, как page.pdf().
Журналы такие:
I am inside launchBrowserAndGotoPage CdpPage { _isDragging: false, _timeoutSettings: TimeoutSettings {} }
Page type: CdpPage
Page object keys: [ '_isDragging', '_timeoutSettings' ]
< /code>
может кто -нибудь помочь мне решить эту проблему? ответ такой же.
export async function launchBrowserAndGotoPage(docSize, docUrl) { let Browser, Page; try { Browser = await getBrowserInstance(); Page = await newPage(Browser, docSize);
console.log()
if (typeof Page === "string") throw new Error(Page); const pageResponse = await Page.goto(docUrl, { waitUntil: "networkidle0" }); const pageStatus = pageResponse.status(); if (pageStatus !== 200) { throw new Error(`The third-party server responded with ${pageStatus}`); }
console.log("I am inside launchBrowserAndGotoPage ", Page) console.log("Page type: ", Page.constructor.name) // Should print "Page" console.log("Page object keys: ", Object.keys(Page)) // Explore what properties/methods are available
return { Browser, Page }; } catch (error) { console.log(error); if (typeof Page === "object") Page.close(); return { error: error.message } } } [/code] Когда я вызываю launchBrowserAndGotoPage(), запускается браузер и открывается страница с предоставленной ссылкой. Но объект неполный, и я не могу использовать такие методы, как page.pdf(). Журналы такие: I am inside launchBrowserAndGotoPage CdpPage { _isDragging: false, _timeoutSettings: TimeoutSettings {} } Page type: CdpPage Page object keys: [ '_isDragging', '_timeoutSettings' ] < /code> может кто -нибудь помочь мне решить эту проблему? ответ такой же.