【问题标题】:Getting FB Token Python获取 FB 令牌 Python
【发布时间】:2019-12-30 22:02:57
【问题描述】:

我正在尝试将 FB 令牌发送给 Tinder,但在提交 CONFIRM 表单后我遇到了一些错误。我试图通过异常,但仍然失败。

import re
import robobrowser
import sys
import  random
import time

MOBILE_USER_AGENT = 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Mobile/15D60 AKiOSSDK/4.29.0'

FB_AUTH = 'https://www.facebook.com/v2.6/dialog/oauth?redirect_uri=fb464891386855067%3A%2F%2Fauthorize%2F&scope=user_birthday%2Cuser_photos%2Cuser_education_history%2Cemail%2Cuser_relationship_details%2Cuser_friends%2Cuser_work_history%2Cuser_likes&response_type=token%2Csigned_request&client_id=464891386855067&ret=login&fallback_redirect_uri=221e1158-f2e9-1452-1a05-8983f99f7d6e&ext=1556057433&hash=Aea6jWwMP_tDMQ9y'

def get_access_token(email, password):
    s = robobrowser.RoboBrowser(user_agent=MOBILE_USER_AGENT, parser="lxml")
    s.open(FB_AUTH)
    ## submit login form
    f = s.get_form()
    f["pass"] = password
    f["email"] = email
    s.submit_form(f)

    ## click the 'ok' button on the dialog informing you that you have already authenticated with the Tinder app
    f = s.get_form()
    time.sleep(random.random()*1.5)
    s.submit_form(f, submit=f.submit_fields['__CONFIRM__'])

    ## get access token from the http response
    access_token = re.search(r"access_token=([\w\d]+)", s.response.content.decode()).groups()[0]
    return access_token



email = sys.argv[1]
password = sys.argv[2]
access_token = get_access_token(email, password)

print(access_token)
----------------------------------------------------------------------------

输出:

Traceback (most recent call last):
  File "TokenRefresh.py", line 33, in <module>
    access_token = get_access_token(email, password)
  File "TokenRefresh.py", line 23, in get_access_token
    s.submit_form(f, submit=f.submit_fields['__CONFIRM__'])
  File "C:\Users\silva\AppData\Local\Programs\Python\Python36\lib\site-packages\robobrowser\browser.py", line 343, in submit_form
    response = self.session.request(method, url, **send_args)
  File "C:\Users\silva\AppData\Local\Programs\Python\Python36\lib\site-packages\requests\sessions.py", line 533, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\Users\silva\AppData\Local\Programs\Python\Python36\lib\site-packages\requests\sessions.py", line 668, in send
    history = [resp for resp in gen] if allow_redirects else []
  File "C:\Users\silva\AppData\Local\Programs\Python\Python36\lib\site-packages\requests\sessions.py", line 668, in <listcomp>
    history = [resp for resp in gen] if allow_redirects else []
  File "C:\Users\silva\AppData\Local\Programs\Python\Python36\lib\site-packages\requests\sessions.py", line 247, in resolve_redirects
    **adapter_kwargs
  File "C:\Users\silva\AppData\Local\Programs\Python\Python36\lib\site-packages\requests\sessions.py", line 640, in send
    adapter = self.get_adapter(url=request.url)
  File "C:\Users\silva\AppData\Local\Programs\Python\Python36\lib\site-packages\requests\sessions.py", line 731, in get_adapter
    raise InvalidSchema("No connection adapters were found for '%s'" % url)
requests.exceptions.InvalidSchema: No connection adapters were found for... '

我可以得到响应,但是代码仍然无法返回 access_token。

【问题讨论】:

    标签: python python-3.x robobrowser


    【解决方案1】:

    这个res = browser.submit_form(form, submit='__CONFIRM__')怎么样

    【讨论】:

    • 提交需要一个名字。 if submit not in submit_fields.getlist(submit.name): AttributeError: 'str' object has no attribute 'name'
    【解决方案2】:

    经过更多研究,我找到了解决方案。

    import re
    import robobrowser
    import sys
    import  random
    import time
    
    MOBILE_USER_AGENT = "Tinder/7.5.3 (iPhone; iOS 10.3.2; Scale/2.00)"
    
    FB_AUTH = 'https://www.facebook.com/v2.6/dialog/oauth?redirect_uri=fb464891386855067%3A%2F%2Fauthorize%2F&scope=user_birthday%2Cuser_photos%2Cuser_education_history%2Cemail%2Cuser_relationship_details%2Cuser_friends%2Cuser_work_history%2Cuser_likes&response_type=token%2Csigned_request&client_id=464891386855067&ret=login&fallback_redirect_uri=221e1158-f2e9-1452-1a05-8983f99f7d6e&ext=1556057433&hash=Aea6jWwMP_tDMQ9y'
    
    def get_access_token(email, password):
        s = robobrowser.RoboBrowser(user_agent=MOBILE_USER_AGENT, parser="lxml")
        s.open(FB_AUTH)
        ## submit login form
        f = s.get_form()
        f["pass"] = password
        f["email"] = email
        s.submit_form(f)
    
        ## click the 'ok' button on the dialog informing you that you have already authenticated with the Tinder app
        f = s.get_form()
        try:
            s.submit_form(f, submit=f.submit_fields['__CONFIRM__'])
            #print(s.response.content.decode())
            access_token = re.search(
                r"access_token=([\w\d]+)", s.response.content.decode()).groups()[0]
        except requests.exceptions.InvalidSchema as browserAddress:
            #print(type(browserAddress))
            #print(str(browserAddress))
            access_token = re.search(
                 r"access_token=([\w\d]+)", str(browserAddress)).groups()[0]
            return(access_token)
    
    
    
    email = sys.argv[1]
    password = sys.argv[2]
    access_token = get_access_token(email, password)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-23
      • 2014-08-04
      • 2020-04-27
      相关资源
      最近更新 更多