Uncaught (in promise) DOMException: the play() 请求被调用 pause() 中断 - Puppetter

如何解决Uncaught (in promise) DOMException: the play() 请求被调用 pause() 中断 - Puppetter

我正在使用 Puppetter 抓取此网站 - https://chillhop.com/releases/endless-sunday-vol-2/。所以,到目前为止,我已经能够获得所有曲目、艺术家姓名和曲目持续时间。但是,我还想抓取所有可用音乐曲目的 src。问题在于,播放曲目时,chillhop 网站会动态地将“src”添加到音频元素中。因此,我需要遍历所有曲目,单击它们播放曲目,然后获取“src”。我已经添加了我正在使用的代码,但是,我收到了这个错误Uncaught (in promise) DOMException: The play() request was interrupted by call to pause()

这可能是因为循环快速迭代曲目并在当前曲目开始播放之前播放下一曲目。如何等待播放曲目,然后使用 Puppetter 单击下一曲目?

Git 存储库 - https://github.com/Vaasu-Dhand/chillhop-music-scraper。只需运行 npm start,它就会为您抓取网站并将数据保存到 json 文件中。

export async function scrape() {
    try {
      // set some options (set headless to false so we can see this automated browsing experience)
      let launchOptions = {
        headless: true,executablePath:
          'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe',// because we are using puppeteer-core so we must define this option
        args: ['--start-maximized'],};

      const browser = await puppeteer.launch(launchOptions);
      const page = await browser.newPage();
      

      // set viewport and user agent (just in case for nice viewing)
      await page.setViewport({ width: 1366,height: 768 });
      await page.setUserAgent(
        'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/78.0.3904.108 Safari/537.36'
      );

      // Go to the chillHop Albums Page
      await page.goto('https://chillhop.com/releases/');
      const albumLinks = await page.$$eval('.release > a',(list) =>
        list.map((elm) => elm.href)
      ); // 12 Albums Load Initaially

      // console.log(albumLinks);

      for (const [index,albumURL] of albumLinks.entries()) {
        // console.log(albumURL);
        await page.goto(albumURL);

        try {


          await page.waitForTimeout(2000) // * MAGIC

          await page.$$eval('.list',listElement => listElement[1].remove());

          let numOfTracks = await page.$$eval('.track-single',(tracks) => tracks.length
          );
          // [SOLVED] The number of tracks come out to be 25 more than the actual number of tracks for some reason
          // console.log(numOfTracks);

          // Hold for a bit
          // await page.waitForTimeout(50000)

          if (numOfTracks >= 5) {
            let albumName = await page.$eval('div.title-holder h1',(name) => name.textContent);
            let albumartist = await page.$eval('div.title-holder h2',(name) => name.textContent);
            let [imgSrc,imgalt] = await page.$eval('.col-md-6.col-sm-4.fa img',(img) => [img.getAttribute('src'),img.getAttribute('alt')]);
            // let audioSrc = await page.$eval('audio#jp_audio_0',(audio) => audio.childNodes
            // let releaseDate = await page.$$eval('span.date',date => [...date])
            // console.log(albumName,albumartist,imgSrc,imgalt);
            let trackData = await page.$$eval('.track-single',(tracks) => {
              
              return tracks.map((track,index) => {  // Maybe make this async?
                
                  track.querySelector(`a.track-${track.children[0].getAttribute('data-track')}`).click();   // Check if this is working properly
  
                  return {
                    'data-track': track.children[0].getAttribute('data-track'),title: track.querySelector('div.trackTitle').textContent,artists: track.querySelectorAll('div.trackArtists')[0].textContent,duration: track.querySelector('div.track-length').textContent,"audio-src": document.querySelector('audio').getAttribute('src')  
                  };
                  
              });
            });
            // console.log(trackData);

            let albumData = {
              "name": albumName,"artist": albumartist,"url": albumURL,"img-src": imgSrc,"img-alt": imgalt,"tracks": trackData
            }

            if ((index + 1) === albumLinks.length) {  // Last Album
              appendData(albumData,true)
            } else {
              appendData(albumData,false)
            }
          }
        } catch (error) { // * If Something Goes Wrong
          console.log(error);
          continue;
        }
        // formatData(albumData)
      }

      // close the browser
      await browser.close();
    } catch (error) {
      console.log(error);
    }
  
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?