使用mechanize Python登录Dropbox

使用mechanize Python登录Dropbox,python,dropbox,mechanize,Python,Dropbox,Mechanize,我正在尝试通过Python上的mechanize登录Dropbox(Dropbox.com/login)。 我想我遗漏了一些东西,因为响应返回HTTP禁止403错误 这是我使用的代码: import mechanize url = "https://www.dropbox.com/login" email = "<USERNAME>" password = "<PASSWORD>" br = mechanize.Browser() br.set_handle_equ

我正在尝试通过Python上的mechanize登录Dropbox(Dropbox.com/login)。 我想我遗漏了一些东西,因为响应返回HTTP禁止403错误

这是我使用的代码:

import mechanize


url = "https://www.dropbox.com/login"
email = "<USERNAME>"
password = "<PASSWORD>"

br = mechanize.Browser()
br.set_handle_equiv(False)
br.set_handle_gzip(False)
br.set_handle_redirect(False)
br.set_handle_referer(False)
br.set_handle_robots(False)

br.addheaders = [('Host', 'www.dropbox.com')]
br.addheaders = [('Connection', 'keep-alive')]
#br.addheaders = [('Content-Length', '7385')]
br.addheaders = [('Upgrade-Insecure-Requests', 1)]
br.addheaders = [('Origin', 'https://www.dropbox.com')]
br.addheaders = [('X-Requested-With', 'XMLHttpRequest')]
br.addheaders = [('User-agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) 
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36')]
br.addheaders = [('Accept','text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8')]
br.addheaders = [('Content-Type', 'application/x-www-form-urlencoded; 
charset=UTF-8')]
br.addheaders = [('Referer', 'https://www.dropbox.com/login? 
cont=https%3A%2F%2Fwww.dropbox.com')]
br.addheaders = [('Accept-Encoding', 'gzip, deflate, br')]
br.addheaders = [('Accept-Language', 'en-US,en;q=0.9')]
br.addheaders = [('Cookie', '<COOKIE DATA>')]

response = br.open(url)
try:
    formcount=0
    for frm in br.forms():  
      if str(frm.attrs["class"])=="clearfix credentials-form login-form":
        break
      formcount=formcount+1
    br.select_form(nr=formcount)
    br.form.set_all_readonly(False)
except:
    print("Unable to find login form.");
    exit(1);


br.form['login_email'] = email
br.form['login_password'] = password

response = br.submit(nr = formcount)
print response.text
导入机械化
url=”https://www.dropbox.com/login"
email=“”
password=“”
br=mechanize.Browser()
br.set_handle_equiv(False)
br.set_handle_gzip(False)
br.设置\u句柄\u重定向(False)
br.set\u handle\u referer(False)
br.设置手柄机器人(错误)
br.addheaders=[('Host','www.dropbox.com')]
br.addheaders=[(“连接”,“保持活动”)]
#br.addheaders=[('Content-Length','7385')]
br.addheaders=[('Upgrade-unsecure-Requests',1)]
br.addheaders=[('Origin','https://www.dropbox.com')]
br.addheaders=[('X-request-With','XMLHttpRequest')]
br.addheaders=[('User-agent','Mozilla/5.0(Windows NT 10.0;Win64;x64)
AppleWebKit/537.36(KHTML,比如Gecko)Chrome/65.0.3325.181 Safari/537.36']
br.addheaders=[('Accept','text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8')]
br.addheaders=[('Content-Type','application/x-www-form-urlencoded;
字符集=UTF-8']
br.addheaders=[('Referer','https://www.dropbox.com/login? 
cont=https%3A%2F%2Fwww.dropbox.com')]
br.addheaders=[('Accept-Encoding','gzip,deflate,br')]
br.addheaders=[('Accept-Language','en-US,en;q=0.9')]
br.addheaders=[('Cookie','')]
响应=br.打开(url)
尝试:
formcount=0
对于br.forms()中的frm:
如果str(frm.attrs[“class”])=“clearfix凭证表单登录表单”:
打破
formcount=formcount+1
br.选择表格(nr=表格计数)
br.form.set\u all\u readonly(False)
除:
打印(“找不到登录表单”);
出口(1);
br.表单['login_email']=电子邮件
br.表单['login\u password']=密码
响应=br.提交(nr=表单计数)
打印response.text
以下是回应:

Traceback (most recent call last):
  File "login.py", line 51, in <module>
    response = br.submit(nr = formcount)
  File "C:\Python27\lib\site-packages\mechanize\_mechanize.py", line 685, in 
submit
    return self.open(self.click(*args, **kwds))
  File "C:\Python27\lib\site-packages\mechanize\_mechanize.py", line 254, in 
open
    return self._mech_open(url_or_request, data, timeout=timeout)
  File "C:\Python27\lib\site-packages\mechanize\_mechanize.py", line 310, in 
_mech_open
    raise response
mechanize._response.httperror_seek_wrapper: HTTP Error 403: Forbidden
回溯(最近一次呼叫最后一次):
文件“login.py”,第51行,在
响应=br.提交(nr=表单计数)
文件“C:\Python27\lib\site packages\mechanize\\u mechanize.py”,第685行,在
提交
返回self.open(self.click(*args,**kwds))
文件“C:\Python27\lib\site packages\mechanize\\u mechanize.py”,第254行,在
打开
返回self.\u mech\u open(url\u或\u请求、数据、超时=超时)
文件“C:\Python27\lib\site packages\mechanize\\u mechanize.py”,第310行,在
_机械断路器
提出回应
mechanize.\u response.httperror\u seek\u包装器:HTTP错误403:禁止
我知道我遗漏了什么,但我不知道是什么。 *我会注意到,我从浏览器中截获的请求复制了标题。 我知道Dropbox API有一个SDK,但我需要清理一下网站

提前感谢,,
Amit.

编写脚本/删除Dropbox网站违反了法律。无论如何,我不建议这样做,因为它可能会在未经通知的情况下更改,因此您的代码可能会中断

尽管如此,它有望提供您想要的任何功能,以及。我建议用它来代替


如果API不能提供您所需的功能,请告知我们,我们会将其记录为功能请求。

我怀疑“禁止”的意思正是它所说的。DropBox提供了一个API,我想这是为了迫使您使用该API。我可以理解,但。。我的意思是,一定有办法绕过它,我猜它的标题和隐藏字段是相关的。由于隐藏字段在我的代码中保持不变,并且我复制了所有的标题,我现在开始意识到这可能与通过AJAX发布表单有关,这是mechanize无法处理的。。bummerI完全理解您来自哪里,如果有合适的API选项,我会尝试解析HTML页面。当我试图通过APi访问帐户信息时,我不得不求助于解析普通HTML..:\@doria90您具体需要哪些帐户信息?返回的对象是否不提供它?