zoukankan      html  css  js  c++  java
  • python-selenium登陆今日头条

    https://blog.csdn.net/a942242856/article/details/88379727

    原文地址:http://www.bianbingdang.com/article_detail/148.html

    #python-selenium登陆今日头条

    在运营今日头条的过程当中,有时候未免要进行一些重复无味的劳动。比如在发放微头条的时候,写好了许多内容,并不像每次登陆然后逐个发表。比如我想每个整点去发表一些东西。那么自动登陆今日头条就很有必要了。

    选择selenium

    选择这个工具的原因是,它可以模拟浏览器去登陆,从而避免一些不必要的麻烦。比如各种浏览器时间戳验证,反爬虫等不好处理的东西(请求头的拼接、cookies的获取)。加上运行不是特别的频繁,也不会造成频繁输入验证码、封IP等。

    下载selenium驱动

    设置浏览器模型

    from selenium import webdriver
    browser = webdriver.Chrome()
    
    • 1
    • 2

    获取cookies

    browser.get("https://mp.toutiao.com")
    # 点击登陆按钮
    login = browser.find_element_by_css_selector('body > div > div.carousel > div.page.page-1 > div > img.i3')
    login.click()
    time.sleep(3)
    # 填写手机号
    phone = browser.find_element_by_id('user-name')
    phone.send_keys('19991320539')
    # 获取验证码
    browser.find_element_by_id('mobile-code-get').click()
    verfiy_code_input = input("请输入验证码:")
    # 验证码输入框
    mobile_code = browser.find_element_by_id('mobile-code')
    mobile_code.send_keys(verfiy_code_input)
    
    # 登陆
    browser.find_element_by_id('bytedance-SubmitStatic').click()
    time.sleep(5)
    cookies = browser.get_cookies()
    with open('cookies.json', 'w') as f:
        self.cookies = json.loads(f.write(json.dumps(cookies)))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    这块将获取到cookies放到cookies.json文件当中,这块今日头条在第一次登陆,会有一个云验证的图片,这块比较麻烦,只等手动点击,来获取到cookies。但是获取到之后,官方默认可以保持一个月。所以这块比较放心,不用每次都去登陆,只要得到cookie就行

    使用cookie登陆

    browser.get("https://mp.toutiao.com/profile_v3/index")
    with open('cookies.json') as f:
        cookies = json.loads(f.read())
    for cookie in cookies:
        browser.add_cookie(cookie)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    这块在登陆的时候,可能页面显示未登录,其实设置cookies之后,已经登陆成功了,只需要再刷新以下一下页面 。
    可再登陆完成后执行如下代码几次

    browser.refresh()
    browser.refresh()
    
    • 1
    • 2

    完整dome代码如下

    """
    #!usr/bin/env python  
    # -*- coding:utf-8 -*-
    """ 
    @author:'手机视界&[变饼档博客](http://www.bianbingdang.com "变饼档博客")' 
    @file: login.py 
    @time: 2019/03/10
    """
    
    import time
    import json
    
    from selenium import webdriver
    
    
    class TouTiao:
        def __init__(self):
            self.cookies = None
            self.browser = webdriver.Chrome()
    
        def set_cookies(self):
            with open('cookies.json') as f:
                self.cookies = json.loads(f.read())
            for cookie in self.cookies:
                self.browser.add_cookie(cookie)
    
        def create_session(self):
            self.browser.get("https://mp.toutiao.com")
            if self.cookies is None:
                self.set_cookies()
            time.sleep(1)
            self.browser.get("https://mp.toutiao.com/profile_v3/index")
            
        def forward_wei(self, content):
            """
            跳转微头条
            :return:
            """
            self.browser.get("https://mp.toutiao.com/profile_v3/weitoutiao/publish")
            time.sleep(1)
            # 微头条内容框
            weitoutiao_content = self.browser.find_element_by_css_selector(
                "div > div.garr-container-white.weitoutiao-index-zone > div > div:nth-child(1) > textarea")
            weitoutiao_content.send_keys(content)
            # 微头条发布按钮
            weitoutiao_send = self.browser.find_element_by_css_selector(
                "div > div.garr-container-white.weitoutiao-index-zone > div > button")
            weitoutiao_send.click()
            
        def login(self):
            self.browser.get("https://mp.toutiao.com/profile_v3/index")
            # 点击登陆按钮
            login = self.browser.find_element_by_css_selector('body > div > div.carousel > div.page.page-1 > div > img.i3')
            login.click()
            time.sleep(3)
            # 填写手机号
            phone = self.browser.find_element_by_id('user-name')
            phone.send_keys('19991320539')
            # 获取验证码
            self.browser.find_element_by_id('mobile-code-get').click()
            verfiy_code_input = input("请输入验证码:")
            # 验证码输入框
            mobile_code = self.browser.find_element_by_id('mobile-code')
            mobile_code.send_keys(verfiy_code_input)
    
            # 登陆
            self.browser.find_element_by_id('bytedance-SubmitStatic').click()
            time.sleep(5)
            cookies = self.browser.get_cookies()
            with open('cookies.json', 'w') as f:
                self.cookies = json.loads(f.write(json.dumps(cookies)))
            print(cookies, "登陆成功")
    
        def close(self):
            self.browser.close()
    
    if __name__ == '__main__':
        tou_tiao = TouTiao()
        tou_tiao.create_session()
        tou_tiao.forward_wei('<br/>test')
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80

    作者微信:bianbingdang。转载请注明,变饼档博客

  • 相关阅读:
    ffmpeg一些filter使用方法、以及一些功能命令
    Hibernate调试——定位查询源头
    emmet语法
    [心得]传统IT转互联网面试经验分享
    Java中的集合类型的继承关系图
    Java的IO操作中有面向字节(Byte)和面向字符(Character)两种方式
    oracle求时间差的常用函数
    jdbc读取新插入Oracle数据库Sequence值的5种方法
    Xpath语法格式整理
    Oracle中 Instr 这个函数
  • 原文地址:https://www.cnblogs.com/jukan/p/11148836.html
Copyright © 2011-2022 走看看