Уведомления

Группа в Telegram: @pythonsu

#1 Июль 2, 2011 14:49:58

shep
От:
Зарегистрирован: 2011-07-02
Сообщения: 19
Репутация: +  2  -
Профиль   Отправить e-mail  

Исполнение кода javascript

Здравствуйте.
Пишу авторизацию на сайт. Один параметр передается в виде выражения на java script. Естественно браузер просчитывает его и передает в запросе.

Выражение простое:

jsc= 10>(Math.abs(10)+Math.abs(76))?10+(Math.abs(10)+Math.abs(76))*2:(Math.abs(10)+Math.abs(76))+10*3
Готового интепретатора нигде не нашел.
Получается единственная проблема это преобразование условного оператора (cond?True:False) в эквивалент на python (True if cond else False).

Пытался составить регулярку для замены но срабатывает в 60 % случаев т.к. есть скобки и они несколько мешают правильной замене.
 
def _jsrecognize(text):
"""Translate javascrip to python syntax"""
oldtext=text
text=re.sub('([^(]*)\?(.*?)\:([^)]*)','(\g<2>) if (\g<1>) else (\g<3>) ',text,re.DOTALL)
text=text.strip()
print (text)
if _DEBUG: open('jsc.txt','a').write(text+'\n')
try:
return eval(text)
except:
print "Can't Eval"
text=oldtext
text=re.sub('([^(]*)\?(.*?)\:([^)]*)','(\g<2>) if (\g<1>) else (\g<3>) ',text,re.DOTALL)
text=text.strip()
print (text)
if _DEBUG: open('jsc.txt','a').write(text+'\n')
try:
return eval(text)
except:
return 0
Вобщем сижу мучаюсь. Помогите составить правильную регулярку или может все-таки есть модуль для такой элементарной эмуляции



Офлайн

#2 Июль 2, 2011 17:21:57

cookie-god
От:
Зарегистрирован: 2011-03-13
Сообщения: 41
Репутация: +  0  -
Профиль   Отправить e-mail  

Исполнение кода javascript

Если ОС - Windows, то почему бы не записать ваш джаваскрипт в файл temp.js и не считать результат его выполнения через subprocess.check_output
temp.js может выглядеть вот так

jsc= 10>(Math.abs(10)+Math.abs(76))?10+(Math.abs(10)+Math.abs(76))*2:(Math.abs(10)+Math.abs(76))+10*3;
WScript.Echo(jsc);
сразу готовая функция для запуска жскрипт
>>> def execute_js(script):
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess._subprocess.STARTF_USESHOWWINDOW
return subprocess.check_output(["cscript.exe","//Nologo",script],startupinfo=startupinfo)

>>> execute_js("C:\\dd\\test.js")
'116\r\n'



Отредактировано (Июль 2, 2011 17:28:12)

Офлайн

#3 Июль 2, 2011 19:15:23

shep
От:
Зарегистрирован: 2011-07-02
Сообщения: 19
Репутация: +  2  -
Профиль   Отправить e-mail  

Исполнение кода javascript

Спасибо.
А для какой версии этот код.

AttributeError: ‘module’ object has no attribute ‘_subprocess’
check_output тоже нет python 3.0.1 и 2.5



Офлайн

#4 Июль 2, 2011 21:33:22

cookie-god
От:
Зарегистрирован: 2011-03-13
Сообщения: 41
Репутация: +  0  -
Профиль   Отправить e-mail  

Исполнение кода javascript

Я пробовал на 2.7, наверное, в вашем случае надо это как-то через пайпы делать, мануалы в интернете есть, ну или поставить 2.7 питон.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version