广告
返回顶部
首页 > 资讯 > 后端开发 > Python >bs4+mechanize模拟登陆
  • 799
分享到

bs4+mechanize模拟登陆

mechanize 2023-01-30 22:01:31 799人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

Mechanize常用函数.CookieJar():设置cookie .Browser():打开浏览器 .addheaders():User-Agent,用来欺骗服务器的 .open():打开网页,按照官网描述

Mechanize常用函数

.CookieJar():设置cookie 

.Browser():打开浏览器 

.addheaders():User-Agent,用来欺骗服务器的 

.open():打开网页,按照官网描述可以打开任意网页,不仅限于http 

.select_form():选择表单的,选择表单的ID的时候需要注意。 

.form[]:填写form表单信息 

.submit():提交


环境介绍:

本地有个django服务,访问http://127.0.0.1:8000如下

blob.png


成功登陆后,会有登陆账号,登陆时间

blob.png


利用mechanize模拟登陆,在用bs4获取登陆信息

注意:mechanize版本只支持python2x版本

完整代码如下

#!/usr/bin/env pythoncoding: utf-8
import mechanize
import sys
from bs4 import BeautifulSoup

# py2.7声明使用utf-8编码
reload(sys)
sys.setdefaultencoding('utf-8')

class Item(object):  # 定义一个Item类,爬取的字段类
    landing_name = None  # 登陆账号
    landing_time = None  # 登陆时间

class SimulateLogin(object):
    def __init__(self, url, username, passWord):
        self.url = url
        self.username = username
        self.password = password
        self.bs4_filter()

    def mechanize_setting(self):
        # 打开浏览器
        br = mechanize.Browser()

        # 设置浏览器
        br.set_handle_equiv(True)
        br.set_handle_redirect(True)
        br.set_handle_referer(True)
        br.set_handle_robots(False)
        br.set_handle_gzip(False)

        # Follows refresh 0 but not hangs on refresh > 0
        br.set_handle_refresh(mechanize._Http.HTTPRefreshProcessor(), max_time=1)

        # 设置user-agent
        br.addheaders = [('User-agent','Mozilla/5.0 (X11; U; linux i686; en-US; rv:1.9.0.1) Gecko/2008071615
         Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
        return br

    def login(self):
        br = self.mechanize_setting()
        br.open(self.url)
        # 打印fORM表单需要提交的信息
        for form in br.forms():
            print(form)
        # 注意:
        # post 指的是请求方式
        # TextControl(name=)对应的是账号
        # PasswordControl(pwd=)对应的是密码
        try:
            br.select_form(method='post')
            br.form['name'] = self.username
            br.form['pwd'] = self.password
            br.submit()
        except Exception as e:
            print('form表信息填写错误:%s' % e)
        else:
            ret = br.response().read()
            return ret

    def bs4_filter(self):
        items = []
        ret = self.login()
        # 利用bs4 获取登陆成功后的一些信息
        soup = BeautifulSoup(ret, 'lxml')
        tagsli = soup.find_all('ul', attrs={'class': 'nav navbar-nav navbar-right'})
        for tag in tagsli:
            item = Item()  # 实例化Item类
            item.landing_name = tag.find_all('li')[0].get_text().strip()
            item.landing_time = tag.find_all('li')[1].get_text().strip()
            items.append(item)
        for item in items:
            print('登陆账号:%s\n登陆时间:%s'%(item.landing_name,item.landing_time))


if __name__ == '__main__':
    url = 'http://127.0.0.1:8000/'
    SimulateLogin(url, 'zhangsan', '123')


运行效果:

blob.png


如果需要改成外网的爬取,代码改成:

#!/usr/bin/env Python
# coding: utf-8
import mechanize
import sys
from bs4 import BeautifulSoup

# py2.7声明使用utf-8编码
reload(sys)
sys.setdefaultencoding('utf-8')


class Item(object):  # 定义一个Item类,爬取的字段类
    landing_name = None  # 登陆账号
    landing_time = None  # 登陆时间


class SimulateLogin(object):
    def __init__(self, url, username, password):
        self.url = url
        self.username = username
        self.password = password
        self.login()

    def mechanize_setting(self):
        # 打开浏览器
        br = mechanize.Browser()

        # 设置浏览器
        br.set_handle_equiv(True)
        br.set_handle_redirect(True)
        br.set_handle_referer(True)
        br.set_handle_robots(False)
        br.set_handle_gzip(False)

        # Follows refresh 0 but not hangs on refresh > 0
        br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

        # 设置user-agent
        br.addheaders = [('User-agent','Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615
         Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
        return br

    def login(self):
        br = self.mechanize_setting()
        br.open(self.url)
        # 打印form表单需要提交的信息
        for form in br.forms():
            print(form)
        # 注意:
        # post 指的是请求方式
        # TextControl(name=)对应的是账号
        # PasswordControl(pwd=)对应的是密码
        try:
            br.select_form(method='post')
            br.form['name'] = self.username
            br.form['pwd'] = self.password
            br.submit()
        except Exception as e:
            print('form表信息填写错误:%s' % e)
        else:
            # 读取登陆后页面
            ret = br.response().read()
            print(ret)


if __name__ == '__main__':
    url = 'http://127.0.0.1:8000/'  # 后台登陆地址
    SimulateLogin(url, 'zhangsan', '123')  # 传入url,账号,密码参数


运行结果:可以根据需求去提取对应的数据

blob.png

--结束END--

本文标题: bs4+mechanize模拟登陆

本文链接: https://www.lsjlt.com/news/179156.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • bs4+mechanize模拟登陆
    Mechanize常用函数.CookieJar():设置cookie .Browser():打开浏览器 .addheaders():User-Agent,用来欺骗服务器的 .open():打开网页,按照官网描述...
    99+
    2023-01-30
    mechanize
  • bs4--mechanize模拟浏览器
    Mechanize模块,只支持python2,而我的环境是python3使用pycharm创建虚拟环境,使用py2.7如果非要使用py3,可以使用mechanicalsoup模块(网上大概看了下,都说不好用,这里不多介绍)Mechanize...
    99+
    2023-01-30
    浏览器 mechanize
  • Python 模拟登陆
    import urllibimport urllib.requestimport gzipimport httpimport http.cookiejar#定义一个方法用于生成请求头信息,处理cookie  def getOpener(he...
    99+
    2023-01-31
    Python
  • pytesseract+mechanize识别验证码自动登陆
    pytesseract+mechanize识别验证码自动登陆需要的模块安装Pillow,Python平台的图像处理标准库pip install pillow安装pytesseract,文字识别库pip inst...
    99+
    2023-01-30
    验证码 pytesseract mechanize
  • 通过session模拟登陆
    import requests # 这个练习对比的是上一个登陆练习,这个是不用自己传入cookie参数,而是利用session方法登陆 # 实例化一个session session = requests.session() # 使用...
    99+
    2023-01-30
    session
  • python模拟登陆Github示例
    首先进入github登录页:https://github.com/login 输入账号密码,打开开发者工具,在Network页勾选上Preserve Log(显示持续日志),点击登录,查看Session请求,找到其请求的URL与Form ...
    99+
    2023-01-31
    示例 python Github
  • python怎么模拟登陆网站
    这篇文章主要介绍了python怎么模拟登陆网站,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用已有cookie登陆使用浏览器登陆,获取浏览器中的cookie信息,来进行登陆...
    99+
    2023-06-14
  • NodeJs模拟登陆正方教务
    网上已经有很多关于模拟登陆正方教务的作品了,基于 PHP,Python,Java,.Net 加上我自己尝试的NodeJs,这几门语言都可以实现模拟登陆,模拟登陆的技术点不是特别难,这里记录一下利用 Node...
    99+
    2022-06-04
    正方 教务 NodeJs
  • Python 爬虫模拟登陆知乎
    在之前写过一篇使用python爬虫爬取电影天堂资源的文章,重点是如何解析页面和提高爬虫的效率。由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了一下p...
    99+
    2022-06-04
    爬虫 Python
  • 通过cookies信息模拟登陆
    1 import requests 2 3 # 这个练习演示的是通过传入cookie信息模拟登陆,这样操作的前提是需要预先在浏览器登陆账户抓包得到cookie字段信息 4 5 url = "http://www.360wa...
    99+
    2023-01-30
    信息 cookies
  • python模拟登陆网站的示例
    目录使用已有cookie登陆登陆获取cookieform datarequest payload登陆后用session保持登陆状态调用浏览器登陆使用已有cookie登陆 使用浏览器...
    99+
    2022-11-11
  • python项目实战:模拟登陆CSDN
    前言今天为大家介绍一个利用Python模拟登陆CSDN的案例,虽然看起来很鸡肋,有时候确会有大用处,在这里就当做是一个案例练习吧,提高自己的代码水平,也了解Python如何做到模拟登陆的,下面来看代码导入库...
    99+
    2023-06-02
  • NodeJs如何模拟登陆正方教务
    这篇文章主要为大家展示了“NodeJs如何模拟登陆正方教务”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“NodeJs如何模拟登陆正方教务”这篇文章吧。1. 收集...
    99+
    2022-10-19
  • Selenium模拟登陆百度(带验证码)
    利用Selenium模拟登陆解决验证码的问题验证码解决方案有很多种:1  通过第三方的打码平台,识别率高...一般都是收费的,价格还不便宜2  自己通过切图,再结合图片识别的库,去识别验证码... 简单的验证码识别率还可...
    99+
    2023-01-30
    验证码 Selenium
  • Python模拟登陆及个人经验(五)
    实验名称:模拟登陆实验要求:输入用户名密码认证成功显示欢迎信息输错三次锁定用户 思路:用户输入username判断username是否为真(文件)。否:提示用户不存在;是:判断是否锁定(文件)如果用户锁定提示:该用户已锁定;没锁定就输入密码...
    99+
    2023-01-31
    经验 Python
  • 使用python模拟浏览器实现登陆
    前言 你有没有想过,当我们在某个网站上登陆时,网站是如何通过验证的,我们都提交给了网站哪些信息,浏览器都发起了哪些请求? 下图是某个网站的登陆界面,接下来就让我们通过命令行模拟浏览器实现登陆操作,看看一个简单的登陆操作,具...
    99+
    2023-01-31
    浏览器 python
  • Python模拟用户自动登陆网易126邮
    Python模拟用户自动登陆网易126邮箱的源码详解,在这里主要来和大家讲一讲,关于利用Python程序来实现自动登录(登陆)网易的126邮箱email的源码与方法,其它邮箱可以借鉴此Python程序代码发邮件。 涉及到Python针对...
    99+
    2023-01-31
    网易 用户 Python
  • scrapy的一些容易忽视的点(模拟登陆
    scrapy爬虫注意事项 一、item数据只有最后一条 这种情况一般存在于对标签进行遍历时,将item对象放置在了for循环的外部。解决方式:将item放置在for循环里面。   二、item字段传递后错误,混乱 有时候会遇到这样...
    99+
    2023-01-31
    scrapy
  • Python项目实战:密码模拟登陆猎聘网
    前言今天为大家介绍一个模拟登陆猎聘网招聘网站的案列,加了一个输入密码不可的模块getpass,这样更有安全性,可能实际应用不大,但是存在必有价值,就当是一个案例的练习吧,看看是如何做到模拟登陆猎聘网的导入第三方库...
    99+
    2023-06-02
  • 怎么登陆虚拟主机
    登陆虚拟主机的方法:1、通过服务商网站系统登陆虚拟主机,进入提供商的官网,输入账号和密码登录,点击个人会员中心找到对应的主机型号,即可来到虚拟主机管理面板;2、通过独立控制面板直接登陆虚拟主机,进入网站空间独立控制面板的登陆页面,输入FTP...
    99+
    2022-10-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作