跳转到主要内容

一个用于查找登录链接、表单以及使用有效凭据自动登录网站的实用工具。

项目描述

PyPI Version Build Status Code Coverage

Autologin是一个库,使网络爬虫更容易爬取需要登录的网站。提供凭据和URL或页面HTML源(通常是主页),它将尝试为您登录。返回Cookies供您的爬虫使用。

Autologin的目标是使网络爬虫更容易爬取需要身份验证的网站,而无需为每个网站重写登录代码。

Autologin可以作为库、命令行工具或服务使用。您可以使用Autologin而无需生成HTTP请求,因此可以直接将其放入您的爬虫中,无需担心影响速率限制。

如果您使用Scrapy进行爬取,请查看autologin-middleware,这是一个Scrapy中间件,它使用Autologin HTTP-api来维护Scrapy爬虫的登录状态。

Autologin适用于Python 2.7和3.3+。

功能

  • 自动查找登录表单和字段

  • 获取已认证的cookies

  • 获取从您的蜘蛛提交的表单请求

  • 提取登录页面的链接

  • 作为库使用,无需或无需发送http请求

  • 命令行客户端

  • 网络服务

  • 管理登录凭证的UI

  • 验证码支持

快速入门

不喜欢阅读文档吗?

from autologin import AutoLogin

url = 'https://reddit.com'
username = 'foo'
password = 'bar'
al = AutoLogin()
cookies = al.auth_cookies_from_url(url, username, password)

您现在有一个cookiejar,您可以在您的蜘蛛中使用它。不想使用cookiejar?

cookies.__dict__

您现在有一个字典。

安装

从PyPI安装最新版本

$ pip install -U autologin

或从GitHub获取最新更改的版本

$ pip install git+https://github.com/TeamHG-Memex/autologin.git

自动登录依赖于Formasaurus进行字段和表单分类,它有很多依赖项。这些包可能需要额外步骤安装,因此上述命令可能会失败。在这种情况下,手动逐个安装依赖项(遵循它们的安装说明)。

建议使用最新的

pip(使用pip install pip -U更新))。在Ubuntu上,需要以下包

$ apt-get install build-essential libssl-dev libffi-dev \
                  libxml2-dev libxslt1-dev \
                  python-dev  # or python3-dev for python 3

从URL获取身份验证cookies

此方法向URL发出http请求,提取登录表单(如果有的话),填写字段并提交表单。然后返回它收集到的任何cookies

cookies = al.auth_cookies_from_url(url, username, password)

注意,它返回所有cookies,它们可能是会话cookies而不是已认证cookies。

此调用是阻塞的,并使用Crochet在单独的线程中运行Twisted反应器和Scrapy蜘蛛。如果您有Scrapy蜘蛛(或以某种方式使用Twisted),请使用HTTP API或非阻塞API(它未进行文档化,请参阅http_api.AutologinAPI._login)。

AutoLogin.auth_cookies_from_url也有可选参数

  • settings是一个字典,包含Scrapy设置以覆盖。要传递的有用设置包括

    • HTTP_PROXYHTTPS_PROXY设置用于所有请求的代理。

    • SPLASH_URL如果设置,Splash将用于发送所有请求。如果您要使用的爬虫也使用Splash并且会话绑定到IP和User-Agent,或用于Tor站点,请使用它。

    • USER_AGENT覆盖默认User-Agent。

  • extra_js(实验性)是一个字符串,包含应在登录页面在发送POST请求之前执行的额外JS脚本。例如,它可以用于接受cookie使用。仅在SPLASH_URL也在settings中给出时才支持。

此选项的示例

cookies = al.auth_cookies_from_url(
    url, username, password,
    extra_js='document.getElementById("accept-cookies").click();',
    settings={
        'SPLASH_URL': 'http://127.0.0.1:8050',
        'USER_AGENT': 'Mozilla/2.02 [fr] (WinNT; I)',
    })

登录请求

此方法提取登录表单(如果有的话),填写字段并返回一个字典,包含表单URL和arg,供您的蜘蛛提交。不发送http请求

>>> al.login_request(html_source, username, password, base_url=None)
{'body': 'login=admin&password=secret',
 'headers': {b'Content-Type': b'application/x-www-form-urlencoded'},
 'method': 'POST',
 'url': '/login'}

相对表单操作将相对于

base_url

命令行

$ autologin
usage: autologin [-h] [--splash-url SPLASH_URL] [--http-proxy HTTP_PROXY]
                 [--https-proxy HTTPS_PROXY] [--extra-js EXTRA_JS]
                 [--show-in-browser]
                 username password url

HTTP API

您可以使用以下方式启动自动登录HTTP API

$ autologin-http-api

并使用

/login-cookies端点。使用JSON体发送POST请求。支持以下参数

  • url(必需):我们想要登录的网站的URL

  • username(可选):如果没有提供,它将从中获取登录密钥链

  • password(可选):如果没有提供,它将从中获取登录密钥链

  • extra_js(可选,实验性)是一个字符串,包含一个额外的JS脚本,应在登录页面发起POST请求之前执行。例如,它可以用于接受cookie使用。只有当在settings中也提供了SPLASH_URL时,才支持此功能。

  • settings(可选) - 一个字典,用于覆盖Scrapy设置,有用的值在上文已描述。

如果未提供usernamepassword,autologin将尝试在登录密钥链中找到它们。如果没有找到匹配的凭据(它们通过域匹配,而不是通过精确的URL匹配),则最终需要人工在密钥链UI中提供它们,或将域标记为“跳过”。

响应是包含以下字段的JSON

  • status,它可以取以下值

    • error状态表示发生了错误,error字段包含更多信息

    • skipped表示在密钥链UI中将域标记为“跳过”

    • pending表示密钥链UI中有一个项目(或它刚刚创建),尚未输入凭据

    • solved表示登录成功并获取了cookies

  • error - 错误的易读解释。

  • response - autologin收到的最后一个响应(在某些情况下可能是None)。这是一个包含cookiesheaders的字典,以及一个textbody_b64字段(取决于响应的内容类型)。

  • cookies - 以Cookie.__dict__格式表示的字典列表。仅在状态为solved时存在。

  • start_url - 成功登录后到达的URL。

代理支持

可以通过settings参数中的HTTP_PROXYHTTPS_PROOXY键指定代理。用户名和密码可以作为代理URL的一部分指定(格式为protocol://username:password@url)。

如果您使用的是与Splash的代理,则假定您希望Splash通过给定的代理发起请求,而不是通过代理向Splash发起请求。HTTP_PROXY始终用于Splash。

验证码支持

存在实验性的验证码支持:如果登录表单包含验证码,我们将尝试使用外部服务(DeathByCaptcha)解决它,并将其作为登录请求的一部分提交。这不会以任何方式影响API,您只需要提供包含您的DeathByCaptcha账户详情的环境变量:DEATHBYCAPTCHA_USERNAMEDEATHBYCAPTCHA_PASSWORD。这适用于所有API:autologin-http-apiautologin和Python API。

您还需要安装decaptcha

pip install git+https://github.com/TeamHG-Memex/decaptcha.git

支持仍然是实验性的,不支持新的Google ReCaptcha/NoCaptcha。此外,它目前仅与splash(当在settings中传递SPLASH_URL时)一起使用。

密钥链UI

使用以下命令启动密钥链UI

$ autologin-server

请注意,autologin-serverautologin-http-api都没有任何认证保护。

密钥链UI将凭证存储在sqlite数据库中。默认情况下,它位于库本身附近,这并不总是好的,尤其是如果您想要在更新之间持久化数据或没有对该文件夹的写权限。您可以通过创建一个 /etc/autologin.cfg~/.autologin.cfg 文件来配置数据库位置和flask应用使用的 secret_key(应在运行自动登录服务的同一用户下)。以下是一个示例配置,它更改默认的secret_key并指定不同的数据库路径(这两项都是可选的)。

[autologin]
secret_key = 8a0b923820dcc509a6f75849b
db = /var/autologin/db.sqlite

贡献者

源代码和错误跟踪器在github上: https://github.com/TeamHG-Memex/autologin

使用 tox 运行测试

$ tox

此处未直接测试Splash支持,但在autologin-middleware 测试套件中有针对它的间接测试。

许可

许可证是MIT。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

autologin-0.1.4.tar.gz (291.7 kB 查看哈希值

上传时间 源代码

支持