javascript - 抓取全球速卖通:数据属性在检查元素之前不会加载
问题描述
我正在尝试在 Aliexpress.com 上获取有关产品的一些信息
我想要什么:从每个变体图像中获取 data-spm-anchor-id 属性。
问题:在我尝试手动检查元素之前它不会加载
页面加载完成后尝试获取属性:
document.querySelector('.sku-property-image').querySelector('img')
结果 :
<img src="https://ae01.alicdn.com/kf/HTB1HAk8UgHqK1RjSZFkq6x.WFXaB/Boruto-Naruto-Hoodies-Jacket-Men-3D-Hoodie-Akatsuki-Coat-Uchiha-Itach-Cosplay-Costume-Kakashi-Hoodies-Sweatshirts.jpg_50x50.jpg" title="2">
检查元素以查看 data-spm 是否存在:
然后在控制台上再次运行查询,您将看到:
<img src="https://ae01.alicdn.com/kf/HTB1HAk8UgHqK1RjSZFkq6x.WFXaB/Boruto-Naruto-Hoodies-Jacket-Men-3D-Hoodie-Akatsuki-Coat-Uchiha-Itach-Cosplay-Costume-Kakashi-Hoodies-Sweatshirts.jpg_50x50.jpg" title="2" data-spm-anchor-id="a2g0o.detail.1000016.i1.570f6bf9tarSlz">
检查元素后突然出现 data-spm-anchor-id attr
我如何通过 puppeteer 或 Cheerio 以编程方式获得这个?
解决方案
单击该图像时正在加载该属性。所以基本上你需要点击每个图像并获取属性。你可以这样做:
var images = await page.$$(".sku-property-image");
for(let image of images) {
await image.click();
//Wait for the attribute to be loaded.
await page.waitFor(image => image.querySelector("img").getAttribute("data-spm-anchor-id"), {}, image);
console.log(await page.evaluate(image => image.querySelector("img").getAttribute("data-spm-anchor-id"), image));
}
推荐阅读
- typescript - 从 Object.assign 返回和从 Typescript 中的自定义对象返回有什么不同
- c++ - C和C++中char数组的区别
- tensorflow - RNN Step for Step,单元与层?
- laravel - $bucket 'default' 字段必须小于最低边界或大于或等于最高边界
- c# - 如何在 C# 共享库中调用以指针作为参数的函数?
- matlab - 基本神经网络二元分类器不起作用 MATLAB
- react-native - 功能组件中的自定义抽屉 screenProps
- java - 我正在制作一个应用程序,如果您单击一个按钮,则会播放音频,但最后两个按钮不会播放音频
- mysql - Select record table mysql
- haskell - 我如何使结果成为布尔值列表