2014-01-19 37 views
1

问题之间传送会话:Python的 - 两个浏览器

我已经写了一吨的代码(网上自动完成一些非常艰苦的任务),并且使用了机械化库Python来处理网络请求。它工作得很好,除了现在我遇到了一个页面,我需要javascript功能...机械化不处理javascript

建议的解决方案:

我使用PyQt编写这个程序的GUI,它来包装的QtWebKit,它不处理javascript。我想使用QtWebKit来评估我卡在页面上的javascript,最简单的方法是将网络会话从机械化转移到QtWebKit

我不想使用PhantomJSSeleniumQtWebKit来查看我的所有网络请求;我100%希望为此保持机械化。我想知道如何将我的登录会话从机械化转移到QtWebKit

这工作?

  • 转自机械化所有的cookie QtWebView
  • 传输的所有状态变量的值(如_VIEWSTATE等),从机械化到QWebView(页码是ASP.net页...)
  • 变化QWebView的用户代理标头与机械化相同...

我真的不知道如何让这两个“浏览器”看起来更像服务器... woul这项工作?谢谢!

回答

0

由于没有人回答,我会发布我的工作。

基本上,我想将我的会话从Mechanize(python模块)“转移”到QtWebKits QWebView(PyQt4模块),因为我的项目的绝大多数是自动化无头的,但是我遇到了一个路障,我没有但要让用户手动将数据输入到可能的结果页面中(因为每次取决于具体情况,表单都是不同的)。

我通过利用QWebViews javascript功能来满足这个要求,而不是转移会话,。我的方法是这样的:

  1. 加载页面的机械化和下载HTML保存到本地临时文件
  2. 在QWebView中加载本地文件
  3. 用户现在可以将所需的数据输入本页的本地副本
  4. 找到此页面上的表单字段,并使用javascript提取用户输入的数据。您可以通过获取页​​面的主框架对象(QWebView-> Page() - > MainFrame()),然后评估JavaScript代码以完成上述任务(使用evaluateJavaScript())来完成此操作。
  5. 获取您从表单字段中提取的数据,并使用它提交表单时您仍然使用机械化打开的连接。

就是这样!有点解决方法,但它的工作原理是:\