通过选择器获取动态元素

时间:2018-07-21 18:15:18

标签: javascript html node.js dom puppeteer

我需要使用ajax $.ajax({ ... # your occulted script success: function(data){ $("#deactivate_reason_textarea").val(""); $("#dialogoverlay").fadeOut("Slow"); $("#sending_box").fadeOut("Slow"); $("body").css("overflow", "auto"); window.location = "another/script.php"; // or you can put it in a timeout to show a message for the user or other thing // setTimeout(function() { // window.location = "another/script.php"; // }, 10000); } }); 单击某个Web按钮。

我正在与Puppeteer合作,所以通常我会这样做:

id

棘手的是,数字#product-6852370-Size是动态的,每次刷新页面时都会更改。

所以我需要的是一段代码:

搜索包含page.click('#product-6852370-Size'); 6852370的{​​{1}}。有可能发生这种情况吗?

2 个答案:

答案 0 :(得分:8)

您可以使用以下方式匹配id属性的开头和结尾:

await page.click('[id^="product-"][id$="-Size"]');

或者,更准确地说,您可以使用正则表达式确保id中间出现数字:

await page.evaluate(() => {
  [...document.querySelectorAll('[id^="product-"][id$="-Size"]')].filter(e => e.id.match(/^product-\d+-Size$/g))[0].click();
});

答案 1 :(得分:4)

您可以使用以选择器开头的属性来做到这一点:

page.click('button[id^="product-"]')