我正在尝试从具有chrome扩展名的网站上抓取几行文本数据。我想检测并记录特定div类中的文本:
<div class="data-table">
<div class="item-value"> Some text here </div>
<div class="item-value"> Target text </div>
</div>
manifest.json:
{
"name": "My Scraper",
"version": "0.1",
"manifest_version": 2,
"icons": {
"16": "icons/icon16.png",
"48": "icons/icon48.png",
"128": "icons/icon128.png"
},
"browser_action": {
"default_icon": "icons/icon19.png"
},
"content_scripts": [{
"run_at": "document_start",
"matches": ["*://*.tradingview.com/*"],
"js": [
"lib/jquery-3.3.1.min.js",
"content.js"
]
}]
}
我尝试使用MutationObserver来捕获和记录更改。该脚本位于扩展名的content.js
文件中:
setTimeout(function(){
var observables = document.querySelectorAll('.item-value');
console.log('Hello!');
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
console.log(mutation);
alert('innerText Changed!')
});
});
var config = { characterData: true, subtree: true, childNodes: true };
observables.forEach(function(node) {
observer.observe(node, config);
});
}, 10000);
该脚本在页面加载后的10秒钟后执行,以确保是否已加载目标div。结果,可以记录“ Hello”文本,但此后什么也没有发生。我在做什么错了?
目标文本的div经常更新,但是innerText每分钟更改一次。那一分钟后,我需要以非常低的延迟来捕获innerText上的更改。如果除了MutationObserver之外还有其他选择,我很乐意接受。