Chrome DevTools Protocol:能否将Runtime.RemoteObject传入Runtime.evaluate执行脚本?
Chrome DevTools Protocol(CDP)传递RemoteObject到Runtime.evaluate的实现方法
可以实现,但你提供的示例代码参数传递方式有误,需要按CDP规范调整参数格式:
核心要点
通过DOM.resolveNode获取的Runtime.RemoteObject,需要通过Runtime.evaluate的args参数传入,而非直接作为第二个参数传递。CDP会自动将args数组中的RemoteObject映射到脚本的arguments变量中。
修正后的Python示例代码
chrome: PyChromeDevTools.ChromeInterface node_id = "<node-id-of-an-element>" # 解析nodeId为RemoteObject resolve_result = chrome.DOM.resolveNode(nodeId=node_id) remote_object = resolve_result['result']['object'] # 调用Runtime.evaluate执行点击操作,正确传入RemoteObject chrome.Runtime.evaluate( expression="arguments[0].click()", args=[remote_object], returnByValue=False # 无需返回执行结果时可设置为False )
关键细节说明
DOM.resolveNode的返回结构中,result.object才是包含objectId的完整RemoteObject,这是CDP识别远程元素的核心标识args参数必须是数组类型,每个元素对应脚本中arguments数组的下标(比如args[0]对应arguments[0])- 如果需要获取脚本执行后的返回值,可以保留
returnByValue=True(默认值),并接收Runtime.evaluate的返回结果
内容的提问来源于stack exchange,提问作者enesalsat
相关产品推荐
相关产品推荐

