当前位置: 首页 > 面试题库 >

从Python执行Javascript

笪欣嘉
2023-03-14
问题内容

我有使用xpath爬行的HTML网页。在etree.tostring某个节点的给我这个字符串:

<script>
<!--
function escramble_758(){
  var a,b,c
  a='+1 '
  b='84-'
  a+='425-'
  b+='7450'
  c='9'
  document.write(a+c+b)
}
escramble_758()
//-->
</script>

我只需要输出escramble_758()。我可以编写一个正则表达式来弄清楚整个事情,但是我希望我的代码保持整洁。最好的选择是什么?

我正在浏览以下库,但没有看到确切的解决方案。他们中的大多数人都试图模仿浏览器,从而使蜗牛的速度变慢。

  • http://code.google.com/p/python-spidermonkey/(清楚地说it's not yet possible to call a function defined in Javascript
  • http://code.google.com/p/webscraping/(看不到任何Java脚本,我可能是错的)
  • http://pypi.python.org/pypi/selenium(模拟浏览器)

编辑: 一个例子将是伟大的..(准系统将做)


问题答案:

使用PyV8,我可以做到这一点。但是,我必须替换为document.writereturn因为没有DOM,因此没有document

import PyV8
ctx = PyV8.JSContext()
ctx.enter()

js = """
function escramble_758(){
var a,b,c
a='+1 '
b='84-'
a+='425-'
b+='7450'
c='9'
document.write(a+c+b)
}
escramble_758()
"""

print ctx.eval(js.replace("document.write", "return "))

或者您可以创建一个模拟文档对象

class MockDocument(object):

    def __init__(self):
        self.value = ''

    def write(self, *args):
        self.value += ''.join(str(i) for i in args)


class Global(PyV8.JSClass):
    def __init__(self):
        self.document = MockDocument()

scope = Global()
ctx = PyV8.JSContext(scope)
ctx.enter()
ctx.eval(js)
print scope.document.value


 类似资料:
  • 问题内容: 假设您有这样的课程: 在python中,此类仅在分配值时才起作用: 所以基本上,我的问题是我是否可以从php发送变量以执行python类,并返回其输出(它是字符串)并继续执行我的php代码? 有什么建议? 解 在php中: 在python中: 问题答案: 首先,创建一个包含要执行的python脚本的文件,包括(或加载)类和 现在,使用以下行获取结果:

  • 问题内容: 我在树莓派上有一个带有2个按钮(打开和关闭)的PHP网页,“打开”按钮重定向到On.php,“关闭”按钮重定向到Off.php在“ / usr / lib / cgi-bin”中,我有一个python脚本我想执行(script.py),我可以通过在终端上键入以下内容来完美地执行它 如果我从终端执行此操作,它将起作用。 问题是我的“ / var / www”文件夹中的PHP文件(On.p

  • 您好,我正在尝试在apache2服务器上运行Raspberry Pi,使用PHP中的pyautogui库执行Python脚本。从命令行执行Python脚本时,我没有遇到任何问题,但通过PHP的“shell_exec”执行时,我收到以下错误消息: 错误登录apache2: 回溯(最近一次调用):文件“/home/pi/Projects/Python/wakeUp.py”,第2行,在导入pyautog

  • 问题内容: 我试图弄清楚如何引用python文件,以便可以在Java GUI Jar中执行它。它必须是一个可移植的解决方案,因此使用绝对路径对我不起作用。我在下面列出了我的项目结构,并包括了有关如何尝试执行python脚本的代码。感谢您提供的任何帮助! 问题答案: 使用开头的文件路径意味着您要从文件系统的根目录开始。 您的代码为我工作,只需删除该斜杠即可: 放置错误文件没有显示错误的原因是因为此J

  • 问题内容: 我能运行Linux命令状或从Java没有问题,但不能得到执行的Python脚本。 这是我的代码: 什么都没有发生。它到达了SEND,但之后就停止了… 我正在尝试执行需要root权限的脚本,因为它使用串行端口。另外,我还必须传递带有一些参数的字符串(数据包)。 问题答案: 您不能像在示例中那样在内部使用PIPE 。PIPE是shell的一部分。 你可以做 将命令放入shell脚本并使用或

  • 问题内容: 一年多以前,有人问这个问题:在python中执行用于在SQL Management Studio中运行的.sql文件 。 我正在用python编写脚本,该脚本连接到SQL Server,并根据SQL命令在大(数GB)的.sql文件中创建和填充数据库。 看起来SQLCMD需要下载并安装SQL Server Express。还有其他方法可以从python执行.sql文件,而不需要每个使用我