Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
机械化和Javascript_Javascript_Python_Browser_Mechanize - Fatal编程技术网

机械化和Javascript

机械化和Javascript,javascript,python,browser,mechanize,Javascript,Python,Browser,Mechanize,我想使用Mechanize来模拟使用活动JavaScript(包括DOM事件和AJAX)浏览网页,到目前为止,我还没有找到这样做的方法 我看了一些支持JavaScript的Python客户端浏览器,比如Spynner和Zope,但没有一个真正适合我。Spynner总是崩溃PyQt,Zope似乎不支持JavaScript 是否有一种方法可以模拟仅使用Python(无额外进程)的浏览,如WATIR或操纵Firefox或Internet Explorer的库,同时完全支持Javascript,就像实际

我想使用Mechanize来模拟使用活动JavaScript(包括DOM事件和AJAX)浏览网页,到目前为止,我还没有找到这样做的方法

我看了一些支持JavaScript的Python客户端浏览器,比如Spynner和Zope,但没有一个真正适合我。Spynner总是崩溃PyQt,Zope似乎不支持JavaScript

是否有一种方法可以模拟仅使用Python(无额外进程)的浏览,如WATIR或操纵Firefox或Internet Explorer的库,同时完全支持Javascript,就像实际浏览页面一样?

如果您在想要自动化的页面中遇到此问题,您有四个选项。它们大致按照简单的顺序排列

弄清楚JavaScript在做什么,并在Python代码中模拟它:例如,通过手动向CookieJar实例添加cookie,调用HTMLForms上的方法,调用urlopen,等等。请参见上面的表单

使用Java的HtmlUnit或Jython的HttpUnit,因为他们知道一些JavaScript

与其使用mechanize,不如自动化浏览器。例如,通过其COM自动化接口使用MS Internet Explorer,使用Python For Windows扩展,又名pywin32,又名win32all(例如simple function,pamie;O'Reilly book中的pywin32章节)或ctypes(示例)。对于缺少自动化API的情况,这种东西在Windows上也很有用。对于Firefox,有PyXPCOM

雄心勃勃地将工作自动委托给合适的解释器(例如,Mozilla的JavaScript解释器)。这就是HtmlUnit和httpunit所做的。几年前,我在这些方面做了一次尝试,但我认为(仍然)需要做很多工作才能做好


我已经玩过这个新的替代机械化(我喜欢)的游戏,叫做

它是一个完整的网络工具包浏览器,像Safari或Chrome,但无头且可编写脚本。您可以使用javascript编写脚本,而不是python(至少据我所知)


有一些示例脚本可以帮助您入门。这很像使用Firebug。我只花了几分钟的时间使用它,但我发现我从一开始就非常高效。

基本上,如果你想要处理javascript的东西,那么你需要一个真正的javascript引擎,这些总是涉及到自动化一个真正的浏览器(我在这篇文章中包括了无头浏览器)

Java的HtmlUnit做得并不好,因为它没有使用来自实际浏览器的javascript引擎。Phantom JS听起来很理想(正如newz2000所指出的),但是我发现,当使用javascript操作页面时,如果您实际上看不到正在处理的页面,那么调试脚本可能非常困难


这导致了诸如Selenium Webdriver这样的解决方案,它有一个完整的python API来自动化各种浏览器,但是您必须运行java jar,它实际上会启动浏览器,所以这不是您想要的纯python解决方案(但我认为这是您能得到的最接近的解决方案)。

一个如何使用PyV8的示例,要使用python在DOM上运行JS,可以在以下位置找到:


这应该很容易使它与mechanize一起运行。

您可以将Selenium与Python一起使用。然后,您可以刮取JavaScript生成的内容,以及使用其他JavaScript(以及Python)操纵页面

#在您的虚拟环境中:pip安装selenium
从selenium导入webdriver
#启动FirefoxGUI
browser=webdriver.Firefox()
#或者,您可以在没有GUI的情况下驱动PhantomJS
#安装Node.js时:`npm install-g phantomjs`
#browser=webdriver.PhantomJS()
#获取网页
browser.get('http://example.com')
#如果您需要整个HTML文档
#就像用控制台检查呈现的页面一样
html=browser.page\u源
#获取一个元素,即使它是用JS创建的
按钮=浏览器。通过css选择器查找元素('div.some-class>\
输入。提交按钮“)
#点击某物
按钮。单击()
#执行一些JavaScript(假设页面上加载了jQuery)
browser.execute_脚本($('html,body')。动画({scrollTop:500},50);)

您可以在Python REPL中运行代码,并使用autocomplete来发现
browser
或您选择的任何元素上可用的方法。或者执行类似于打印(dir(browser))的操作,查看可用的内容。

Zope测试浏览器(基于mechanize构建)从未声称支持JavaScript;你从哪里读到它可能?你能解释一下你试图解决的问题吗?可能你根本不需要启用JavaScript。告诉我们你想做什么,我们会告诉你我们是否可以帮助你!我试图用python来模拟浏览。我不能使用其他任何东西,因为我需要使用(目前)只能在python中使用的一些特定调整和挂钩。我甚至愿意付出努力,尝试在Mechanize和PyV8之间架起桥梁,但我不知道从哪里开始。。。以前有人做过类似的事情吗?选项1和选项3都是纯python。#1确实是python,这可能是接下来要做的,但我也对将来如何推广这个过程感兴趣#3真的在使用COM和IE…@Jeff为什么使用无头浏览器或浏览器自动机会有问题?很好的工具!到底为什么人们不加解释就投了反对票?这是因为1)当问题明确要求使用Python工具时,它是一个Javascript工具,2)通过Python的JS API操纵该工具最多只能算是一个骇人的PITA。+1我认为phnatomjs是一个不错的选择,JavaScript是WebJS的语言PhantomJS真的运行它加载的页面上的JavaScript吗?(与phantomjs脚本中的javascript不同)我想是的,但很难确定。是的,phantomjs运行页面就像普通web浏览器一样,尽管没有UI。我使用Selenium通过Python API自动运行Firefox。这辆车有点小,但它是通用的