原本设想是使用selenium来编写一个自动化发送弹幕的机器人。来代替我发送弹幕来进行弹幕抽奖等。代码如下

# coding: UTF-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import pyperclip
from selenium.webdriver.support.wait import WebDriverWait         #实例化1个谷歌浏览器对象
#
browser=webdriver.Chrome()
browser.get('https://www.douyu.com/')#进入斗鱼首页

#登录
WebDriverWait(browser,10,0.2).until(lambda x:x.find_element_by_xpath('//*[@id="js-header"]/div/div/div[3]/div[7]/div/div/a/span'))#显示等待直到有登录
browser.find_element_by_xpath('//*[@id="js-header"]/div/div/div[3]/div[7]/div/div/a/span').click()#点击头像
browser.implicitly_wait(5)#隐式等待五分钟,等待加载

browser.switch_to_frame('login-passport-frame')#进入弹出的登录框中
WebDriverWait(browser,10,0.2).until(lambda x:x.find_element_by_xpath('//*[@id="loginbox"]/div[2]/div[1]/div[2]'))#显示等待
browser.find_element_by_xpath('//*[@id="loginbox"]/div[2]/div[1]/div[2]').click()#点击转换页面,转为电话号码登录

WebDriverWait(browser,10,0.2).until(lambda x:x.find_element_by_xpath('//*[@id="loginbox"]/div[3]/div[2]/div/form/div[6]/input'))#显示等待

#输入账号密码
user=input("请输入账号:")
passwd=input("请输入密码:")
browser.find_element_by_xpath('//*[@id="loginbox"]/div[3]/div[2]/div/form/div[1]/div/input').send_keys(user)
browser.find_element_by_xpath('//*[@id="loginbox"]/div[3]/div[2]/div/form/div[3]/input[1]').send_keys(passwd)


#由于需要进行图片和短信验证码验证,所以此处提示手动在浏览器通过验证
print('请在页面点击登录并通过验证。')

login = input("请输入是否登录完成y/n:")
browser.switch_to.default_content()#退出登录框
browser.implicitly_wait(5)#隐式等待
#输入判断是否发弹幕
panduan = input("请输入是否发弹幕y/n:")

#想要发送弹幕就进入循环

while panduan=='y':
    #通过搜索房间号的方式,并点击搜索到的连接进入想要抽奖的直播间

u = input("请输入需要发送弹幕的直播间号:")
    browser.switch_to_window(browser.window_handles[-1])#跳到新打开的页面
    browser.find_element_by_class_name("Search-text").clear()
    browser.find_element_by_class_name("Search-text").send_keys(u)#将房间号传入搜索框
    browser.find_element_by_class_name("Search-text").send_keys(Keys.ENTER)#模拟enter键


    time.sleep(5)#程序沉睡五秒,进行加载
    browser.switch_to_window(browser.window_handles[0])
    browser.close()#关闭上一个页面
    browser.switch_to_window(browser.window_handles[-1])
    browser.execute_script("document.body.style.zoom='0.67'")#将新页面尺寸调整为%67

#在搜索到的页面点击进入房间
    WebDriverWait(browser, 10, 0.2).until(
        lambda x: x.find_element_by_xpath('//*[@id="js-search-result"]/section[3]/section[2]/section[1]/div[2]/div/a'))

browser.find_element_by_xpath('//*[@id="js-search-result"]/section[3]/section[2]/section[1]/div[2]/div/a').send_keys(
        Keys.ENTER)


    time.sleep(5)
    browser.close()#关闭上一个页面
    browser.switch_to_window(browser.window_handles[-1])
    panduan1='y'
    browser.execute_script("document.body.style.zoom='0.67'")

#选择发弹幕方式进入两个分支自定义或字典
    c_type=int(input("请输入方式,输入1手动设定弹幕,输入2使用字典:"))
    if c_type==1:

#进入发弹幕循环,直到时间超时
        while panduan1=='y':
            #以秒为单位设定抽奖参数,并抽奖
            a=input("请输入发送的弹幕:")
            b=float(input("发送弹幕的时间/s:"))
            c=float(input("发送弹幕的时间间隔/s:"))

starttime=time.time()#获取此时时间

#此时时间减去开始时间比设定的弹幕发送时间小,则一直发送

while(time.time() - starttime < b):
                WebDriverWait(browser,10,0.2).until(lambda x:x.find_element_by_xpath('//*[@id="js-player-asideMain"]/div/div[2]/div/div[2]/div[2]/textarea'))

browser.find_element_by_xpath('//*[@id="js-player-asideMain"]/div/div[2]/div/div[2]/div[2]/textarea').send_keys(a)#将弹幕传入输入框
                time.sleep(c)#弹幕间的时间间隔
                browser.find_element_by_xpath('//*[@id="js-player-asideMain"]/div/div[2]/div/div[2]/div[2]/textarea').send_keys(Keys.ENTER)
            panduan1 = input("请输入是否继续在此直播间y/n:")
    elif c_type==2:

进入字典发弹幕循环,如果超时则暂停发送
        while panduan1=='y':
            #以秒为单位设定抽奖参数,并抽奖
            a=input("请输入文件名:")
            f_word = open(a + ".txt", 'r', encoding='UTF-8')#打开字典文件
            b=float(input("发送弹幕的时间/s:"))
            c=float(input("发送弹幕的时间间隔/s:"))

starttime=time.time()

while(time.time() - starttime < b):
                line=f_word.readline()#按行读取字典内的内容

#当字典数据读完后,重新从开始位置进行读取
                if line == '':
                    f_word.close()
                    f_word = open(a + ".txt", 'r', encoding='UTF-8')
                    continue
                WebDriverWait(browser,10,0.2).until(lambda x:x.find_element_by_xpath('//*[@id="js-player-asideMain"]/div/div[2]/div/div[2]/div[2]/textarea'))
                line.replace("\n","")#将读取到的每一行的换行符删掉
                pyperclip.copy(line)#将读取到的内容填入剪切板
                browser.find_element_by_xpath('//*[@id="js-player-asideMain"]/div/div[2]/div/div[2]/div[2]/textarea').send_keys(Keys.CONTROL,'v')#模拟键盘ctrl+v进行粘贴操作
                time.sleep(c)
                browser.find_element_by_xpath('//*[@id="js-player-asideMain"]/div/div[2]/div/div[2]/div[2]/textarea').send_keys(Keys.ENTER)
            f_word.close()
            panduan1 = input("请输入是否继续在此直播间发送弹幕y/n:")
    panduan=input("请输入是否换一个直播间y/n:")

封装

结合thinter和pyinstaller可以封装成一个可移植的程序,只需在程序文件夹下放入自己系统谷歌浏览器对应的chromedriver.exe就可以实现在不同windows系统上进行迁移

资源地址:https://download.csdn.net/download/duoduowangjia/13738768

使用selenium编写一个斗鱼弹幕机器人,进行封装成exe程序相关推荐

  1. 自己动手用Android和Xposed编写一个微信聊天机器人——《微信聊天精灵》实现关键词自动回复。

    出于爱好和需要,想着自己来编写一个微信聊天机器人,能实现以下功能: 能实时获取到微信聊天消息: 能进行文本自动回复: 能够设置关键词: 能够根据关键词匹配,进行内容回复: 能实现聊天消息云端备份: 已 ...

  2. 322. 零钱兑换 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 你可以认为每

    零钱兑换 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 你可以认为每种硬币的数量 ...

  3. 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1

    /*** 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1.* 输入: coins = ...

  4. 习题:编写一个学生和教师数据输入和显示程序,学生数据有编号、姓名、班级和成绩,教师数据有编号、姓名、职称和部门。

    完整题干: 编写一个学生和教师数据输入和显示程序,学生数据有编号.姓名.班级和成绩,教师数据有编号.姓名.职称和部门.要求将编号.姓名输入和显示设计成一个类person,并作为学生数据操作类stude ...

  5. 编写一个模拟航空客运定票系统的程序

    原文地址:编写一个模拟航空客运定票系统的程序作者:木木女 实习报告 题目:2.7 编写一个模拟航空客运定票系统的程序 班级: 姓名: 学号:完成日期: 一.  需求分析: 1.     程序需要模拟航 ...

  6. 编写一个计算机矩形的周长和面积的程序 两种方法

    编写一个计算机矩形的周长和面积的程序 操作步骤 方法一 基础篇 leight = int(input("输入矩形的长:")) width = int(input("输入矩 ...

  7. 如何用Python编写一个求 1到n阶乘之和的程序

    各位许久不见了,甚是想念! 前段时间我进入高中阶段学习,一直还没有适应,现在好些了就继续写博客了. 看到很多人关注我,点赞或是评论,我感觉太高兴了! C语言这块我暂时先放下了,我想自己学学Python ...

  8. 使用python做一个pdf转图片的可执行exe程序

    使用python做一个pdf转图片的可执行exe 1.安装环境 python3 模块:PymuPDF,pyinstaller import fitz import os import tkinterd ...

  9. 基于asyncio编写一个telegram爬虫机器人

    原文链接 前言 aiotg 可以通过异步调用telegram api的方式来构建bot,因为决定开发一个爬虫功能的bot,所以网络请求阻塞是比较严重的性能障碍.而asyncio的异步非阻塞特性能够完美 ...

最新文章

  1. python如何控制运行时间_python 限制函数执行时间,自己实现
  2. JAVA 实现 JWT
  3. js 加总数组中某一列_JS数组求和的常用方法实例小结
  4. 作者:孙忠富(1957-),男,中国农业科学院农业环境与可持续发展研究所研究员。...
  5. Magento教程 19:客户评论的审核与发布! (Pending Reviews)
  6. mybatis-plus如和获取当天得数据_MybatisPlus多数据源及事务解决思路
  7. 牛客第三场多校 H Diff-prime Pairs
  8. 速升级 Microsoft Word……且慢!
  9. C++标准库之stack
  10. python不能创建字典的是_python试卷-不能创建一个字典的语句
  11. 海康摄像机激活失败解决方法
  12. 打印机 linux 共享文件夹,linux 连接windows打印机
  13. html 各浏览器兼容性
  14. 蓝桥杯 - 历届试题 小朋友排队 C语言实现
  15. grep -v grep的作用
  16. 计算机技术考研科目大纲,2017计算机考研大纲:计算机大纲文字完整版
  17. 管理启示:“幸福的小狐狸”
  18. 电脑网络里面无法显示本计算机,电脑的本地连接不见了怎么办 电脑的本地连接不见了解决方法...
  19. 笑傲江湖ol更新服务器正在维护,笑傲江湖ol更新了什么内容 笑傲江湖ol更新内容一览...
  20. mysql删除数据带in条件_mysql使用delete from where in 删除时报错如何解决

热门文章

  1. 知识图谱 -- deepdive介绍与安装
  2. 解决:Svg图标,vue中使用 .svg 文件
  3. 大众迈腾车发动机偶尔无法起动?车主还说,故障好几天才会出现1次,一起来看看怎么回事吧!
  4. Python接口自动化测试框架(工具篇)-- 接口测试工具SoupUI
  5. 基于C51的DHT11(温湿度传感器)编程(详解)
  6. Mysql 配置文件 my.cnf 参数详情参考
  7. TP5.1框架中百度富文本编辑器UEditor的使用
  8. ngOnChanges的简单举例概述
  9. 【Spring Boot官方文档原文理解翻译-持续更新中】
  10. 查找计算机硬件故障,怎么检查电脑硬件故障问题?