zoukankan      html  css  js  c++  java
  • Python爬虫常用之登录(二) 浏览器模拟登录

    浏览器模拟登录的主要技术点在于:

    1.如何使用python的浏览器操作工具selenium

    2.简单看一下网页,找到帐号密码对应的框框,要知道python开启的浏览器如何定位到这些

    一、使用selenium打开网页

    from selenium import webdriver
    
    url = 'https://passport.cnblogs.com/user/signin'
    
    driver = webdriver.Firefox()
    driver.get(url)

      以上几句执行便可以打开博客园的登录界面,开启浏览器可能较慢,耐心等一下.

      以前的selenium可以直接打开firefox,现在的需要安装geckodriver,自己百度下载一个对应自己浏览器的型号的.

      chrome一直都需要驱动,使用chrome的需要设置的可能麻烦一点.推荐看一下虫师的相关文章,个人觉得讲得不错,百度搜索出来还是比较靠前的.

    二、找到帐号密码对应的页面元素

      浏览器打开页面,点击f12,按上图步骤,找到了用户名的id"input1",同理找到密码的id,找到后发现是"input2".

    三、将自己的用户名和密码填入selenium打开的浏览器

      使用find_element_by_id方法找到元素,再使用send_keys方法传入参数,最后使用click方法点击登录按钮即可.

    成品代码有如下几句:

    # /usr/bin/python
    # encoding: utf-8
    
    import time
    from selenium import webdriver
    
    
    def login(username, password):
        # url = 'https://passport.cnblogs.com/user/signin'  # 使用这个url登录成功后定位到园子
        url = 'https://passport.cnblogs.com/user/signin?ReturnUrl=https%3A%2F%2Fwww.cnblogs.com%2F'  # url中指明定位到博客园首页
    
        driver = webdriver.Firefox()
        driver.get(url)
        # print driver.title
        name_input = driver.find_element_by_id('input1')  # 找到用户名的框框
        pass_input = driver.find_element_by_id('input2')  # 找到输入密码的框框
        login_button = driver.find_element_by_id('signin')  # 找到登录按钮
    
        name_input.clear()
        name_input.send_keys(username)  # 填写用户名
        time.sleep(0.2)
        pass_input.clear()
        pass_input.send_keys(password)  # 填写密码
        time.sleep(0.2)
        login_button.click()            # 点击登录
    
        time.sleep(0.2)
        print driver.get_cookies()
    
        time.sleep(2)
        print driver.title
    
        driver.close()
    
    if __name__ == "__main__":
        user = "Masako"
        pw = "*****"
        login(user, pw)

    使用time模块sleep主要是为了控制操作速度,防止被认为是机器人,比较符合现实的情况应该随机sleep时间.

    上述代码执行之后(注意将用户名密码换成自己的),可以看到打开了浏览器,并自动填写了帐号密码,自动点击登录,成功后跳转,然后自动关闭浏览器.

    本地可以看到打印了一份cookie和一个标题"博客园 - 开发者的网上家园".

    如果登录失败,打印的标题会是"用户登录 - 博客园".

    如果报错,未打开浏览器,多半是没有安装geckodriver.

    上述代码会打开浏览器界面,若不想看到界面,可采用以下手段:

    if __name__ == "__main__":
    
        from pyvirtualdisplay import Display
    
        display = Display(visible=0, size=(1366, 768))
        display.start()
        user = "Masako"
        pw = "*****"
        login(user, pw)
        display.stop()

    在调用浏览器的时候使用Display包裹,并将dispaly设置为不可见(visible=0)

  • 相关阅读:
    c#抓取和分析网页的类
    优化 Microsoft Windows Media Services 9 Series
    IIS中HTTP压缩概述
    网站CND加速器是什么
    如何分析网页数据并且去除Html标签(C#)
    告别ASP.NET操作EXCEL的烦恼(总结篇)
    Windows Media Services 9 系列常见问题解答
    字体收藏
    水晶按钮最终效果图
    gzip
  • 原文地址:https://www.cnblogs.com/masako/p/7403293.html
Copyright © 2011-2022 走看看