我正在开发一些网络自动化工具(C#,但这个主题不是它...)。 工具unsing WebBrowser作为浏览器并连接到某个网站。
网站有动态内容,每秒更新一次。使用setTimeout更新其内容的网站。然后数据在DOM元素(表)内重新通过网站更新内容。它删除3个旧行并插入3个新行。
我查了一下,网站没有使用document.write
。据我所知,网站有一些方法可以修改内容。首先是innerHTML
属性,但是表有4行,站点不更新/删除第一行。另一种方式是 appendChild 和 removeChild 更真实。
所以我的问题是如何触发这一行动?
我知道可以为DOM元素定义自己的func。那么我如何重新定义appendChild和removeChild方法?
可能是这样的事情?:
var realRC = contentTable.removeChild;
contentTable.removeChild = function(el){
alert("Trigged!");
realRC(el);
}
答案 0 :(得分:4)
当你说" trig"时,我认为你的意思是触发器。
在浏览器超时和间隔中都有ID,您可以清除它们,但不能直接触发它们。最好的选择是查找setTimeout / setInterval语句并复制它们。
无论如何,有一种肮脏的方式和干净的方式。我们假设您可以访问您的表格:
var target = document.querySelector('#some-id');
// Example from MDN
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
console.log(mutation.type); // here you'll get the changes
});
});
// configuration of the observer:
var config = { attributes: true, childList: true, characterData: true };
// pass in the target node, as well as the observer options
observer.observe(target, config);
它得到了更好的支持和更稳定,因为观察者真的是新的并且仍然存在问题。
每隔16毫秒检查表的.innerHTML
值是否发生了变化。
var oldHTML = "";
setTimeout(function(){
if(target.innerHTML !== oldHTML){
changed(); // changed is a function that you define and notify
}
},16);
如果有位置/等HTML更改,您可以使用.textContent
代替。
老实说,肮脏的方式更简单,更稳定 - 但更丑陋。我还是去找它。
答案 1 :(得分:0)
Benjamin Gruenbaum解决它) 我发布这里是为了更具可读性!
var dataTable = document.getElementById("event_1538016");
dataTable.appendChild = function(node)
{
console.log("trigged!");
document.appendChild.apply(dataTable,[node]); // args is array!!
return node;
}
在mozilla上完美运行!我希望它适用于IE9 +