У меня есть устройство, плата из четырех программируемых электрических разъемов, если быть точным. Интерфейс устройства с ПК находится через порт TCP/IP. Устройство имеет пользовательский интерфейс веб-браузера, доступный на локальном IP-адресе.отправка команды javascript из оболочки python
На странице интерфейса интерфейса Javascript есть код Javascript, который, как я полагаю, делает интерактивную веб-страницу и определяет поведение страницы. Во-первых, могу ли я отправить Javascript-команды из Python для переключения сокетов с помощью веб-интерфейса (если у меня есть TCP/IP-соединение с сервером, открытым из Python.) Поэтому для этого мне нужно будет вызвать функцию Javascript в оболочке Python. Как это сделать? Во-вторых, мне нужен comet в этом случае, потому что мне нужно нажать Javascript-команду на определенный IP-адрес и порт из Python.
Вот мой питон код:
import socket
import time
TCP_IP = 'xxx.xxx.y.zzz'
TCP_PORT = wwww
MESSAGE1 = "xxx.xxx.y.zzz/";
MESSAGE2 = "javascript: ChangeState('1')"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((TCP_IP, TCP_PORT))
s.send(MESSAGE1)
s.send(MESSAGE2)
s.close()
и это Java-функция:
function ChangeState(sn) {
f = document.forms.tForm;
ind = sn * 1 - 1;
f["cte" + sn].value = Math.abs(1 - sockstates[ind]);
f.submit();
}
function ActivateDeactivate() {
f = document.forms.tForm2;
f["activate"].value = actbtn;
f.submit();
}
function TimerFunction() {
clearTimeout(timer);
if (trycon == 1 && active == 1) {
document.location.href = "xyz.html";
}
}
function StartTimer() { timer = setTimeout(TimerFunction, period); }
window.onload = function() {
for (i = 0; i < 4; i++) {
if (sockstates[i] == 0) {
clsname = 'offstate';
str1 = 'OFF';
str2 = 'ON';
} else {
clsname = 'onstate';
str1 = 'ON';
str2 = 'OFF';
}
strhtml = '<span class="' + clsname + '">' + str1 +
'</span> <a href="javascript: ChangeState(\'' + (i + 1) +
'\')" class="onoffbtn">' + str2 + '</a>';
el = document.getElementById('stCont' + i);
el.innerHTML = strhtml;
}
statA = '';
statB = '';
statC = '';
rmsg = '';
if (ipid != 0) {
statA = "Registered - ";
tmpel = document.getElementById('regBtn');
tmpel.innerHTML = 'Login';
} else {
rmsg = "Register to manage AB-xyz-LAN from Internet (free service)";
}
if (active == 1) {
statB = "Activated - ";
} else {
statB = "Not activated";
}
if (active == 1) {
if (trycon == 1) {
statC = "Trying to connect";
} else if (serv == 1) {
statC = "Connected";
} else if (serv == 0) {
statC = "Not connected";
}
}
statAel = document.getElementById('statusA');
statAel.innerHTML = statA;
statBel = document.getElementById('statusB');
statBel.innerHTML = statB;
statCel = document.getElementById('statusC');
statCel.innerHTML = statC;
rmsgel = document.getElementById('regmsg');
rmsgel.innerHTML = rmsg;
actBtnEl = document.getElementById("actBtn");
if (actbtn == 1) {
actBtnEl.innerHTML = 'Activate';
} else {
actBtnEl.innerHTML = 'Deactivate';
}
regBtnEl = document.getElementById("regBtn");
regBtnEl.href = "http://www.example.com/user/register.aspx?mac=" + mac;
if (warn == 1) {
alert("Failed to connect. Please, check DNS server settings.");
}
if (warn == 2) {
alert("Failed to activate. Please, check, that device is registered.");
}
StartTimer();
}
Если вы хотите, чтобы ваш скрипт Python маскировался как браузер и запускал функцию JavaScript, вам, вероятно, понадобится полноценная среда браузера и движок JavaScript в Python, что будет довольно тяжелым требованием для вашей задачи. Можете ли вы прочитать исходный код этой функции «ChangeState» и посмотреть, что он делает? Вероятно, это просто запрос на определенный маршрут на веб-сервере, который запускает действие на аппаратном обеспечении. Надеюсь, гораздо проще перенести эту функцию на Python. –
Я немного очистил код для вас (не уверен, что он пришел без перерывов или если это было просто неудачное пастовое задание). Похоже, что 'ChangeState (1)' захватывает HTML-форму под названием 'tForm', устанавливая одну из своих записей в' Math.abs (1 - sockstate [0]) 'и отправляя эту форму. У HTML есть какие-либо признаки того, что происходит, когда этот 'tForm' отправлен? –
большое спасибо. @AhmedFasih. Но моя проблема в том, какие команды (возможно, Javascript) мне нужно отправить из Python Shell, чтобы переключать мои сокеты по моей воле. – JosephAgnes