V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
wico77
V2EX  ›  Python

如何在 python 里运行 js 代码?

  •  
  •   wico77 · 2016-10-28 00:24:36 +08:00 · 7912 次点击
    这是一个创建于 2709 天前的主题,其中的信息可能已经有所发展或是发生改变。

    pyv8 已经没人维护了。没法使用。其他还有什么好用的包吗

    20 条回复    2016-11-04 04:53:37 +08:00
    tinyproxy
        1
    tinyproxy  
       2016-10-28 00:32:42 +08:00
    我的做法是直接扔到 node 里面跑完给结果,但如果你的东西上下文相关,为啥不拿 node 来用呢,或者自己拿 v8 编译成动态库用 python 去调用呢。
    wico77
        2
    wico77  
    OP
       2016-10-28 01:09:20 +08:00
    @tinyproxy 我的 js 带 dom 操作。比较麻烦。能用 selenium 吗。我就想要运行后的数据。
    zhuangzhuang1988
        3
    zhuangzhuang1988  
       2016-10-28 02:25:58 +08:00
    @wico77 dom 操作属于浏览器范畴了, 有 pyv8 也没用。。
    wico77
        4
    wico77  
    OP
       2016-10-28 03:12:01 +08:00
    @zhuangzhuang1988 python 里哪个库可以运行 js 加密结果(会操作 dom),然后返回数据。
    moyang
        5
    moyang  
       2016-10-28 03:18:06 +08:00
    @wico77 jsdom node 里跑没有问题 https://github.com/tmpvar/jsdom
    Trim21
        6
    Trim21  
       2016-10-28 04:43:39 +08:00 via Android
    execjs
    wico77
        7
    wico77  
    OP
       2016-10-28 05:08:39 +08:00
    @Trim21 execjs 不能操作 dom 吧
    Trim21
        8
    Trim21  
       2016-10-28 05:22:47 +08:00 via Android
    @wico77 那是 node 那边的事情了,不是 Python 的事情了
    dsg001
        9
    dsg001  
       2016-10-28 08:21:41 +08:00
    @tinyproxy 有相关 demo 没?
    Librazy
        10
    Librazy  
       2016-10-28 08:54:15 +08:00 via Android
    不如 node 调用 python 吧。。
    tinyproxy
        11
    tinyproxy  
       2016-10-28 13:34:03 +08:00
    @dsg001 把你的 JS 代码 wrapp 一下,需要的数据通过 console.log 输出,然后读子进程的输出就好了。
    tinyproxy
        12
    tinyproxy  
       2016-10-28 13:39:02 +08:00
    @wico77 看你的描述是为了爬东西, selenium 的效率相对比较低一点,如果你可以接受当然没问题。
    master13
        13
    master13  
       2016-10-28 14:51:50 +08:00
    phantomJS
    wujunze
        14
    wujunze  
       2016-10-28 15:03:39 +08:00
    phantomJS +1
    triostones
        15
    triostones  
       2016-10-28 23:30:12 +08:00
    Selenium.
    wico77
        16
    wico77  
    OP
       2016-10-29 03:57:19 +08:00
    我已经想用 v8 跑这段 js ,等结果出来。但麻烦的是 pyv8 会在 js 操作 dom 的时候给出错误。怎么阻止 v8 操作 dom ?或者遇到错误的时候跳过?
    @triostones
    @wujunze
    @master13
    @tinyproxy
    @Trim21
    wico77
        17
    wico77  
    OP
       2016-10-29 04:02:25 +08:00
    sleshep
        18
    sleshep  
       2016-10-29 10:24:25 +08:00
    模拟 window 等对象,即可
    mingyun
        19
    mingyun  
       2016-10-29 18:54:08 +08:00
    windows 下安装出错怎么办?
    $ pip install pyv8
    Collecting pyv8
    Using cached PyV8-0.5.zip
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
    File "<string>", line 1, in <module>
    File "C:\Users\ADMINI~1\AppData\Local\Temp\pip-build-s20z1zyl\pyv8\setup.p
    y", line 17, in <module>
    include_dirs += os.environ["INCLUDE"].split(';')
    File "d:\python3\lib\os.py", line 725, in __getitem__
    raise KeyError(key) from None
    KeyError: 'INCLUDE'

    ----------------------------------------
    Command "python setup.py egg_info" failed with error code 1 in C:\Users\ADMINI~1
    \AppData\Local\Temp\pip-build-s20z1zyl\pyv8\
    wico77
        20
    wico77  
    OP
       2016-11-04 04:53:37 +08:00
    @sleshep 如何模拟出 window 等对象。网站找不到好的教程。 pyv8 现在用的人很少了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   981 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 22:00 · PVG 06:00 · LAX 15:00 · JFK 18:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.