以编程方式在 Google Colab 中“运行所有单元格”命令

谢尔盖卡·乌拉贝卡

我需要以编程方式从 Google Colab 菜单“运行时”运行某些命令“全部运行”。它没有任何明显的“onclick”事件处理程序,我可以从该页面上的 javascript 代码调用它。页面上的其他“div”可以从 js 调用,例如,我可以使用 js 代码连接到运行时:

document.querySelector('#top-toolbar > colab-connect-button').shadowRoot.querySelector('#connect').click();

运行时菜单是一个下拉菜单,我尝试了其中的.click()每个<div>项目,但没有效果。

“全部运行”命令也有一个热键,Ctrl + F9但向document元素分派事件无效。但是我可以Enter使用以下代码向笔记本内的任何输入字段发送命令:

document.querySelector('input.raw_input').dispatchEvent(new KeyboardEvent('keydown', {key: 'Enter'}))

使用 Chrome 代码检查器,Ctrl + Shift + I我查看了“全部运行”命令,它看起来像:

<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>

所以我在页面上检查器代码的 Sources 选项卡中搜索,发现在https://colab.research.google.com/v2/external/external_polymer_binary.js文件中出现了“runall”

, 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()orc.notebook.getKernel().restart()但问题一直都是一样的:这些命令的根对象是什么?我试过了document.window.但结果是“未定义”或“不是函数”。我认为我可以在如下字符串中调用 runall() 命令:

document.**SOMETHING I DONT KNOW**.runAll()

我对前端/js 很不满意,很难在混淆代码中找到一些东西,但如果我们有这样的功能,比如.runAll()连接到所需菜单项的 javascript 代码,我可以从控制台或 javascript 注入以编程方式运行它

或者也许可以将键盘事件分派Ctrl + F9给某个元素以运行此命令,因此问题是分派键盘事件所需的对象是什么

帕克斯顿4416

出于类似的原因,我花了一段时间梳理了那个 javascript 文件,最后想出了如何使这个工作正常进行。

这是一个以编程方式运行所有单元格的函数:

function runAll() {
  const F9Event = {key: "F9", code: "F9", metaKey: true, keyCode: 120};
  document.dispatchEvent(new KeyboardEvent("keydown", F9Event));
}

需要注意的是KeyboardEvent.keyCode已被弃用的青睐KeyboardEvent.code,但你仍然需要在此处提供(截至21年5月18日),因为它是Colab用来检查键盘输入的属性。

无论平台如何,您也可以交替使用metaKey: truectrlKey: true,因为 Colab 只检查需要它们的快捷方式是否存在KeyboardEvent.metaKeyKeyboardEvent.ctrlKey

我还发现了许多其他有趣和有用的命令,例如this.notebook.getKernel().isRunning()orc.notebook.getKernel().restart()但问题一直都是一样的:这些命令的根对象是什么?

有一个全局colab对象可以提供对某些(但不是全部)功能的访问。大多数事情都可以通过 访问colab.global,例如重新启动内核,您可以使用:

colab.global.notebook.kernel.restart()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Google Colab:运行所有单元格直到当前单元格

如何以编程方式检查与哪个运行时Google Colab笔记本相连?

Google Colab中jupyter笔记本的所有单元格输出消失

以编程方式检索Google表格单元格边框样式

在单元格输出 iframe 中,Google colab 无法重新启动运行时

如何停止特定单元格在Google Colab中运行?

是否可以从带有 google colab 中的代码单元格的文本单元格中获取文本?

以预定的方式从 Google Colab 下载

Google Colab中的ScispaCy

以编程方式在Google表格中插入公式

运行任何单元格的Google Colab收到javascript相关错误

您可以通过编程方式在Google表格单元格中生成按钮吗?

以编程方式测试Google表格单元格是否在命名范围内

在Google Colab上运行Docker

如何从Google Colab笔记本的单元格中删除表格?

访问Google Colab中的文件

在 google colab 中安装 pygrahviz

Google Colab中的Spacy取代

在Google Colab中安装RDKit

在 Google Colab 中解压失败

无法在Google Colab中运行Pyspark

在Google Colab中运行TensorFlow测试

无法在Google Colab中运行FlappyBird PLE

以编程方式检查android设备是否具有Google Play?

如何在Google Closure中以编程方式设置边框

以编程方式禁用 Google Text To Speech (TTS) 中的 WiFi 选项

以编程方式在Google Spreadsheet Chart中设置最小值

在Android中以编程方式设置Google Map Api键

如何以编程方式在Android应用中打开Google课堂