如何从Python调用Javascript函数?

如何从Python调用Javascript函数?,javascript,python,web-scraping,Javascript,Python,Web Scraping,我正在做一个网页抓取项目。我正在使用的一个网站的数据来自Javascript 有人建议我可以直接从Python调用Javascript,但我不确定如何实现这一点 例如:如果JavaScript函数定义为:add_2(var,var2) 如何从Python中调用该JavaScript函数?查找具有Python绑定的JavaScript解释器。(试试Rhino?V8?SeaMonkey?)。当您找到一个时,它应该附带如何从python使用它的示例 但是,Python本身不包括JavaScript解释

我正在做一个网页抓取项目。我正在使用的一个网站的数据来自Javascript

有人建议我可以直接从Python调用Javascript,但我不确定如何实现这一点

例如:如果JavaScript函数定义为:
add_2(var,var2)


如何从Python中调用该JavaScript函数?

查找具有Python绑定的JavaScript解释器。(试试Rhino?V8?SeaMonkey?)。当您找到一个时,它应该附带如何从python使用它的示例


但是,Python本身不包括JavaScript解释器。

查找具有Python绑定的JavaScript解释器。(试试Rhino?V8?SeaMonkey?)。当您找到一个时,它应该附带如何从python使用它的示例


然而,Python本身并不包括JavaScript解释器。

要与Python中的JavaScript交互,我使用webkit,它是Chrome和Safari背后的浏览器渲染器。有。特别是有一个用于执行JavaScript的函数,称为


下面是完整的。

要与Python中的JavaScript交互,我使用webkit,它是Chrome和Safari背后的浏览器渲染器。有。特别是有一个用于执行JavaScript的函数,称为


下面是完整的说明。

您最终可以从页面获取JavaScript,并通过一些解释器(如v8或Rhino)执行它。然而,通过使用一些功能测试工具,例如或,您可以以更简单的方式获得良好的结果。这些解决方案启动浏览器并有效加载页面-速度可能较慢,但可确保预期的浏览器显示内容可用

例如,考虑下面的HTML文档:

<html>
    <head>
        <title>Test</title>
        <script type="text/javascript">
            function addContent(divId) {
                var div = document.getElementById(divId);
                div.innerHTML = '<em>My content!</em>';
            }
        </script>
    </head>
    <body>
        <p>The element below will receive content</p>
        <div id="mydiv" />
        <script type="text/javascript">addContent('mydiv')</script>
    </body>
</html>

结果将是打印在标准输出中的内容。

您最终可以从页面获取JavaScript,并通过一些解释器(如v8或Rhino)执行它。然而,通过使用一些功能测试工具,例如或,您可以以更简单的方式获得良好的结果。这些解决方案启动浏览器并有效加载页面-速度可能较慢,但可确保预期的浏览器显示内容可用

例如,考虑下面的HTML文档:

<html>
    <head>
        <title>Test</title>
        <script type="text/javascript">
            function addContent(divId) {
                var div = document.getElementById(divId);
                div.innerHTML = '<em>My content!</em>';
            }
        </script>
    </head>
    <body>
        <p>The element below will receive content</p>
        <div id="mydiv" />
        <script type="text/javascript">addContent('mydiv')</script>
    </body>
</html>

结果将是打印在标准输出中的内容。

我最近发现的一个有趣的替代方案是Python模块,它可用于与NodeJs进程(v8引擎)通信

用法与绑定非常相似,但您可以直接使用任何NodeJs库而无需修改,这是我的一个主要卖点

您的python代码如下所示:

val = js.call('add2', var1, var2)
甚至:

add2 = js.callable('add2')
val = add2(var1, var2)
不过调用函数肯定比pyv8慢,所以这在很大程度上取决于您的需要。如果你需要使用一个能做很多繁重工作的
npm
软件包,
bond
非常好。您甚至可以有更多的nodejs进程并行运行


但是,如果您只需要调用一组JS函数(例如,在浏览器/后端之间使用相同的验证函数),
pyv8
肯定会快得多。

我最近发现的一个有趣的替代方法是Python模块,它可以用于与NodeJs进程(v8引擎)通信

用法与绑定非常相似,但您可以直接使用任何NodeJs库而无需修改,这是我的一个主要卖点

您的python代码如下所示:

val = js.call('add2', var1, var2)
甚至:

add2 = js.callable('add2')
val = add2(var1, var2)
不过调用函数肯定比pyv8慢,所以这在很大程度上取决于您的需要。如果你需要使用一个能做很多繁重工作的
npm
软件包,
bond
非常好。您甚至可以有更多的nodejs进程并行运行


但是,如果您只需要调用一组JS函数(例如,在浏览器/后端之间使用相同的验证函数),
pyv8
肯定会快得多。

最近对不同的方法进行了全面的分析

PyQt4 node.js/zombie.js 幻影


Phantomjs是胜利者,非常简单,有很多例子。

最近对不同的方法进行了全面的分析

PyQt4 node.js/zombie.js 幻影


Phantomjs是胜利者,简单明了,有很多例子。

您可以通过Popen调用node


您可以通过Popen调用node


如果它是您知道的并且可以轻松模拟的东西,那么您自己解析和解释它可能是最容易的。如果不是,你可能最终需要绑定到一个JavaScript引擎。如果它是你知道的并且可以很容易地模拟的东西,那么自己解析和解释它可能是最容易的。如果没有,你可能最终需要绑定到一个JavaScript引擎中。你一定要看看哪个为谷歌的V8引擎提供了python包装器。包含有关将python与SpiderMonkey一起使用的信息。希望这能有所帮助。如果你想支持不止一个JavaScript引擎,你应该看看你一定要看看哪个为Google的V8引擎提供了python包装器。包含有关将python与SpiderMonkey一起使用的信息。希望这有帮助。如果你想支持多个JavaScript引擎,你应该看看Link break!到目前为止,我一直在使用这个解决方案,使用一个名为SpynerThank的模块,可以更轻松地与PyQT4进行交互。感谢您的提醒-修复了断开的链接!到目前为止,我一直在使用这个解决方案和一个名为SpynnerThank的模块,该模块可以简化与PyQT4的交互。感谢大家的提醒——fixed linkSelenium太重了,另一方面,我不知道splinter。习惯于spynner(在PyQT4+尸检的顶部)硒太重,另一方面我不知道splinter。用于spynner(位于PyQT4+autopy顶部),您可以通过添加代码片段来改进此答案,而不是回答问题