使用Selenium向Neo4j浏览器输入Cypher命令文本消失如何解决
Neo4j浏览器查询输入自动化解决方案
问题原因
你当前直接修改DOM元素outerHTML的方式无法生效,是因为Neo4j浏览器的查询输入框基于Monaco代码编辑器实现,该编辑器采用内部状态管控内容,修改DOM仅改变了表层渲染结果,没有同步编辑器内部状态,触发运行、失焦等操作时,编辑器会基于内部原始状态重新渲染内容,导致你修改的文本直接消失。
可行解决方案
方案1:调用Monaco编辑器API(最稳定,优先推荐)
直接通过JS调用编辑器内置API修改内部状态,内容不会丢失,Python Selenium代码如下:
cypher = "MATCH (n) RETURN n LIMIT 10" driver.execute_script(f""" const editor = monaco.editor.getEditors()[0]; editor.setValue(`{cypher}`); """)
执行完上述代码后直接点击运行按钮即可生效。
方案2:模拟键盘输入(兼容场景更广泛)
如果遇到编辑器实例获取失败的情况,可以先激活编辑器再模拟全选替换输入,代码如下:
from selenium.webdriver.common.by import By from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.keys import Keys # 定位编辑器区域并点击激活 editor = driver.find_element(By.CSS_SELECTOR, ".monaco-editor") editor.click() # 全选原有内容后输入新的Cypher语句 ActionChains(driver)\ .key_down(Keys.CONTROL)\ .send_keys("a")\ .key_up(Keys.CONTROL)\ .send_keys("MATCH (n) RETURN n LIMIT 10")\ .perform()
内容的提问来源于stack exchange,提问作者Nayeer Mahiuddin
相关产品推荐
相关产品推荐

