Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.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 如何检查特定脚本元素是否与Puppeter异步或延迟_Javascript_Puppeteer - Fatal编程技术网

Javascript 如何检查特定脚本元素是否与Puppeter异步或延迟

Javascript 如何检查特定脚本元素是否与Puppeter异步或延迟,javascript,puppeteer,Javascript,Puppeteer,嗨,我试图找出哪个脚本使用Puppeter设置了异步 因此,我的想法是寻找具有特定src集的脚本标记,然后获取标记的完整html并在那里提取async 我是这样开始的 const pattern = 'script[src*="'+url+'"]' const text = await page.$(pattern); 但失败了。同样,这个脚本(thescript.js)也肯定在html中 const text = await page.$('script[src*="thescript.js

嗨,我试图找出哪个脚本使用Puppeter设置了异步

因此,我的想法是寻找具有特定src集的脚本标记,然后获取标记的完整html并在那里提取async

我是这样开始的

const pattern = 'script[src*="'+url+'"]'
const text = await page.$(pattern);
但失败了。同样,这个脚本(thescript.js)也肯定在html中

const text = await page.$('script[src*="thescript.js"]');
结果我得到了一些巨大的json,并进行了测试

text.innerText
test.innerHTML 
但这些都是空的

作为一个更简单和“更木偶”的解决方案,您可以使用
.getAttribute('src')
来识别您需要的脚本,然后
等待页面.evaluate(el=>el.async,(等待页面.$$('script'))[i])
来检查它是异步的还是
等待页面.evaluate(el=>el.defer,(等待页面.$$('script'))[i])
检查它是否是延迟

所有脚本迭代并检查其是否异步的示例:

const puppeter=require('puppeter')
异步函数fn(){
const browser=wait puppeter.launch()
const page=wait browser.newPage()
等待页面。转到('https://example-with-script-tags.com')
const scriptsOnPage=wait page.$$eval('script',el=>el.map(o=>o.getAttribute('src'))
for(scriptsOnPage.entries()的常量[i,src]{
const async=wait page.evaluate(el=>el.async,(wait page.$$('script'))[i])
log(src+'是异步的:'+async)
}
等待浏览器关闭()
}
fn()
输出:

fn1() is async: true
fn2() is async: true
fn3() is async: true
fn4() is async: false
您可以在Chrome devtools控制台选项卡中测试脚本,也可以使用:

第一个脚本:

fn1() is async: true
fn2() is async: true
fn3() is async: true
fn4() is async: false
  • $$('script')[0]。attributes.src

  • $$('script')[0]。异步

第二个脚本:

fn1() is async: true
fn2() is async: true
fn3() is async: true
fn4() is async: false
  • $$('script')[1]。attributes.src

  • $$('script')[1]。异步

    等等

作为一个更简单和“更木偶”的解决方案,你可以使用
.getAttribute('src')
来识别你需要的脚本,然后
等待页面。评估(el=>el.async,(等待页面。$$('script'))[i])
来检查它是异步的还是
等待页面。评估(el=>el.defer,(等待页面。$$('script))[i])
检查它是否是延迟

所有脚本迭代并检查其是否异步的示例:

const puppeter=require('puppeter')
异步函数fn(){
const browser=wait puppeter.launch()
const page=wait browser.newPage()
等待页面。转到('https://example-with-script-tags.com')
const scriptsOnPage=wait page.$$eval('script',el=>el.map(o=>o.getAttribute('src'))
for(scriptsOnPage.entries()的常量[i,src]{
const async=wait page.evaluate(el=>el.async,(wait page.$$('script'))[i])
log(src+'是异步的:'+async)
}
等待浏览器关闭()
}
fn()
输出:

fn1() is async: true
fn2() is async: true
fn3() is async: true
fn4() is async: false
您可以在Chrome devtools控制台选项卡中测试脚本,也可以使用:

第一个脚本:

fn1() is async: true
fn2() is async: true
fn3() is async: true
fn4() is async: false
  • $$('script')[0]。attributes.src

  • $$('script')[0]。异步

第二个脚本:

fn1() is async: true
fn2() is async: true
fn3() is async: true
fn4() is async: false
  • $$('script')[1]。attributes.src

  • $$('script')[1]。异步

    等等


您是否能够同时@Tobi解决问题?您是否能够同时@Tobi解决问题?