使用Python无需浏览器访问LinkedIn

时间:2011-11-21 14:45:45

标签: python mechanize linkedin

我正在编写一个访问linkedin的命令行应用程序。我正在使用python-linkedin API。

事情按照我的预期运作,但我对身份验证过程抱有很大的抱怨。目前,我需要:

  1. 启动我的应用程序并等待它打印身份验证URL
  2. 使用我的浏览器访问该网址
  3. 为应用程序提供祝福并等待它将我重定向到URL
  4. 从网址
  5. 中提取访问令牌
  6. 输入访问令牌到我的应用程序
  7. 做我需要做的事情
  8. 我不喜欢手动执行步骤2到5,所以我想自动化它们。我想做的是:

    • 使用像mechanize这样的无头客户端访问上面步骤1中的网址
    • 刮掉屏幕并自动给我祝福(可能需要输入用户名和密码 - 我知道这些,所以没关系)
    • 等待重定向并获取重定向网址
    • 从网址
    • 中提取令牌
    • PROFIT!

    提问时间:

    • 环顾四周,this guy right here on SO试图做类似的事情,但被告知这是不可能的。为什么?
    • 然后,在{Jython和HtmlUnit中this guy here does。应该可以使用直接的Python和机械化,对吗?
    • 最后,有没有人看到过直接Python和机械化(或任何其他无头浏览器替代方案)的解决方案?我不想重新发明轮子,但如有必要,我会对其进行编码。

    修改

    初始化令牌的代码(使用接受答案的方法):

    api = linkedin.LinkedIn(KEY, SECRET, RETURN_URL)
    result = api.request_token()
    if not result:
        print 'Initialization error:', api.get_error()
        return
    
    print 'Go to URL:', api.get_authorize_url()
    print 'Enter verifier: ',
    verifier = sys.stdin.readline().strip()
    if not result:
        print 'Initialization error:', api.get_error()
        return
    
    result = api.access_token(verifier=verifier)
    if not result:
        print 'Initialization error:', api.get_error()
        return
    
    fin = open('tokens.pickle', 'w')
    for t in (api._request_token, api._request_token_secret, 
            api._access_token, api._access_token_secret ):
        pickle.dump(t, fin)
    fin.close()
    
    print 'Initialization complete.'
    

    使用令牌的代码:

    api = linkedin.LinkedIn(KEY, SECRET, RETURN_URL)
    
    tokens = tokens_fname()
    try:
        fin = open(tokens)
        api._request_token = pickle.load(fin)
        api._request_token_secret = pickle.load(fin)
        api._access_token = pickle.load(fin)
        api._access_token_secret = pickle.load(fin)
    except IOError, ioe:
        print ioe
        print 'Please run `python init_tokens.py\' first'
        return
    
    profiles = api.get_search({ 'name' : name })
    

2 个答案:

答案 0 :(得分:2)

由于您计划仅授权自己一次,然后根据自己的信息调用API,我只需手动检索您的访问令牌,而不必担心自动化它。

当您授权给定的应用程序时,LinkedIn生成的用户访问令牌是永久性的,除非您在授权屏幕上另行指定。您需要做的就是使用您的应用程序生成授权屏幕,完成整个过程并在成功时回显并存储您的用户访问令牌(令牌和秘密)。一旦你有了,你就可以将它们硬编码到文件,数据库等中,并在调用API时使用它们。

它在PHP中,但this demo基本上就是这样。只需修改demo.php脚本,根据需要回显您的令牌。

答案 1 :(得分:1)

我自己没有尝试过,但我相信理论上应该可以使用Selenium WebDriverPyVirtualDisplay。这个想法被描述为here