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。转载请注明,变饼档博客

  • 相关阅读:
    UVA 1025 A Spy in the Metro DP水题
    ZOJ 3814 Sawtooth Puzzle BFS
    ZOJ 3816 Generalized Palindromic Number
    UVA 10859 Placing Lampposts 树形DP
    UVA 11825 Hackers' Crackdown 状压DP
    POJ 2887 Big String 线段树 离线处理
    POJ 1635 Subway tree systems Hash法判断有根树是否同构
    BZOJ 3110 k大数查询 & 树套树
    sdoi 2009 & 状态压缩
    来自于2016.2.24的flag
  • 原文地址:https://www.cnblogs.com/jukan/p/11148836.html
Copyright © 2011-2022 走看看