我有一个Phantom JS脚本,可以监控一些外部页面。基本上它只是从这个页面获取状态(打字稿代码):
const status: string = await page.evaluate(function() {
return document.getElementsByClassName("status-containing-element")[0].innerHTML;
});
在某些情况下,此元素可能无法在网站上显示,然后我的脚本会认为该网站当前不可用。问题是,如果 status-containing-element 类名将被更改,我的脚本将始终认为该站点在我注意到之前不可用,该类名已更改。作为一个解决方案,我尝试使用幻像获取页面截图并检查其中的部分以确定页面状态,但这对我来说似乎是一个开销。
有没有更好/更常见的方法来避免这些问题,例如:自动检测网站结构变化或类似的smth?
答案 0 :(得分:1)
除了类名,或者代替它,我建议使用querySelector()
查询特定的选择器。通常,类名称可以更改,而一般页面结构保持不变。例如,考虑类似的事情:
document.querySelector('#container > div > div > ul > li:nth-child(2) > span > a');
要查看代表您的元素的选择器,您可以使用Chrome开发者工具:在“元素”菜单中找到它(右键单击 - >检查),右键单击其代码,复制 - >选择。然后,如果类名经常更改,则可以过滤类名。
另请注意,在您的代码中,您检索多个元素,然后获取第一个元素([0]
),而querySelector()
将返回单个项目。如果您需要所有选择器,请使用querySelectorAll()
。