首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用javascript md5散列函数实现python机械化登录网页

用javascript md5散列函数实现python机械化登录网页
EN

Stack Overflow用户
提问于 2010-11-23 04:41:57
回答 3查看 2.7K关注 0票数 4

我正在尝试使用python / mechanize登录到这个网页:http://www.solaradata.com/cgi-bin/mainProgram.cgi

登录表单使用Javascript函数,该函数在提交结果进行身份验证之前从多个字段值生成MD5散列。由于mechanize不能执行javascript,所以我尝试在python中复制相同的功能,然后提交结果值。但是,我仍然收到“无效的用户/密码”错误。

这是我目前的代码,谁能告诉我哪里出错了?谢谢!

代码语言:javascript
复制
url_login = 'http://www.solaradata.com/cgi-bin/mainProgram.cgi'

import mechanize
import md5

username  = 'superfly'  #not my real user/pass
password  = 'stickyguy' #not my real user/pass

br = mechanize.Browser()
br.open(url_login)
br.select_form(nr=0)
br.set_all_readonly(False)

session        = br['session']
br['user']     = username
br['password'] = password

m1 = md5.new()
m1.update(password + username)
br['password'] = m1.digest()

m2 = md5.new()
m2.update(password + session)
br['hash'] = m2.digest()

for form in br.forms():
  #print form

  request2 = form.click()  # mechanize.Request object
  try:
      response2 = mechanize.urlopen(request2)
  except mechanize.HTTPError, response2:
      pass

  print response2.geturl()
  # headers
  for name, value in response2.info().items():
      if name != "date":
          print "%s: %s" % (name.title(), value)
  print response2.read()  # body
  response2.close()
EN

回答 3

Stack Overflow用户

发布于 2010-11-23 04:57:20

使用m1.hedigest()代替m1.digest()

票数 1
EN

Stack Overflow用户

发布于 2010-11-23 04:47:37

我对python并不熟悉,但在javascript版本的算法中,他们似乎是在返回MD5散列的十六进制值。python MD5也做同样的事情吗?

您应该能够在不经过提交过程和测试成功的情况下对其进行测试。相反,使用JavaScript开发人员工具,如Firebug或Chrome开发人员工具,计算您在页面中获得的结果。然后,使用相同的输入,看看您从程序中获得了什么。它们应该匹配,一个字符一个字符。

票数 0
EN

Stack Overflow用户

发布于 2010-11-23 08:16:17

但如果您确实需要通过脚本访问大量javascript站点,您可以查看selenium-rc或源代码实验室。

这些工具允许您像编写用户脚本一样编写实际浏览器的脚本。

Selenium

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4250061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档