Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 木偶演员JS正在等待能够选择多个下拉列表_Javascript_Puppeteer - Fatal编程技术网

Javascript 木偶演员JS正在等待能够选择多个下拉列表

Javascript 木偶演员JS正在等待能够选择多个下拉列表,javascript,puppeteer,Javascript,Puppeteer,目前,我正在尝试从动态网页中选择多个下拉列表。必须选择每个选项,才能获得所需的值 当我加载页面并尝试选择如下下拉列表时: await page.evaluate(() => { document.querySelector('#paper > option:nth-child(2)').selected = true; document.querySelector('#color > option:nth-child(3)').selected = true;

目前,我正在尝试从动态网页中选择多个下拉列表。必须选择每个选项,才能获得所需的值

当我加载页面并尝试选择如下下拉列表时:

  await page.evaluate(() => {
  document.querySelector('#paper > option:nth-child(2)').selected = true;
  document.querySelector('#color > option:nth-child(3)').selected = true;
  document.querySelector('#coating > option:nth-child(2)').selected = true;
  })
const sleep = require('sleep');
我无法选择下拉列表。我想这是因为页面还没有加载。为了解决这个问题,我添加了一个名为sleep的阳极模块

我按如下方式导入睡眠模块:

  await page.evaluate(() => {
  document.querySelector('#paper > option:nth-child(2)').selected = true;
  document.querySelector('#color > option:nth-child(3)').selected = true;
  document.querySelector('#coating > option:nth-child(2)').selected = true;
  })
const sleep = require('sleep');
然后我尝试在每个选择器之间进行一秒钟的睡眠,这样它就有时间加载了

  sleep.sleep(1);
  await page.evaluate(() => {
  document.querySelector('#paper > option:nth-child(2)').selected = true;
  sleep.sleep(1);
  document.querySelector('#color > option:nth-child(3)').selected = true;
  sleep.sleep(1);
  document.querySelector('#coating > option:nth-child(2)').selected = true;
  })
我的问题是第一次睡眠起作用。然而,wait page.evaluate中的sleep.sleep(1)表示睡眠是未定义的。我不确定为什么会发生这种情况,因为const sleep在我的文档顶部声明,所以它应该是全局范围。有人能告诉我为什么睡眠不起作用吗?

在尝试更改相应的
选定属性之前,您应该使用以确保元素已加载:

await Promise.all([
  page.waitForSelector('#paper > option:nth-child(2)'),
  page.waitForSelector('#color > option:nth-child(3)'),
  page.waitForSelector('#coating > option:nth-child(2)'),
]);

await page.evaluate(() => {
  document.querySelector('#paper > option:nth-child(2)').selected = true;
  document.querySelector('#color > option:nth-child(3)').selected = true;
  document.querySelector('#coating > option:nth-child(2)').selected = true;
});
sleep
函数无法在内部工作的原因是函数中的代码是在page DOM环境中执行的,而不是在Node.js/puppeter环境中执行的

您可以将参数传递给
page.evaluate()
,但参数必须是: