Python - 在两个浏览器之间传输会话

时间:2014-01-19 18:57:01

标签: javascript python asp.net pyqt qtwebkit

问题:

我编写了大量代码(在线自动完成一些相当费力的任务),并使用Python的机械化库来处理网络请求。它工作得很好,除了现在我遇到了一个我强烈需要 javascript功能的页面......机械化无法处理javascript

建议的解决方案:

我正在使用PyQt为这个应用编写GUI,它与QtWebKit一起打包,它处理javascript。我想使用QtWebKit来评估我坚持使用的页面上的javascript,最简单的方法是将我的网络会话从机械化转移到QtWebKit

我不想对我的整个网络请求使用PhantomJSSeleniumQtWebKit;我100%想为此目的保持机械化。我想知道如何将登录的会话从机械化转移到QtWebKit

这会有效吗?

  • 将所有Cookie从机械化转移到QtWebView
  • 将所有状态变量(如_VIEWSTATE等)的值从机械化转移到QWebView(页面为ASP.net页面...)
  • QWebView的User-Agent标题更改为与机械化相同...

我真的不知道如何让两个“浏览器”看起来与服务器更加相同......这会起作用吗?谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

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

  1. 在Mechanize中加载页面,将下载的HTML保存到本地临时文件
  2. 在QWebView中加载此本地文件
  3. 用户现在可以将所需数据输入到此页面的本地副本
  4. 在此页面上找到表单字段,然后使用javascript 提取用户输入的数据。你可以通过获取页​​面的主框架对象( QWebView-> Page() - > MainFrame()),然后评估javascript代码来完成上述任务(使用 evaluateJavaScript())。
  5. 从表单字段中获取您提取的数据,并使用它来提交表单,其中包含您仍然使用机械化打开的连接。
  6. 就是这样!一些解决方法,但它的工作原理:\