我可以将操作从 selenium 会话复制到其他会话吗?

Posted

技术标签:

【中文标题】我可以将操作从 selenium 会话复制到其他会话吗?【英文标题】:Can I copy actions from selenium session to other sessions? 【发布时间】:2021-11-26 00:58:04 【问题描述】:

我想启动多个 selenium 会话,但只有其中一个可见。用户可以与此 webdriver 窗口进行交互,我想重新翻译他在其他会话上的所有操作。

如何在 python 上做到这一点?

【问题讨论】:

【参考方案1】:

没有。 Selenium 只能控制那些已经由它自己初始化的会话。 您不能为超过 1 个会话重新翻译测试操作。

您可以做的唯一类似的事情是创建少量(根据需要)测试,这些测试将在其内部包含相同的复制粘贴步骤,并在单独的窗口中运行每个步骤。

【讨论】:

【参考方案2】:

您可以做的是设置driver 以在每个页面加载时注入javascript。这个here in the answer section of this question有解决方案。

您将需要一个能够检测您想要“复制”的操作的 javascript。如果你只对点击动作感兴趣,一个非常简单的 js 就可以完成捕获点击事件的工作,there are a few examples in the answer section here。如果您可以确保窗口大小相同,则事件中的 X、Y 坐标就足够了。在我做类似事情的项目中,我计算了单击元素的 XPATH,并获取了所有输入字段的值。这不是一项微不足道的任务,而是一项非常可能的任务。当您拥有复制事件的数据时,您需要将其发送回 python。请参阅answers to this question 如何通过 javascript 发布数据。

您将需要一个烧瓶/瓶子或类似的框架(或重新发明***)来接收数据并将其发送到其他 selenium 实例。 answers of this question 中有一些很好的示例如何从浏览器获取 JSON 数据到烧瓶中。

在将数据从浏览器发送到烧瓶时,您可能需要处理 CORS 问题。请参阅answers of this question 如何处理。

如果您在烧瓶中有数据,您需要做的就是在其他 driver 实例中复制事件。如果您使用坐标,您可以通过 ActionChains 在页面上单击,请参阅answers of this question。或者,如果您有元素 id-s 或 xpath 之类的,您可以找到该元素并单击它。编写一个将事件转换为 selenium 动作的解析器并不是像这样的项目中最困难的部分。 :)

嗯,就这么简单。我建议尝试一下,因为它会大大提高您的技能。我没有准备好复制粘贴的代码,但我提供了您开始所需的所有成分。

【讨论】:

以上是关于我可以将操作从 selenium 会话复制到其他会话吗?的主要内容,如果未能解决你的问题,请参考以下文章

粘性会话和会话复制

是否可以在 selenium.webdriver 和 requests.session 之间“传输”会话

将本地文件从 Mac 复制到终端中的 ssh 会话 [关闭]

在与 Scrapy 进行身份验证的登录会话后使用 Selenium

在单个会话中在 selenium 中运行多个测试

将文件从已安装的 Google Drive 复制到本地 Google Colab 会话