【问题标题】:get the executed javascript content in python [duplicate]在python中获取执行的javascript内容[重复]
【发布时间】:2015-12-26 08:46:02
【问题描述】:

有没有办法从网页中获取执行的 javascript 内容? 我已经尝试过请求 + BeautifulSoup,机械化,这些为我提供了网页的“源代码”,而不是执行的 javascript。 比如这个网站:-http://listen.tidal.com/login

如您所见,在源代码中,有未执行的 JS,但是,当您检查元素时,您会看到执行的代码。

现在,有什么方法可以让我在 python 中获取执行的代码? 请提示,因为我尝试使用 mechanize 模拟浏览器,它的作用与请求相同。 谢谢你

【问题讨论】:

标签: javascript python-2.7 browser request


【解决方案1】:

只是为了强调 - Python 不会执行您的 Js 代码,但运行时会执行。 这是一个 python 模块的示例,它为您选择可用的运行时并评估代码。

Look at PyExecJS,这里你可以找到一些例子,但考虑到它可能不包含任何浏览器API,如DOM、Html5 Api等。它主要基于js引擎的能力。

另一个大问题,在 python 中评估代码的原因是什么?

【讨论】:

    【解决方案2】:

    事实上,JavaScript engine 是执行 javascript 所必需的。 Python 是一种具有自己的解释器(编译器!)来执行 Python 代码的语言。这是两种不同的技术。因此,如果您想从 python 执行 javascript,python 必须具有与执行 javascript 的引擎交互的 api 或某种绑定。幸运的是,python 与几个 JS 引擎具有交互性,用于实现 Web 相关工作(测试等)。这个可互操作的 JS 可以分为以下两组-

    1. 浏览器没有图形用户界面(GUI)又名Headless browser:例如PhantomJS一个基于Webkit渲染引擎的无头浏览器,SlimerJS一个基于Gecko渲染引擎的无头浏览器更多见here。您可以通过selenium(python 和 PhantomJS 之间的粘合剂)与 PhantomJS 进行互操作,或者您可以使用 PyQt 并使用 python 来运行 JS,如 here
    2. 浏览器带有图形用户界面(GUI):例如Firefox、Chromium、Safari等。这种情况下也可以通过seleniumpython执行JS。

    selenium python中JS的简单执行示例如下-

    from selenium import webdriver
    #define driver- firefox, chrome  or phantomjs etc.
    driver = webdriver.Firefox()
    #Open the url
    driver.get('https://www.google.com')
    #see how javascript simple alert is being executed
    driver.execute_script("alert('hello world');")
    #close the driver  i.e. closing opened Firefox instance!
    driver.close()
    

    【讨论】:

    • 这样每次都会自动运行 Firefox。如何解决这个问题?
    【解决方案3】:

    是的,您必须选择支持 Javascript 内容的工具,而不是机制。 Mechanics 仅适用于您已经观察到的静态内容。有几个,通过搜索词“python 替代机制”找到。如果我必须选择一个,我会测试 PhantomJS。

    在 cmets 链接的其他答案中还发现了其他几个,只是我想将这些保留为 cmets,以避免“所以不是选择您最喜欢的工具推荐站点”的问题,因此只有通用解决方案是提及。所以,请稍微搜索一下;)

    【讨论】:

      猜你喜欢
      • 2015-08-23
      • 2013-10-09
      • 1970-01-01
      • 2015-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-11
      • 2021-01-22
      相关资源
      最近更新 更多