Puppeteer: Headless tidak dapat membaca indexedDB yang ditulis dari Headful dan sebaliknya

Dibuat pada 3 Nov 2017  ·  3Komentar  ·  Sumber: puppeteer/puppeteer

Saya tidak yakin apakah saya menggunakan indexedDB sepenuhnya dengan benar, tolong, perbaiki saya jika perlu.


Contoh kode:

'use strict';

const puppeteer = require('puppeteer');

(async function main() {
  try {
    let browser = await puppeteer.launch({
      headless: false,
      userDataDir: 'test-profile-dir',
    });
    let page = await browser.newPage();
    await page.goto('https://example.org/');
    await page.evaluate(setIDB, 'headfulIDB', 'foo');
    await page.close();
    await browser.close();

    browser = await puppeteer.launch({
      headless: true,
      userDataDir: 'test-profile-dir',
    });
    page = await browser.newPage();
    await page.goto('https://example.org/');
    await page.evaluate(setIDB, 'headlessIDB', 'bar');
    await page.close();
    await browser.close();

    browser = await puppeteer.launch({
      headless: false,
      userDataDir: 'test-profile-dir',
    });
    page = await browser.newPage();
    await page.goto('https://example.org/');
    console.log('Headful mode.');
    console.log('Headful IDB: ', await page.evaluate(getIDB, 'headfulIDB'));
    console.log('Headless IDB: ', await page.evaluate(getIDB, 'headlessIDB'));
    await page.close();
    await browser.close();

    browser = await puppeteer.launch({
      headless: true,
      userDataDir: 'test-profile-dir',
    });
    page = await browser.newPage();
    await page.goto('https://example.org/');
    console.log('Headless mode.');
    console.log('Headful IDB: ', await page.evaluate(getIDB, 'headfulIDB'));
    console.log('Headless IDB: ', await page.evaluate(getIDB, 'headlessIDB'));
    await page.close();
    await browser.close();
  } catch (err) {
    console.error(err);
  }
})();


function setIDB(key, value) {
  return new Promise((resolve, reject) => {
    const openRequest = indexedDB.open('testIDB', 1);

    openRequest.onerror = (err) => { reject(err.target.error); };
    openRequest.onupgradeneeded = (event) => { event.target.result.createObjectStore('test'); };

    openRequest.onsuccess = (event) => {
      const db = event.target.result;

      db.onerror = (err) => { db.close(); reject(err.target.error); };

      db.transaction('test', 'readwrite')
        .objectStore('test')
        .put(value, key)
        .onsuccess = () => { db.close(); resolve(); };
    };
  });
}

function getIDB(key) {
  return new Promise((resolve, reject) => {
    const openRequest = indexedDB.open('testIDB', 1);

    openRequest.onerror = (err) => { reject(err.target.error); };
    openRequest.onupgradeneeded = (event) => { event.target.result.createObjectStore('test'); };

    openRequest.onsuccess = (event) => {
      const db = event.target.result;

      db.onerror = (err) => { db.close(); reject(err.target.error); };

      db.transaction('test', 'readonly')
        .objectStore('test')
        .get(key)
        .onsuccess = (eventGet) => {
          const { result } = eventGet.target;
          db.close();
          resolve(result);
        };
    };
  });
}



Keluaran:

Headful mode.
Headful IDB:  foo
Headless IDB:  undefined
Headless mode.
Headful IDB:  undefined
Headless IDB:  bar


bug chromium

Komentar yang paling membantu

Dengan asumsi saya memiliki masalah yang sama (pasti baunya seperti itu), ini juga terjadi di headfull jika Anda secara manual mengatur --user-data-dir=/tmp/someFolder/ . Ini mungkin kasus yang berbeda, meskipun. Tampaknya jika saya memperbarui indexedDB saat di headfull, tutup, lalu buka kembali di headfull, perubahannya tidak bertahan (jadi headfull tidak bisa membaca headfull). Hal yang sama terjadi di antara permutasi pasangan lainnya: headless - headless, dan headless - headful, headful - headless.

Ini terjadi pada dalang -- bukan untuk penggunaan sebenarnya.

Semua 3 komentar

Dengan asumsi saya memiliki masalah yang sama (pasti baunya seperti itu), ini juga terjadi di headfull jika Anda secara manual mengatur --user-data-dir=/tmp/someFolder/ . Ini mungkin kasus yang berbeda, meskipun. Tampaknya jika saya memperbarui indexedDB saat di headfull, tutup, lalu buka kembali di headfull, perubahannya tidak bertahan (jadi headfull tidak bisa membaca headfull). Hal yang sama terjadi di antara permutasi pasangan lainnya: headless - headless, dan headless - headful, headful - headless.

Ini terjadi pada dalang -- bukan untuk penggunaan sebenarnya.

Hai, artikel ini sepertinya sudah ditulis setahun yang lalu, tetapi saya baru saja mengalami kesalahan ini, dan alhasil saya menemukan jawabannya. Dalam kasus saya, itu terjadi karena saya mencoba menjalankan perintah di halaman ' about:blank '

Apakah halaman ini membantu?
0 / 5 - 0 peringkat