Python и движок Spidermonkey Javascript в Linux

Я успешно установил движок Spidermonkey JS на мою Linux-машину ( Ubuntu). По сути, моя цель - заставить его выполнять сценарии Ajax (js) и возвращать результат обратно в мой сценарий Python. Я в основном пытаюсь построить хороший веб-скребок. Но мне довольно сложно заставить все это работать.

Сейчас я нахожусь в точке, где, когда я набираю JS в моем терминале, я могу начать выполнять Javascript. Я был в Google и нашел этот маленький фрагмент на Stackru:

import urllib2
import spidermonkey
js = spidermonkey.Runtime()
js_ctx = js.new_context()
script = urllib2.urlopen('http://etherhack.co.uk/hashing/whirlpool/js/whirlpool.js').read()
js_ctx.eval_script(script)
js_ctx.eval_script('var s="abc"')
js_ctx.eval_script('print(HexWhirpool(s))')

но не удалось запустить с ошибкой, что модуль Spidermonkey не может быть найден.

Я немного растерялся сейчас. Кто-нибудь может помочь?

3 ответа

Решение

Я тоже пробовал easy_install python-spidermonkey без удачи, для libnspr-dev пакет отсутствует.

Итак, я собрал пакет из исходного кода. Инструкции со страницы проекта (Debian Stretch):

Строительство

  1. Проверьте модуль Python-Spidermonkey из репозитория SVN (я скачал его как исходный архив, прямая ссылка)
  2. Распакуйте и перейдите на ./python-spidermonkey/trunk
  3. CPPFLAGS="-Wno-format-security" python setup.py build (эти флаги для Debian)
  4. ошибка jsemit.h:508:32: error: expected ‘(’ before ‘)’ token uintN decltype); Значит это decltype не может использоваться как переменная (возможно, это макрос или что-то еще), исправьте это следующим образом:

    sed -e 's / decltype / dectyp /' -i.ORIG./js/src/jsemit.h

    sed -e 's / decltype / dectyp /' -i.ORIG./js/src/jsemit.cpp

  5. ошибка jsemit.cpp:6490:1: error: narrowing conversion of ‘-1’ from ‘int’ to ‘uint8 {aka unsigned char}’ inside { } [-Wnarrowing] означает недопустимое преобразование переменной, перекомпилируйте его вручную:

    CD JS / SRC

    g++ -o Linux_All_DBG.OBJ/jsemit.o -c -Wall -Wno-сужение -Wno-формат -DDEBUG_user -DEDITLINE -ILinux_All_DBG.OBJ jsemit.cpp

  6. ошибка spidermonkey.c:1:2: error: #error Do not use this file, it is the result of a failed Pyrex compilation. - некоторые проблемы с пирексом. Есть патч. Сделай это так:

    wget -O - https://storage.googleapis.com/google-code-attachments/python-spidermonkey/issue-14/comment-4/cinit.patch | патч -p1 ./spidermonkey.pyx

Монтаж

su, а также python setup.py install как корень.

Бег

  1. По умолчанию установочный скрипт устанавливает libjs.so в /usr/local/lib/, так я и сделал ln -s /usr/local/lib/libjs.so /usr/lib/libjs.so (но вам лучше использовать решение от Seagal82)

Без этого шага Python продолжает жаловаться на импорт ImportError: libjs.so: cannot open shared object file: No such file or directory

  1. У меня тоже была ошибка ImportError: cannot import name Runtime после from spidermonkey import Runtime, Возможно, причина была в старых данных easy_install в ~/.local/lib/python2.7/site-packages/spidermonkey/, После удаления все работает гладко

Недавно у меня возникла задача сделать что-то вроде удаления из Интернета, и для части javascript, в настоящее время хочу попробовать использовать python-spidermonkey для ее решения и посмотреть, может ли это работать для меня...

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

Traceback (most recent call last):
  File "spidermonkeytest.py", line 2, in <module>
    import spidermonkey
ImportError: libjs.so: cannot open shared object file: No such file or directory

затем после некоторого поиска по Google... я нашел решение, вероятно, в конце здесь: http://hi.baidu.com/peizhongyou/item/ec1575c3f0e00e31e80f2e48

я настраиваю эти вещи:

$sudo vi /etc/ld.so.conf.d/libjs.so.conf

заполните эту строку:

/usr/local/lib/

сохранить и выйти, выполнить ldconfig:

$sudo ldconfig

тогда я могу запустить скрипт, предоставленный выше @Synbitz Prowduczions, не знаю, нужен ли вам этот ответ, или это все еще помогает?

Вам нужно попробовать libnspr4. Если это не сработает, вы всегда можете скачать его с Mozilla и создать код самостоятельно.

Не сложно набрать ./config && make && make install построить библиотеку самостоятельно после распаковки исходного кода. Если вы создаете себя, файлы, скорее всего, будут в

/ USR / местные /{включают в себя, Lib}

Также попробуйте Google для "YOUR_OS_NAME install nspr4".

  • Я полагаю, что кто-то написал переводчик заголовочных файлов C/C++ для Python ctypes. Хотя я не могу сказать больше, потому что я не использую Python.
  • SpiderMonkey также имеет собственную реализацию ctypes по образцу Python. Так что технически, если вы знаете javascript, вы можете вообще отказаться от использования Python, поскольку вы хотите сделать с ним немного ajax. Вам нужно будет освежить сокеты времени выполнения NSPR или C, чтобы соответствовать требованиям для ваших проектов с использованием только Spidermonkey.

ИЛИ веб-поиск Python +AJAX может найти именно то, что вам нужно.

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