DrissionPage执行js返回元素不存在
为什么在浏览器执行就可以正常获取container 但是用DrissionPage执行js获取的container 就为空列表
DrissionPage执行js返回元素不存在但是在浏览器控制台执行是正常存在的
区别就是用js返回列表需要用匿名函数包裹
(function() {
const container = document.querySelector('#messageContent');
if (!container) {
return []; // 容器不存在时返回空数组,而非None
}
// 递归获取所有子节点的文本,保留结构
function getAllTextWithStructure(element) {
let result = [];
for (let child of element.childNodes) {
if (child.nodeType === 3 && child.textContent.trim()) { // 文本节点
result.push(child.textContent.trim());
} else if (child.nodeType === 1) { // 元素节点
result.push(getAllTextWithStructure(child));
}
}
return result.flat().filter(Boolean); // 扁平化并过滤空值
}
// 容错:容器不存在时返回空数组
const textList = container ? getAllTextWithStructure(container) : [];
return textList; // 函数内部的return是合法的
})(); // 立即执行这个匿名函数
为什么在浏览器执行就可以正常获取container 但是用DrissionPage执行js获取的container 就为空列表
舍弃匿名函数直接获取innerText或textContent后直接处理
JavaScript运行错误。
JS: function(){return document.getElementById('messageContent').innerText.split(["
"]).map(item => item.trim()).filter(Boolean); || document.getElementById('messageContent').textContent.split(["
"]).map(item => item.trim()).filter(Boolean);;}
详情: {'exceptionId': 3, 'text': 'Uncaught', 'lineNumber': 0, 'columnNumber': 78, 'scriptId': '574', 'exception': {'type': 'object', 'subtype': 'error', 'className': 'SyntaxError', 'description': 'SyntaxError: Invalid or unexpected token', 'objectId': '{"injectedScriptId":1,"id":13}'}}
版本: 4.1.1.2
注意:在 Python 字符串中写正则 \r?\n,需要双反斜杠:/\\r?\\n/