【问题标题】:Get mechanize and twill talking让机械化和斜纹布说话
【发布时间】:2017-08-30 22:15:05
【问题描述】:

我正在为我的雇主编写一个脚本,以从他们自己的网站获取某些数据。出于一长串原因,我需要从网站上获取显示的数据。我发现,其中一些数据是通过 js 调用检索到的……

回想起来,我应该选择 mechanize,但我选择了 twill(我认为我可以使用 mechanize,因为 twill 将自己描述为 mechanize 的薄包装)该项目距离完成只有一个电话后,并且我非常不想为机械化重写所有基于斜纹的代码。

我需要提交未附加到表单的发布请求。所以我需要机械化(或类似的库)。根据斜纹布的文档,应该有一个机械化浏览器对象可以通过以下代码检索:

#after logging in and successfully loading pages
b = get_browser()
mb = b._browser

我得到: AttributeError: 'TwillBrowser' object has no attribute '_browser'

看源码好像twill的浏览器不再使用mechanize的浏览器了?

所以我的问题是:

  1. 斜纹内部是否还有机械化浏览器。
  2. 如果有,我该如何获得?
  3. 如果没有,我如何从斜纹布获取 cookie 以进行机械化,以便我可以使用这些 cookie 发出请求?

理想情况下我会这样:

cjar = 'cookies.yaml'
save_cookies(cjar)
mb.open(url, data=data, cookies=cjar)

但我知道我需要更多的魔法,而不仅仅是添加 cookies=filename :)

【问题讨论】:

  • 也 - 无论如何,机械化对 ajax 调用没有帮助,因为 ajax 调用似乎使用 json。 :(

标签: python cookies mechanize twill


【解决方案1】:
  1. 斜纹内部是否还有机械化浏览器。
  2. 如果是这样,我如何获得它?

没有。它不再内置在斜纹布中。虽然 pip 安装 twill 仍然包含 mechanize 到 twill 的文件中,但 twill 的代码从不导入这些模块。

  1. 如果没有,我如何从斜纹布获取 cookie 以进行机械化,以便我可以使用这些 cookie 发出请求?

根据我的阅读,似乎没有一种简单或微不足道的方法可以做到这一点。 您可以从斜纹中保存_cookies(但您不能自定义它们的保存方式。)。 Mechanize 需要帮助才能读取 cookie 文件,并且在加载它们时需要忽略持久性等。Mechanize 确实让您能够执行此操作,但我还没有找到任何可用的代码。
就我而言,编写一个可以让我同时使用斜纹和机械化的方法更容易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多