在python中获取执行的javascript内容[重复]

Posted

技术标签:

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

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

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

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

【问题讨论】:

见Python browser emulator with JS support。 也看看:***.com/questions/8049520/… ***.com/questions/5793414/mechanize-and-javascript 也是 啊!你的报价“但是,当你检查元素时,你会看到执行的代码。”检查元素如何执行js-你能解释一下吗?为什么不提一下你想用JS做什么? 【参考方案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 可以分为以下两组-

    浏览器没有图形用户界面(GUI)又名Headless browser:例如PhantomJS一个基于Webkit渲染引擎的无头浏览器,SlimerJS一个基于Gecko渲染引擎的无头浏览器更多见here。您可以通过selenium(python 和 PhantomJS 之间的粘合剂)与 PhantomJS 进行互操作,或者您可以使用 PyQt 并使用 python 来运行 JS,如 here。 浏览器带有图形用户界面(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,以避免“所以不是选择您最喜欢的工具推荐站点”的问题,因此只有通用解决方案是提及。所以,请稍微搜索一下;)

【讨论】:

以上是关于在python中获取执行的javascript内容[重复]的主要内容,如果未能解决你的问题,请参考以下文章

用于 javascript 生成内容的 Python 网页抓取

Python爬虫(二十四)_selenium案例:执行javascript脚本

怎么爬取网页的动态内容,很多都是js动态生

Googlebot何时执行javascript?

Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容

Win10系列:JavaScript获取文件和文件夹列表