使用Python无浏览器访问LinkedIn

使用Python无浏览器访问LinkedIn,python,mechanize,linkedin,Python,Mechanize,Linkedin,我正在编写一个访问linkedin的命令行应用程序。我正在使用API 事情按照我的预期进行,但我对认证过程有很大的不满。目前,我需要: 启动我的应用程序并等待它打印身份验证URL 使用我的浏览器转到该URL 为应用程序祝福,并等待它将我重定向到URL 从URL中提取访问令牌 将该访问令牌输入到我的应用程序中 用linkedin做我需要做的事情 我不喜欢手动执行步骤2到步骤5,所以我想将它们自动化。我想做的是: 使用无头客户端访问上面步骤1中的URL 刮屏并自动给我祝福(可能需要输入用户名和密码

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

事情按照我的预期进行,但我对认证过程有很大的不满。目前,我需要:

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

    • 使用无头客户端访问上面步骤1中的URL
    • 刮屏并自动给我祝福(可能需要输入用户名和密码——我知道这些,所以没问题)
    • 等待重定向并获取重定向URL
    • 从URL中提取令牌
    • 利润
    提问时间:

    • 环顾四周,他试图做一些类似的事情,但被告知这是不可能的。为什么?
    • 然后,在Jython和HtmlUnit中。应该可以直接使用Python和mechanize,对吗
    • 最后,有没有人见过使用纯Python和mechanize(或任何其他无头浏览器替代方案)的解决方案?我不想重新发明轮子,但如果必要的话,我会把它编出来
    编辑

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

    使用令牌的代码:

    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 })
    

    我自己也没有试过,但我相信理论上这是可能的。这一想法已被描述。

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


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


    它是用PHP编写的,但基本上是这样做的。只要修改demo.php脚本,根据需要回显您的令牌。

    您是根据API对自己进行身份验证,然后提取数据,还是其他人?@Paul:我在对自己进行身份验证。您不能手动执行一次,然后在本地存储令牌(将其硬编码到python脚本中)?看起来并没有那么简单。每次实例化API(每次执行)时,它似乎都需要一个新的令牌。除非您在授权屏幕上另有指定,否则LinkedIn在授权给定应用程序时生成的用户访问令牌是永久的。您所需要做的就是使用应用程序生成授权屏幕,完成整个过程,并在成功后回显并存储您的用户访问令牌(令牌和密码)。一旦具备了这些功能,就可以将它们硬编码到文件、数据库等中,并在调用API时使用它们。它是用PHP编写的,但基本上就是这样。只需修改demo.php脚本以回显您的令牌。
    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 })