JSHandles могут быть оценены только в том контексте, в котором они были созданы. Не удается найти контекст с указанным идентификатором. - PullRequest
0 голосов
/ 19 ноября 2018

Я выбираю параметры из select -> option, и каждый раз, когда страница перезагружается, сначала, когда я щелкаю раскрывающийся список, я собираю все elementHandles, которые я хочу выбрать. Я хочу пройти через все из них. Я могу выбрать только первый, а затем я получаю эту ошибку:

JSHandles могут быть оценены только в том контексте, в котором они были созданы

Поэтому я пытаюсь воссоздавать ElementHandles каждый раз при перезагрузке страницы. У меня есть этот код:

Функция 1:

case:click
try {
   await page.evaluate((el) => {
   return el.click()
   }, 'select');
   await page.waitFor(1500);
} catch (e) {
   console.log(e);
}
break;

case: getNavigation
let navigation = await page.$$('select > option');
break;

case: doActions
let i = 0;
for (elements in navigation) {
  let result = await function2(commands, i, page)
  i++;
}
break;

Тогда Функция 2:

async function function2(commands, i, inPage){
let page = inPage;
if (!page) {
const browser = await puppeteerLambda.getBrowser({ headless: true, slowMo: 100,  args: ['--no-sandbox', '--disable-setuid-sandbox', '--single-process', '--start-fullscreen', '--window-size=1413,749']}); //TODO: setup Proxy
        console.log('opening new page');
        page = await browser.newPage();
....
}
let navigation;
case: click
try {
await page.evaluate((el) => {
return el.click()
}, 'select');
await page.waitFor(1500);
} catch (e) {
console.log(e);
}
case: getNavigation
navigation = await page.$$('select > option'); //recreating elementHandle array

case: selectOption
const optionValue = await page.evaluate(value => value.value, navigation[i]);
await page.select('select', optionValue);
case: extract
......

Снова я получаю , выбираю опции 2 раза и затем получаю эту ошибку:

Ошибка: ошибка протокола (Runtime.callFunctionOn): не удается найти контекст с указанным идентификатором

Может кто-нибудь помочь мне, как справиться с этим?

1 Ответ

0 голосов
/ 20 ноября 2018

Согласно Официальной документации для JSHandle:

JSHandles автоматически удаляются, когда перемещается их исходная рамка или родительский контекст уничтожается.

Поэтому при каждой перезагрузке страницы вам нужно будет повторно получить JSHandle.

...