gpt4 book ai didi

javascript - 如何将元素从外部移动/拖动到 iframe

转载 作者:行者123 更新时间:2023-12-01 14:44:49 24 4
gpt4 key购买 nike

我需要将元素从 iframe 外部移动到 iframe 中。我的元素面板不是 iframe 的一部分,但我的 Canvas 在 iframe 中并且想要将元素移动到其中。

我尝试了以下代码:

 element_source = self._selenium.find_element(By.XPATH,
'//div[@class="gjs-block-label"][contains(.,"Tooltip")]')
element_target=self._selenium.find_element(By.CLASS_NAME,'gjs-frame')
actions = ActionChains(self._driver)
actions.drag_and_drop(element_source, element_target).perform()
time.sleep(5)

看起来问题是我必须在移动元素之前切换到 iframe,但在这里我看不到这种可能性,因为 drag_and_drop 是我的 的组合方法元素来源 超出 iframe 和 元素目标 是 iframe 本身。

所以如果我在拖放之前切换,它甚至找不到 元素来源 .

这是我正在处理的演示页面: https://grapesjs.com/demo.html

在上面的演示中,左侧是 iframe,右侧面板是元素的集合。

最佳答案

按照@supputuri 链接的答案中的建议使用JS 消息传递可能无法完全模拟实际用户执行的典型拖放操作。
一种可能的解决方案是尝试扩展 Selenium ActionChains API 并实现新方法,允许您在一帧上开始拖动,切换到 iframe 并放在那里。我确信 API 是可扩展的,但无法说明实现此解决方案的可能性或容易程度。
另一种选择是根据两个帧上元素的已知信息进行一些计算,以获得要放置元素的位置的偏移量,然后使用 Actions API 中的一些适当方法 - drag_and_drop_by_offset , 或 click_and_hold 的某种组合, move_by_offset , move_to_element , move_to_element_with_offsetrelease .
如果我有时间,我会尝试其中的几个,让你知道它是否有效。

编辑:尽管这个答案的第一行说了什么,但当我不得不自己使用葡萄时,最终起作用的是我使用网络驱动程序运行的一些自定义 js execute_script刚刚访问葡萄js的方法editor附加到 window 的对象.调用editor.addComponents有了我想添加的内容就可以了。但是,我必须在用户在页面上看到的 block 标签与该组件的内部 block ID 和 HTML 内容之间创建一个映射,所以我可以只传递用户看到的组件的标签/名称,它会得到添加。也许有一个理想的解决方案可以模拟实际用户通过拖放所做的所有操作,但我还没有做到。

关于javascript - 如何将元素从外部移动/拖动到 iframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61053232/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com