使用 .pop 方法将 javascript 代码转换为 puppeteer

发布于 2025-01-11 07:01:58 字数 554 浏览 0 评论 0原文

我是 puppeteer 的新手,我尝试转换此 javascript 代码:

let messageElement;
await driver.findElements(By.className("message-list-item")).then(
    (ok) => {
        messageElement = ok.pop()
    }
)

await messageElement.getAttribute("id").then(
    (ok) => {
        messageNum = parseInt(ok.split("message")[1]);
    }
)

“.pop()”方法需要转换,我知道在 puppeteer 中我们可以使用“length - 1”,但我不能。 我已经尝试过这个:

const el = await page.$('.message-list-item')
  .then( (elements) => elements[el.length - 1]);

但不起作用。

I'm new to puppeteer and I try to convert this javascript code :

let messageElement;
await driver.findElements(By.className("message-list-item")).then(
    (ok) => {
        messageElement = ok.pop()
    }
)

await messageElement.getAttribute("id").then(
    (ok) => {
        messageNum = parseInt(ok.split("message")[1]);
    }
)

The ".pop()" method need to be convert and I know with puppeteer we can use "length - 1" but I can't.
I've tried this :

const el = await page.$('.message-list-item')
  .then( (elements) => elements[el.length - 1]);

But not work.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

吃兔兔 2025-01-18 07:01:58

这与“将 .pop() 转换为 puppeteer”无关。 pop 是 Array 原型上的标准函数。根据 puppeteer docspage.$() 在 DOM 节点上执行 querySelector,返回 DOM 节点直接而不是 DOM 节点数组,因此您不需要使用 pop 或任何其他数组函数。

const el = await page.$('.message-list-item')
  .then( (element) => element));

这相当于

const el = await page.$('.message-list-item');

EDIT

如果您想要具有该类名的最后一个元素,那么您需要获取这些项目的列表,为此您可以使用 $$ ,根据文档使用querySelectorAll,然后获取最后一个元素。

const el = await page.$('.message-list-item', (e) => e[e.length - 1]);

This has nothing to do with "converting .pop() to puppeteer". pop is a standard function on the Array prototype. According to the puppeteer docs, the page.$(<selector>) performs a querySelector on the DOM nodes, which returns the DOM node directly rather than an array of DOM nodes, so you don't need to use pop or any other Array function.

const el = await page.$('.message-list-item')
  .then( (element) => element));

which is equivalent to

const el = await page.$('.message-list-item');

EDIT

If you want the last element with that classname, then you need to get a list of those items, for which you can use $$ which according to the docs uses querySelectorAll, and then get the last element.

const el = await page.$('.message-list-item', (e) => e[e.length - 1]);
玩心态 2025-01-18 07:01:58

与 :

const h4All = await page.$('.message-list-item');
  const h4Count = h4All.length;
  const fileName = h4All[h4Count - 1];

  const id= await (await fileName.getProperty("id")).jsonValue();
  console.log(await id);
  messageNum = parseInt(id.split("message")[1]);

  console.log(messageNum);

工作完成了,感谢您的帮助!
我可以再问你一个问题吗?
我有这个 javascript :

let messageNum = 0;
   let lastMessageElement
    let y = false;
                while(!y){
                    console.log("Message de recherche " + messageNum);
    
                    await driver.findElement(By.id("message"+messageNum.toString())).then(
                        
                        (ok) => {
                            console.log("Trouvé");
    
                            y = true;
                            lastMessageElement = ok;
                        },
                        (error) => {
                            console.log("Error");
                        }
                    )
                    
                    if(!y) await driver.sleep(5000);
                }

尝试在 puppeteer 中转换:

let messageNum = 0;
   let lastMessageElement
    let y = false;
          while(!y){
              console.log("Message de recherche " + messageNum);
    
              const lastMessageElement = await page.$("message"+messageNum.toString());
              console.log(lastMessageElement);
                 
    
              if (lastMessageElement) 
              {
                 
                  
                      console.log("Trouvé");
                      console.log(lastMessageElement);
                      y = true;
              }
                  else {
                      console.log("Error");
                  }
              
             
              if(!y) await page.waitForTimeout(5000);
          }

但这不好......
再次感谢

With :

const h4All = await page.$('.message-list-item');
  const h4Count = h4All.length;
  const fileName = h4All[h4Count - 1];

  const id= await (await fileName.getProperty("id")).jsonValue();
  console.log(await id);
  messageNum = parseInt(id.split("message")[1]);

  console.log(messageNum);

It's work, thanks for your help !
Can I ask you another problem ?
I've this javascript :

let messageNum = 0;
   let lastMessageElement
    let y = false;
                while(!y){
                    console.log("Message de recherche " + messageNum);
    
                    await driver.findElement(By.id("message"+messageNum.toString())).then(
                        
                        (ok) => {
                            console.log("Trouvé");
    
                            y = true;
                            lastMessageElement = ok;
                        },
                        (error) => {
                            console.log("Error");
                        }
                    )
                    
                    if(!y) await driver.sleep(5000);
                }

Try to convert in puppeteer:

let messageNum = 0;
   let lastMessageElement
    let y = false;
          while(!y){
              console.log("Message de recherche " + messageNum);
    
              const lastMessageElement = await page.$("message"+messageNum.toString());
              console.log(lastMessageElement);
                 
    
              if (lastMessageElement) 
              {
                 
                  
                      console.log("Trouvé");
                      console.log(lastMessageElement);
                      y = true;
              }
                  else {
                      console.log("Error");
                  }
              
             
              if(!y) await page.waitForTimeout(5000);
          }

But it's not good ...
Thanks again

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文