幻影js从外部网站挑选一个元素

时间:2017-06-30 09:23:45

标签: javascript phantomjs monitoring detection

我有一个Phantom JS脚本,可以监控一些外部页面。基本上它只是从这个页面获取状态(打字稿代码):

const status: string = await page.evaluate(function() {
      return document.getElementsByClassName("status-containing-element")[0].innerHTML;
});

在某些情况下,此元素可能无法在网站上显示,然后我的脚本会认为该网站当前不可用。问题是,如果 status-containing-element 类名将被更改,我的脚本将始终认为该站点在我注意到之前不可用,该类名已更改。作为一个解决方案,我尝试使用幻像获取页面截图并检查其中的部分以确定页面状态,但这对我来说似乎是一个开销。

有没有更好/更常见的方法来避免这些问题,例如:自动检测网站结构变化或类似的smth?

1 个答案:

答案 0 :(得分:1)

除了类名,或者代替它,我建议使用querySelector()查询特定的选择器。通常,类名称可以更改,而一般页面结构保持不变。例如,考虑类似的事情:

document.querySelector('#container > div > div > ul > li:nth-child(2) > span > a');

要查看代表您的元素的选择器,您可以使用Chrome开发者工具:在“元素”菜单中找到它(右键单击 - >检查),右键单击其代码,复制 - >选择。然后,如果类名经常更改,则可以过滤类名。

另请注意,在您的代码中,您检索多个元素,然后获取第一个元素([0]),而querySelector()将返回单个项目。如果您需要所有选择器,请使用querySelectorAll()