Я недавно начал экспериментировать с Puppeteer на JavaScript для веб-скриппинга и заметил, что когда я запускаю свой код с экземпляром Puppeteer без головы, он не возвращает искомый тег, а вместо этого возвращает []
. Тем не менее, когда безголовый режим отключен, код возвращает метку просто отлично. Возвращаемый тег:
[ ElementHandle {
_context:
ExecutionContext { _client: [CDPSession], _world: [DOMWorld], _contextId: 3 },
_client:
CDPSession {
_events: [Object],
_eventsCount: 27,
_maxListeners: undefined,
_callbacks: Map {},
_connection: [Connection],
_targetType: 'page',
_sessionId: '6950CA7711045DA500204C2EFDAFC5B3' },
_remoteObject:
{ type: 'object',
subtype: 'node',
className: 'HTMLHeadingElement',
description: 'h1',
objectId: '{"injectedScriptId":3,"id":3}' },
_disposed: false,
_page:
Page {
_events: {},
_eventsCount: 0,
_maxListeners: undefined,
_closed: false,
_client: [CDPSession],
_target: [Target],
_keyboard: [Keyboard],
_mouse: [Mouse],
_timeoutSettings: [TimeoutSettings],
_touchscreen: [Touchscreen],
_accessibility: [Accessibility],
_networkManager: [NetworkManager],
_frameManager: [FrameManager],
_emulationManager: [EmulationManager],
_tracing: [Tracing],
_pageBindings: Map {},
_ignoreHTTPSErrors: false,
_coverage: [Coverage],
_javascriptEnabled: true,
_viewport: [Object],
_screenshotTaskQueue: [TaskQueue],
_workers: Map {} },
_frameManager:
FrameManager {
_events: [Object],
_eventsCount: 3,
_maxListeners: undefined,
_client: [CDPSession],
_page: [Page],
_networkManager: [NetworkManager],
_timeoutSettings: [TimeoutSettings],
_frames: [Map],
_contextIdToContext: [Map],
_isolatedWorlds: [Set],
_mainFrame: [Frame] } } ]
Я пытался использовать await page.goto(url, {"waitUntil" : "networkidle0"});
, чтобы заставить программу дождаться полной загрузки страницы, прежде чем возвращать тег, но опять не повезло. Вот мой неисправный код:
const initializeBrowserTask = async (proxy) => {
console.log("Initializing browser task...");
if (proxy == '') {
console.log('No proxy.')
const browser = await puppeteer.launch({ headless: false });
return browser;
} else {
const browser = await puppeteer.launch({
'args': ['--proxy-server=`${proxy}`']
});
console.log("Proxy: `${proxy}`")
return browser;
};
}
const browserTask = async (proxy, url) => {
const browser = await initializeBrowserTask(proxy);
let check = 0
const page = await browser.newPage();
console.log('Running...')
await page.goto(url);
console.log("Arrived at URL!")
let status = await page.$x('//*[@id="app"]/div[1]/div/div[1]/h1');
console.log(status)
};
browserTask('', 'http://adidas.com/yeezy')
Я удалил {"waitUntil" : "networkidle0"}
, как упоминалось ранее, поскольку это не решило проблему. По какой-то причине этот код будет работать, когда браузер не без заголовка, но вернет []
, когда он есть. Почему возникает эта проблема и как я могу ее исправить?