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



问题:

我已经编写了大量代码(在线自动执行一些非常费力的任务),并使用机械化库Python来处理网络请求。它运行良好,除了现在我遇到了一个我需要javascript功能的页面......机械化不处理javascript.

建议的解决方案:

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

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

这行得通吗?

  • 将所有饼干从机械化转移到QtWebView
  • 将所有状态变量(如_VIEWSTATE等)的值从 mechanize 传输到QWebView(该页面是一个ASP.net页面...
  • QWebView的用户代理标头更改为与机械化相同...

我真的不明白如何使两个"浏览器"看起来与服务器更相同......这行得通吗?谢谢!

由于没有人回答,我将发布我的解决方法。

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

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

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

就是这样!有点变通方法,但它确实有效:\

相关内容

最新更新