zoukankan      html  css  js  c++  java
  • selenium+python Douyu弹幕机器人

    #coding=utf-8
    
    from selenium import webdriver
    from selenium.common.exceptions import NoSuchElementException
    from selenium.webdriver.support.ui import WebDriverWait
    import time
    import json
    import requests
    import sys
    
    class Robot:
        def __init__(self):
                self.browser = webdriver.Firefox()
    
    
        def login_with_code(self,usname,pwd):
    
            url = 'https://passport.douyu.com/index/login?passport_reg_callback=PASSPORT_REG_SUCCESS_CALLBACK&passport_login_callback=PASSPORT_LOGIN_SUCCESS_CALLBACK&passport_close_callback=PASSPORT_CLOSE_CALLBACK&passport_dp_callback=PASSPORT_DP_CALLBACK&type=login&client_id=1&state=https%3A%2F%2Fwww.douyu.com%2F2009&source=click_topnavi_login'
            self.browser.get(url)
            self.browser.maximize_window()
    
    
            button1 = WebDriverWait(self.browser,15).until(lambda x:x.find_element_by_class_name('js-qrcode-switch'))
            button1.click()
    
            button2 = WebDriverWait(self.browser,10).until(lambda x:x.find_element_by_xpath("//div[@class='loginbox-login-subtype']/span[@data-subtype='login-by-nickname']"))
            button2.click()
    
            input1 = WebDriverWait(self.browser,10).until(lambda x:x.find_element_by_name('username'))
            input1.send_keys(usname)
    
            input2 = WebDriverWait(self.browser,10).until(lambda x:x.find_element_by_name('password'))
            input2.send_keys(pwd)
    
            time.sleep(1)   #avoid the protection of douyu
    
            #button3 = self.browser.find_element_by_xpath("//div[@class='login-sbt-con']/input[@type='submit']")
            button3 = self.browser.find_element_by_class_name('btn-sub')
            button3.click()
    
    
            print('45...')
            time.sleep(15)
            print('30...')
            time.sleep(15)
            print('15...')
            time.sleep(12)
            print('3...')
            time.sleep(1)
            print('2...')
            time.sleep(1)
            print('1...')
            time.sleep(1)
    
            print ("Verification Code finish.......")
    
            while True:
                if(self.ifLogin()):
                    print('login success')
                    cookie_saved = self.browser.get_cookies()
                    fp = open('cookie.json','w')
                    json.dump(cookie_saved,fp)
                    fp.close()
                    break
                break
    
    
        def login_with_cookie(self,cookies):
            self.browser.get('https://www.douyu.com/directory/myFollow')
            self.browser.maximize_window()
            for cookie in cookies:
                self.browser.add_cookie(cookie)
            self.browser.refresh()
    
    
        def sendM(self,room,message):
    
            url = 'https://www.douyu.com/' + room
            self.browser.get(url)
    
            for i in range(10):    #连续发10条
                input_mes = WebDriverWait(self.browser,10).until(lambda x:x.find_element_by_class_name('ChatSend-txt'))
                input_mes.send_keys(message)
                time.sleep(0.4)
                button_send = WebDriverWait(self.browser,10).until(lambda y:y.find_element_by_class_name('ChatSend-button '))
                button_send.click()
                time.sleep(0.5) #最短发言时间
    
    
    
        def ifLogin(self):
            if 'PHPSESSID' in str(self.browser.get_cookies()):
                return True
            else:
                return False
    
    
    def main():
    
        username = 'XXXXXX'
        password = 'xxxxxx'
        room = '6388034'
        message = 'ceeeeeeeeeeeeeeb'
        robot = Robot()
    
        try:
            fp = open('cookie.json','r')
            cookies = json.load(fp)
            fp.close
            print("login with cookie...")
            robot.login_with_cookie(cookies)
        except:
            print("login with code...")
            robot.login_with_code(username,password)
        robot.sendM(room,message)
    
    if __name__ == '__main__':
        main()

    首次登陆自动使用账号密码登录,需要手动图片验证码及手机填写验证码,之后登录自动调用cookie。

    请勿用于非法用途

  • 相关阅读:
    解决 Ant Sword-HTTPS 证书失效(cert_has_expired)连不上问题
    通达OA 11.2后台getshell漏洞复现
    通达OA 任意文件上传+文件包含导致RCE
    xxl-job <=2.0.2 反序列化漏洞
    代理模式学习
    javassist 使用笔记
    CommonsCollections3 反序列化利用链分析
    CommonsCollections2 反序列化利用链分析
    CommonsCollections1 反序列化利用链分析
    httpd通过ajp协议反向代理tomcat
  • 原文地址:https://www.cnblogs.com/Aiden-/p/11489465.html
Copyright © 2011-2022 走看看