JSHandles 只能在创建它们的上下文中评估/找不到具有指定 id 的上下文

Posted

技术标签:

【中文标题】JSHandles 只能在创建它们的上下文中评估/找不到具有指定 id 的上下文【英文标题】:JSHandles can be evaluated only in the context they were created / Cannot find context with specified id 【发布时间】:2019-04-21 17:05:15 【问题描述】:

我正在从select -> option 中选择选项,每次重新加载页面时,首先当我单击下拉列表时,我会收集我想要选择的所有元素句柄。我想通过所有这些。 我只能选择第一个然后我得到这个错误:

JSHandles 只能在创建它们的上下文中进行评估

所以我尝试在每次页面重新加载时重新创建 ElementHandles。我有这个代码:

功能一:

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 次​​strong>,然后我收到此错误:

错误:协议错误(Runtime.callFunctionOn):找不到具有指定 id 的上下文

谁能帮我解决这个问题?

【问题讨论】:

【参考方案1】:

根据Official Documentation为JSHandle

当它们的原始框架被导航或父上下文被破坏时,JSHandles 会自动处置。

因此,每次页面重新加载时,您都需要重新获取JSHandle

【讨论】:

我编辑了问题,我尝试重新创建,但我遇到了另一个问题。也许我做错了。你能告诉我吗?

以上是关于JSHandles 只能在创建它们的上下文中评估/找不到具有指定 id 的上下文的主要内容,如果未能解决你的问题,请参考以下文章

为啥 list.append 在布尔上下文中评估为 false? [复制]

在 C# 中使用 Saxon-HE 对 XDocument 执行具有给定上下文的 XQuery

是否未指定在未评估的上下文中实例化模板/lambda?

在此上下文中无法调用监视窗口中的方法评估

VS2017 条件断点 - “不支持在此上下文中评估本机方法”

在Haskell中扩展数据类型