Как запустить скрипт Python из HTML в Google Chrome?

Я создаю расширение Chrome, и я хочу запустить скрипт python, который находится на моем компьютере, при нажатии кнопки из расширения (которое в основном является HTML). Сценарий python использует веб-драйвер selenium для очистки данных с веб-сайта и сохранения их в другом файле журнала.

См. nativeMessaging.

wOxxOm 29.11.2018 18:06

Не могли бы вы объяснить, как это сделать? Я не могу понять.

Ayush Kumar 29.11.2018 18:15

Изучите код демонстрационного расширения и демонстрационного хост-приложения в этой документации, я думаю, что это довольно тривиально. Или попробуйте найти учебник, который вам больше нравится.

wOxxOm 29.11.2018 18:17
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
3 232
1

Ответы 1

Вы в основном используете nativeMessaging. Он позволяет вам создать коммуникационный мост между вашим расширением и внешним процессом (например, python).

nativeMessaging работает путем установки хозяин на вашем компьютере и обмена данными с расширением Chrome через stdin и stdout. Например:

Хост на Python

Вот как вы пишете свой хост nativeMessaging на python, я включил полный пример этого из документации, но упростил понимание с меньшим количеством кода.

host.py

Это в основном эхо-сервер, уважающий stdin и stdout, проверяет, что он отправляет его как двоичный поток.

#!/usr/bin/env python

import struct
import sys
import os, msvcrt

# Set the I/O to O_BINARY to avoid modifications from input/output streams.
msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY)
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)

# Helper function that sends a message to the webapp.
def send_message(message):
   # Write message size.
  sys.stdout.write(struct.pack('I', len(message)))
  # Write the message itself.
  sys.stdout.write(message)
  sys.stdout.flush()

# Thread that reads messages from the webapp.
def read_thread_func():
  message_number = 0
  while 1:
    # Read the message length (first 4 bytes).
    text_length_bytes = sys.stdin.read(4)

    if len(text_length_bytes) == 0:
      sys.exit(0)

    # Unpack message length as 4 byte integer.
    text_length = struct.unpack('i', text_length_bytes)[0]

    # Read the text (JSON object) of the message.
    text = sys.stdin.read(text_length).decode('utf-8')

    send_message('{"echo": %s}' % text)


def Main():
    read_thread_func()
    sys.exit(0)

if __name__ == '__main__':
  Main()

host.json

Это определяет коммуникационный хост python, убедитесь, что гид расширения является гидом вашего расширения.

{
  "name": "com.google.chrome.example.echo",
  "description": "Chrome Native Messaging API Example Host",
  "path": "host.bat",
  "type": "stdio",
  "allowed_origins": [
    "chrome-extension://knldjmfmopnpolahpmmgbagdohdnhkik/"
  ]
}

host.bat

Это запускает исполняемый файл python.

@echo off
python "%~dp0/host.py" %*

install_host.bat

Вы запускаете это один раз, чтобы зарегистрировать свой хост в вашей ОС.

REG ADD "HKCU\Software\Google\Chrome\NativeMessagingHosts\com.google.chrome.example.echo" /ve /t REG_SZ /d "%~dp0host.json" /f

Расширение Chrome

manifest.json

Добавьте разрешения для nativeMessing

{
  "permissions": [
    "nativeMessaging"
  ]
}

communication.js

Чтобы подключиться к хосту python, вам необходимо сделать следующее:

const hostName = "com.google.chrome.example.echo";
let port = chrome.runtime.connectNative(hostName);
port.onMessage.addListener(onNativeMessage);
port.onDisconnect.addListener(onDisconnected);

Чтобы отправить сообщение на ваш хост Python, просто отправьте объект json в порт.

const message = {"text": "Hello World"};
if (port) {
    port.postMessage(message);
}

Чтобы узнать ошибку при отключении:

function onDisconnected() {
  port = null;
  console.error(`Failed to connect: "${chrome.runtime.lastError.message}"`);
}

Этот полный пример находится в документации, я просто переименовал некоторые вещи для ясности, доступен для Windows / Unix https://chromium.googlesource.com/chromium/src/+/master/chrome/common/extensions/docs/examples/api/nativeMessaging

Другие вопросы по теме