菜鸟写Python-Selenium操作:Selenium登录豆瓣并获取cookies

一、背景

很多时候,我们在爬取数据时,有些页面的数据需要登录才能看到,因此需要登录再爬取数据。实现login再爬取的手段很多,但核心都是通过cookie的方式来记录身份信息,因此模拟登录的核心在于对cookie的使用(获取、保存和使用)。

二、模拟登录方法

1、通过分析登录页面,获取登录接口和提交表单进行登录验证(可以用简单的Request库结合cookielib方式或者Scrapy等)

简单的Request库结合cookielib方式,请参考:Cookie登录爬取实战:Python 利用urllib库的cookie实现网站登录并抓取

2、通过selenium进行浏览器模拟登录(简单直接有效)

然而,随着各知名网站反爬虫机制升级,登录接口变得越来越复杂复杂,加入动态js的方法,使用方式1,难度在增加。因此本文采用selenium方式来登录,同时通过session记录登录后的cookies,进一步对其他内的内容进行爬取。

Selenium介绍:

Selenium可以模拟真实的浏览器,具有浏览器所有的功能,可以很容易的加载js。加上在写Python爬虫的时候,最麻烦的不是那些海量的静态网站,而是那些通过JavaScript获取数据的站点,这是Selenium的优势就很明显了。

三、实现代码

环境:python3.6 + windows10 + Chrome

依赖库:selenium库 (初次使用先安装 pip3 install selenium)

驱动包:下载Chrome驱动包:http://chromedriver.storage.googleapis.com/index.html,根据你的chrome版本下载,并放在python安装根目录

思路:用selenium打开chrome,通过程序自动输入账号密码,有验证码则需手动填写下验证码。等到成功登陆之后使用“get_cookies()”函数来调出它的Cookies,同时继续访问登录后的其他页面。

from selenium import webdriver #导入selenium

    def loginZhihu(self):
        loginurl='https://www.douban.com/'    # 登录页面
        # 加载webdriver驱动,用于获取登录页面标签属性
        driver=webdriver.Chrome()
        driver.get(loginurl)    # 请求登录页面
        driver.find_element_by_name('form_email').clear()  # 获取用户名输入框,并先清空
        driver.find_element_by_name('form_email').send_keys(u'usernam') # 输入用户名
        driver.find_element_by_name('form_password').clear()  # 获取密码框,并清空
        driver.find_element_by_name('form_password').send_keys(u'password') # 输入密码

        captcha=driver.find_element_by_id('captcha_image')  # 获取验证码标签
        submit=driver.find_element_by_css_selector('input[class="bn-submit"]')#获取提交按钮
        # 判断是否需要验证码
        if captcha:
            captcha_field=driver.find_element_by_id('captcha_field')  #获取验证码输入框
            text=input("请输入验证码:")  # 控制栏输入验证码
            captcha_field.send_keys(text)  # 将输入的验证码传递给selenium打开的浏览器
            submit.click()  # 按钮提交并登录
        else: 
            submit.click()  # 无验证码则直接登录提交
        cookies=driver.get_cookies()   # 获取验证码
        driver.get('https://movie.douban.com/')  # 请求其他页面
        return cookies  #返回cookies 之后其他方法可以调用,这样不用每次请求都返回登录

扩展:通过这个方法,我们请求其他页面也是登录之后的状态,其实除了return cookies外,我们也可以先把cookies保存文本,然后在在后面请求中,我们在读出cookies去请求其他页面也是一样的。菜鸟写Python实战:Scrapy完成知乎登录并保存cookies文件用于请求他页面(by Selenium)

#  添加微信:第一行Python代码,获取开发代码视频及其他资料,一起交流学习Python

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python Selenium 是一套完整的web应用程序测试系统,它包含了测试的录制、编及运行和测试的并行处理。Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编,因此可以用于任何支持JavaScript的浏览器上。Selenium支持的语言包括C#,Java,Perl,PHP,Python和Ruby。目前,Selenium Web 驱动程序最受Python和C#欢迎。你可以使用PythonSelenium测试脚本,并且可以直接在大多数现代Web浏览器中运行。 如果你想在PyCharm中使用Python Selenium,你可以按照以下步骤操作: 1. 在PyCharm中新建一个Python文件,自行命名。 2. 导入selenium包,可以使用以下代码:`from selenium import webdriver` 3. 打开Firefox浏览器,可以使用以下代码:`browser = webdriver.Firefox()` 4. 如果需要等待一段时间,可以使用`time.sleep()`方法,比如停留3秒:`time.sleep(3)` 5. 最后,关闭浏览器,可以使用以下代码:`browser.quit()`[3] 这样,你就可以在PyCharm中使用Python Selenium了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [基于PythonSelenium详细教程](https://blog.csdn.net/qq_43125235/article/details/125601564)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Python selenium基础用法详解](https://blog.csdn.net/m0_63794226/article/details/126447599)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值