"Run all cells" Colab 中的 Google 命令以编程方式
"Run all cells" command in Google Colab programmatically
我需要从 Google Colab 菜单“运行time”以编程方式运行 某些命令“运行 全部”。它没有任何明显的“onclick”事件处理程序,我可以从该页面上的 javascript 代码调用它。
页面上的其他“div”可以从 js 调用,例如,我可以使用 js 代码连接到 运行time:
document.querySelector('#top-toolbar > colab-connect-button').shadowRoot.querySelector('#connect').click();
运行时间菜单是一个下拉菜单,我尝试 .click()
里面的每个 <div>
项目,但没有效果。
此外,“运行 all”命令有一个热键 Ctrl + F9
,但向 document
元素分派事件无效。但是我可以使用以下代码将 Enter
命令发送到笔记本内的任何输入字段:
document.querySelector('input.raw_input').dispatchEvent(new KeyboardEvent('keydown', {key: 'Enter'}))
使用 Chrome 代码检查器 Ctrl + Shift + I
我查看了“运行 all”命令,它看起来像:
<div command="runall" class="goog-menuitem" role="menuitem" id=":1w" style="user-select: none;"><div class="goog-menuitem-content" style="user-select: none;">Run all<span class="goog-menuitem-accel">Ctrl+F9</span></div></div>
所以我在页面上的检查器代码的源选项卡中搜索,发现 https://colab.research.google.com/v2/external/external_polymer_binary.js 文件中出现了“运行all”:
, Eja = X(new W({
id: "runall",
description: "Run all cells in notebook",
shortcut: IG(120)
120 - 顺便说一下,是 F9
按钮的键码。我还发现我认为需要菜单项的确切位置被称为:
case "runall":
d.runAll();
break;
但我几乎不可能理解什么是 d.
以及它的参考文献!
我还发现了许多其他有趣且有用的命令,例如 this.notebook.getKernel().isRunning()
或 c.notebook.getKernel().restart()
,但问题始终是相同的:这些命令的根对象是什么?我尝试了 document.
和 window.
但结果是“未定义”或“不是函数”。我认为我可以在如下字符串中调用 运行all() 命令:
document.**SOMETHING I DONT KNOW**.runAll()
我对 frontend/js 很不满意,很难在混淆代码中找到一些东西,但是如果我们在 javascript 代码中有 .runAll()
之类的功能,它连接到所需的菜单item I thick 可以从控制台以编程方式 运行 或 javascript 注入
或者也许可以将键盘事件 Ctrl + F9
分派到某个元素以便 运行 此命令因此问题是分派键盘事件所需的对象是什么
出于类似的原因,我花了一段时间梳理那个 javascript 文件,最后想出了如何让它工作。
这是一个以编程方式 运行 所有单元格的函数:
function runAll() {
const F9Event = {key: "F9", code: "F9", metaKey: true, keyCode: 120};
document.dispatchEvent(new KeyboardEvent("keydown", F9Event));
}
请注意 KeyboardEvent.keyCode
is deprecated in favor of KeyboardEvent.code
,但您仍然需要在此处提供它(自 2021 年 5 月 18 日起),因为它是 属性 Colab 用来检查键盘输入的。
您还可以互换使用 metaKey: true
和 ctrlKey: true
,而不管平台如何,因为 Colab 只会检查是否存在 KeyboardEvent.metaKey
or KeyboardEvent.ctrlKey
用于需要它们的快捷方式。
Also I found many other interesting and useful commands like this.notebook.getKernel().isRunning()
or c.notebook.getKernel().restart()
but the question is the same all the time: what is the root object for those commands?
有一个全局 colab
对象可以提供对某些(但不是全部)功能的访问。大多数内容都可以通过 colab.global
访问,例如重启内核,你可以使用:
colab.global.notebook.kernel.restart()
我需要从 Google Colab 菜单“运行time”以编程方式运行 某些命令“运行 全部”。它没有任何明显的“onclick”事件处理程序,我可以从该页面上的 javascript 代码调用它。 页面上的其他“div”可以从 js 调用,例如,我可以使用 js 代码连接到 运行time:
document.querySelector('#top-toolbar > colab-connect-button').shadowRoot.querySelector('#connect').click();
运行时间菜单是一个下拉菜单,我尝试 .click()
里面的每个 <div>
项目,但没有效果。
此外,“运行 all”命令有一个热键 Ctrl + F9
,但向 document
元素分派事件无效。但是我可以使用以下代码将 Enter
命令发送到笔记本内的任何输入字段:
document.querySelector('input.raw_input').dispatchEvent(new KeyboardEvent('keydown', {key: 'Enter'}))
使用 Chrome 代码检查器 Ctrl + Shift + I
我查看了“运行 all”命令,它看起来像:
<div command="runall" class="goog-menuitem" role="menuitem" id=":1w" style="user-select: none;"><div class="goog-menuitem-content" style="user-select: none;">Run all<span class="goog-menuitem-accel">Ctrl+F9</span></div></div>
所以我在页面上的检查器代码的源选项卡中搜索,发现 https://colab.research.google.com/v2/external/external_polymer_binary.js 文件中出现了“运行all”:
, Eja = X(new W({
id: "runall",
description: "Run all cells in notebook",
shortcut: IG(120)
120 - 顺便说一下,是 F9
按钮的键码。我还发现我认为需要菜单项的确切位置被称为:
case "runall":
d.runAll();
break;
但我几乎不可能理解什么是 d.
以及它的参考文献!
我还发现了许多其他有趣且有用的命令,例如 this.notebook.getKernel().isRunning()
或 c.notebook.getKernel().restart()
,但问题始终是相同的:这些命令的根对象是什么?我尝试了 document.
和 window.
但结果是“未定义”或“不是函数”。我认为我可以在如下字符串中调用 运行all() 命令:
document.**SOMETHING I DONT KNOW**.runAll()
我对 frontend/js 很不满意,很难在混淆代码中找到一些东西,但是如果我们在 javascript 代码中有 .runAll()
之类的功能,它连接到所需的菜单item I thick 可以从控制台以编程方式 运行 或 javascript 注入
或者也许可以将键盘事件 Ctrl + F9
分派到某个元素以便 运行 此命令因此问题是分派键盘事件所需的对象是什么
出于类似的原因,我花了一段时间梳理那个 javascript 文件,最后想出了如何让它工作。
这是一个以编程方式 运行 所有单元格的函数:
function runAll() {
const F9Event = {key: "F9", code: "F9", metaKey: true, keyCode: 120};
document.dispatchEvent(new KeyboardEvent("keydown", F9Event));
}
请注意 KeyboardEvent.keyCode
is deprecated in favor of KeyboardEvent.code
,但您仍然需要在此处提供它(自 2021 年 5 月 18 日起),因为它是 属性 Colab 用来检查键盘输入的。
您还可以互换使用 metaKey: true
和 ctrlKey: true
,而不管平台如何,因为 Colab 只会检查是否存在 KeyboardEvent.metaKey
or KeyboardEvent.ctrlKey
用于需要它们的快捷方式。
Also I found many other interesting and useful commands like
this.notebook.getKernel().isRunning()
orc.notebook.getKernel().restart()
but the question is the same all the time: what is the root object for those commands?
有一个全局 colab
对象可以提供对某些(但不是全部)功能的访问。大多数内容都可以通过 colab.global
访问,例如重启内核,你可以使用:
colab.global.notebook.kernel.restart()