没直接使用HTTP协议,我想试试JavaScript直接操控Web界面,类似某些自动化测试工具那样。
删除确认对话框不知道是动画效果还是防bot保护等缘故,同一个div会弹出消失重复6次,如果在第一次自动点击“确定”,会无效,并且之后再也无法弹出。
我写了一个自动删除下一条的按钮,效果还行,按一下删除一个。代码如下:
let button = document.createElement('button');
button.innerHTML = '删除下一条';
button.style.cssText = 'display:block;position:fixed;right:0;bottom:0;';
button.onclick = function() {
let deleteLink = document.querySelector('a[action-type=feed_list_delete]');
if (deleteLink) {
console.log(deleteLink);
let popupCount = 0;
let autoClickPopupOkButton = function(e) {
let node = e.target;
if (node.classList.contains('W_layer_pop')) {
popupCount++;
console.log('inserted', popupCount, node);
if (popupCount == 6) {
document.removeEventListener('DOMNodeInserted', autoClickPopupOkButton);
let okButton = node.querySelector('a[action-type=ok]');
if (okButton) {
okButton.click();
}
}
}
}
document.addEventListener('DOMNodeInserted', autoClickPopupOkButton);
deleteLink.click();
}
};
document.body.appendChild(button);
如果需要完全自动地删除本页所有微博,代码大致如下,不过确认对话框多次弹出的问题不太好解决,即便写出来也未必完美,未必以后还能用,不想费这个功夫了。
function* clickNextDeleteLink() {
for (let deleteLink of document.querySelectorAll('a[action-type=feed_list_delete]')) {
console.log(deleteLink);
deleteLink.click();
yield true;
}
}
function batchDelete() {
document.addEventListener('DOMNodeInserted',function(e) {
let node = e.target;
if (node.classList.contains('W_layer_pop')) {
console.log('inserted', node);
let okButton = node.querySelector('a[action-type=ok]');
if (okButton) {
okButton.click();
}
}
});
document.addEventListener('DOMNodeRemoved',function(e) {
let node = e.target;
if (node.classList.contains('W_layer_pop')) {
console.log('removed', node);
clickNextDeleteLink.next();
}
});
}