使用 urllib2 登录网站 - Python 2.7

2023-12-11

好的,我将其用于 reddit 机器人,但我希望能够弄清楚如何登录任何网站。 如果这有道理的话......

我意识到不同的网站使用不同的登录表单等。那么我如何找出如何针对每个网站进行优化呢?我假设我需要在 html 文件中查找某些内容,但不知道是什么。

我不想使用 Mechanize 或任何其他库(这是这里所有其他答案的内容,实际上并不能帮助我了解正在发生的事情),因为我想自己了解它到底是如何工作的。

urllib2 文档确实对我没有帮助。

Thanks.


我会先说我已经有一段时间没有以这种方式登录了,所以我可能会错过一些更“被接受”的方法。

我不确定这是否是你想要的,但没有像这样的图书馆mechanize或更强大的框架,例如selenium,在基本情况下,您只需查看表格本身并找出inputs。例如,查看www.reddit.com,然后查看渲染页面的源码,你会发现这样的形式:

<form method="post" action="https://ssl.reddit.com/post/login" id="login_login-main"
  class="login-form login-form-side">
    <input type="hidden" name="op" value="login-main" />
    <input name="user" placeholder="username" type="text" maxlength="20" tabindex="1" />
    <input name="passwd" placeholder="password" type="password" tabindex="1" />

    <div class="status"></div>

    <div id="remember-me">
      <input type="checkbox" name="rem" id="rem-login-main" tabindex="1" />
      <label for="rem-login-main">remember me</label>
      <a class="recover-password" href="/password">reset password</a>
    </div>

    <div class="submit">
      <button class="btn" type="submit" tabindex="1">login</button>
    </div>

    <div class="clear"></div>
</form>

这里我们看到几个input's - op, user, passwd and rem。另外,请注意action参数 - 这是表单将发布到的 URL,因此将是我们的目标。所以现在最后一步是将参数打包到有效负载中并将其作为POST请求给action网址。同样在下面,我们创建了一个新的opener,添加处理 cookie 并添加标头的功能,为我们提供了一个稍微更强大的开启器来执行请求):

import cookielib
import urllib
import urllib2


# Store the cookies and create an opener that will hold them
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))

# Add our headers
opener.addheaders = [('User-agent', 'RedditTesting')]

# Install our opener (note that this changes the global opener to the one
# we just made, but you can also just call opener.open() if you want)
urllib2.install_opener(opener)

# The action/ target from the form
authentication_url = 'https://ssl.reddit.com/post/login'

# Input parameters we are going to send
payload = {
  'op': 'login-main',
  'user': '<username>',
  'passwd': '<password>'
  }

# Use urllib to encode the payload
data = urllib.urlencode(payload)

# Build our Request object (supplying 'data' makes it a POST)
req = urllib2.Request(authentication_url, data)

# Make the request and read the response
resp = urllib2.urlopen(req)
contents = resp.read()

请注意,这可能会变得更加复杂 - 例如,您也可以使用 GMail 来执行此操作,但您需要引入每次都会更改的参数(例如GALX范围)。再次强调,不确定这是否是您想要的,但希望它有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 urllib2 登录网站 - Python 2.7 的相关文章

随机推荐

  • Linq 帮助 - Sql 跟踪返回结果,但数据上下文返回 null

    var adminCov db SearchAgg AdminCovs SingleOrDefault l gt l AdminCovGuid covSourceGuid adminCov 不断返回 null 当我运行 SQL Profil
  • 如何在犰狳中序列化稀疏矩阵并与boost的mpi实现一起使用?

    我一直在尝试序列化稀疏矩阵犰狳 cpp 库 我正在做一些大规模的数值计算 其中数据存储在稀疏矩阵中 我想使用 mpi Boost 实现 收集这些矩阵并对来自不同节点的矩阵求和 我现在陷入困境的是如何将稀疏矩阵从一个节点发送到其他节点 Boo
  • 由于 windows 中的 openssl/ETimedout,gem install Rails 无法工作

    最初 我有ruby 1 9 3我的 Windows 7 中安装的版本 我已经安装了ruby 2 0 0p195最近并从命令提示符进行了测试 ruby v ruby e puts 100 irb 效果很好 ruby v gives ruby
  • 如何从 Spring Boot Endpoint Service 返回自定义 SOAP 错误?

    我已经设置了一个 Web 服务应用程序 它接收并仅记录来自第三方的 SOAP 请求 记录后必须返回定义的响应 如果没有错误并且接收到的 SOAP 请求与 WSDL 匹配 则此操作不会出现任何问题 不幸的是 第三方在发送无效内容甚至随机数据时
  • 向 CMake 添加命令行选项

    我正在使用 CMake 构建一个大型库 我希望用户能够有选择地启用 禁用构建过程的某些部分 如何将命令行选项添加到我的 CMake 构建中 例如这样用户就可以输入类似的内容cmake build partone nobuild parttw
  • Java 可视化 - 如何在 java 中转置 JTable?

    我正在寻找允许在 UI 上调换 jTable 的方法 可以通过单击按钮或其他操作来实现 我的主要问题是我应该如何为此目的构建数据模型 abstractTableModel Java中有没有现成的方法支持这种转置 如果您谈论的是行 列反转 那
  • 从 getline() 读取逗号分隔的整数

    如何从下面的代码中读取单独的整数 while getline cin line for each integer in line do something myVector push back each integer 输入是这样的 1 2
  • 如何捕获 Laravel 5 中的异常/缺失页面?

    在 Laravel 5 中 App missing and App error不可用 那么你现在如何捕获异常和丢失页面呢 我在文档中找不到与此相关的任何信息 在 Laravel 5 中 您可以通过编辑以下内容来捕获异常render中的方法a
  • 检查输入是否是有效的罗马数字

    我有一个程序可以将罗马数字转换为整数 反之亦然 我的问题是我真的不知道如何创建一个函数来检查用户输入是否是有效的罗马数字 我现在的代码 def checkIfRomanNumeral numeral Controls that the us
  • 尽管 KEEPALIVE,TCP、recv 函数仍挂起

    在服务器挂掉后 TCP keepalive 具有较小的超时 是否会阻止客户端挂在接收上 场景 服务器和客户端运行在不同的机器上 客户端通过带有 KEEPALIVE 选项的 TCP 连接到服务器 客户端发送 Hello server 并等待响
  • 不同类型的指针赋值

    我们可以在 C 中分配一个字符串 如下所示 char string string Hello printf s n string string printf p n string memory address 一个数字可以按如下方式完成 i
  • Passport.js 验证用户身份时出现问题

    我无法获取 Passport 来验证我的用户 由于某种原因 passport authenticate 方法总是失败 我不明白的是 如果我在护照调用之前添加中间件 则可以通过以下方式访问用户数据req user 关于为什么 Passport
  • Oracle 11.1.0.7 和 WAMP oci_connect 失败

    我正在尝试在我的本地 WAMP 服务器和我拥有的一些 Oracle 11 1 0 7 之间配置一个简单的连接 显然 PHP 有各种无法启动的解决方案和神奇情况 我正在运行 WAMP 的最新 32 位版本 我今天再次获取它只是为了检查 数据库
  • 如何创建网络服务

    我使用 Ruby on Rails 框架构建了一个网站 该站点将包含一个 Flash 应用程序 该应用程序将使用 Web 服务与 Rails 应用程序进行交互 我的合作伙伴构建了 Flash 应用程序 他告诉我 Flash 应用程序通过 W
  • 使用R中的mat2listw函数创建空间权重矩阵

    我正在尝试使用 mat2listw 函数在 R 中创建一个权重对象 我有一个非常大的空间权重矩阵 大约 22 000x22 000 这是在 Excel 中创建并读入 R 的 我现在正在尝试实现 library spdep SW mat2li
  • Java中将图像亮度转换为灰度错误

    我使用以下代码在 Java 中将图像转换为灰度 BufferedImage originalImage ImageIO read new File home david input bmp BufferedImage grayImage n
  • 如何使用 C++ 检测 Linux 中串行端口上运行的缓冲区溢出

    我有一个大问题 目前我正在通过以下钩子访问串行端口 fd open dev ttyS1 O RDWR O NOCTTY 然后我使用以下代码块从中读取 i select fd 1 rfds NULL NULL tv iLen read fd
  • json.parse 给出 Uncaught SyntaxError: Unexpected Token (Django json 序列化查询集)

    我遇到了错误Uncaught SyntaxError Unexpected Token当尝试解析 json 数据时 这是我的ajax代码 json2 js ajax type POST url best choose invoice ite
  • 将textarea中的html标签转换为富文本

    我正在使用 PHP 来填充文本区域
  • 使用 urllib2 登录网站 - Python 2.7

    好的 我将其用于 reddit 机器人 但我希望能够弄清楚如何登录任何网站 如果这有道理的话 我意识到不同的网站使用不同的登录表单等 那么我如何找出如何针对每个网站进行优化呢 我假设我需要在 html 文件中查找某些内容 但不知道是什么 我