在这里,我有一些Python代码可打开我的JavaScript文件并将其执行到网页中。我看到有帖子说execute_async_script()
可以处理JavaScript中的回调,但我不太了解。
with open("script.js") as f:
script_source = f.read()
wait.until(EC.element_to_be_clickable((By.CLASS_NAME, "textArea-2Spzkt")))
script_exc = driver.execute_async_script(script_source)
print("test", script_exc)
这是Selenium正在注入的JavaScript。它侦听特定类中的更改,并在检测到更改时将字符串输出到控制台。
// Select the node that will be observed for mutations
var targetNode = document.getElementsByClassName('messagesWrapper-3lZDfY')[0];
// Options for the observer (which mutations to observe)
var config = { attributes: false, childList: true, subtree: true };
// Callback function to execute when mutations are observed
var callback = function(mutationsList, observer) {
for(var mutation of mutationsList) {
if (mutation.type == 'childList') {
console.log('A child node has been added or removed.');
}
else if (mutation.type == 'attributes') {
console.log('The ' + mutation.attributeName + ' attribute was modified.');
}
}
};
// Create an observer instance linked to the callback function
var observer = new MutationObserver(callback);
// Start observing the target node for configured mutations
observer.observe(targetNode, config);
我希望能够获得JavaScript以在检测到节点更改时在Python控制台中返回一个字符串"node change detected"
。因此,在我的Python代码中,它说print("test", script_exc)
,我希望它打印test
和node change detected
。从整体上来说,我对JavaScript还是一个新手,对Python也有点初学者。我看到有人说要在JavaScript中使用arguments[0]
,但我不知道这在我的Python代码中有何关系。
答案 0 :(得分:0)
在JavaScript中使用 arguments [0] 表示回调已完成。
script="var a = 1;"
// if return a, use execute_script()
a = driver.execute_script("return a;")
// or use execute_async_script()
async_script="return arguments[0](a)"
a = driver.execute_async_script(async_script)