使用selenium编写一个斗鱼弹幕机器人,进行封装成exe程序
原本设想是使用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程序相关推荐
- 自己动手用Android和Xposed编写一个微信聊天机器人——《微信聊天精灵》实现关键词自动回复。
出于爱好和需要,想着自己来编写一个微信聊天机器人,能实现以下功能: 能实时获取到微信聊天消息: 能进行文本自动回复: 能够设置关键词: 能够根据关键词匹配,进行内容回复: 能实现聊天消息云端备份: 已 ...
- 322. 零钱兑换 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 你可以认为每
零钱兑换 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 你可以认为每种硬币的数量 ...
- 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1
/*** 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1.* 输入: coins = ...
- 习题:编写一个学生和教师数据输入和显示程序,学生数据有编号、姓名、班级和成绩,教师数据有编号、姓名、职称和部门。
完整题干: 编写一个学生和教师数据输入和显示程序,学生数据有编号.姓名.班级和成绩,教师数据有编号.姓名.职称和部门.要求将编号.姓名输入和显示设计成一个类person,并作为学生数据操作类stude ...
- 编写一个模拟航空客运定票系统的程序
原文地址:编写一个模拟航空客运定票系统的程序作者:木木女 实习报告 题目:2.7 编写一个模拟航空客运定票系统的程序 班级: 姓名: 学号:完成日期: 一. 需求分析: 1. 程序需要模拟航 ...
- 编写一个计算机矩形的周长和面积的程序 两种方法
编写一个计算机矩形的周长和面积的程序 操作步骤 方法一 基础篇 leight = int(input("输入矩形的长:")) width = int(input("输入矩 ...
- 如何用Python编写一个求 1到n阶乘之和的程序
各位许久不见了,甚是想念! 前段时间我进入高中阶段学习,一直还没有适应,现在好些了就继续写博客了. 看到很多人关注我,点赞或是评论,我感觉太高兴了! C语言这块我暂时先放下了,我想自己学学Python ...
- 使用python做一个pdf转图片的可执行exe程序
使用python做一个pdf转图片的可执行exe 1.安装环境 python3 模块:PymuPDF,pyinstaller import fitz import os import tkinterd ...
- 基于asyncio编写一个telegram爬虫机器人
原文链接 前言 aiotg 可以通过异步调用telegram api的方式来构建bot,因为决定开发一个爬虫功能的bot,所以网络请求阻塞是比较严重的性能障碍.而asyncio的异步非阻塞特性能够完美 ...
最新文章
- python如何控制运行时间_python 限制函数执行时间,自己实现
- JAVA 实现 JWT
- js 加总数组中某一列_JS数组求和的常用方法实例小结
- 作者:孙忠富(1957-),男,中国农业科学院农业环境与可持续发展研究所研究员。...
- Magento教程 19:客户评论的审核与发布! (Pending Reviews)
- mybatis-plus如和获取当天得数据_MybatisPlus多数据源及事务解决思路
- 牛客第三场多校 H Diff-prime Pairs
- 速升级 Microsoft Word……且慢!
- C++标准库之stack
- python不能创建字典的是_python试卷-不能创建一个字典的语句
- 海康摄像机激活失败解决方法
- 打印机 linux 共享文件夹,linux 连接windows打印机
- html 各浏览器兼容性
- 蓝桥杯 - 历届试题 小朋友排队 C语言实现
- grep -v grep的作用
- 计算机技术考研科目大纲,2017计算机考研大纲:计算机大纲文字完整版
- 管理启示:“幸福的小狐狸”
- 电脑网络里面无法显示本计算机,电脑的本地连接不见了怎么办 电脑的本地连接不见了解决方法...
- 笑傲江湖ol更新服务器正在维护,笑傲江湖ol更新了什么内容 笑傲江湖ol更新内容一览...
- mysql删除数据带in条件_mysql使用delete from where in 删除时报错如何解决
热门文章
- 知识图谱 -- deepdive介绍与安装
- 解决:Svg图标,vue中使用 .svg 文件
- 大众迈腾车发动机偶尔无法起动?车主还说,故障好几天才会出现1次,一起来看看怎么回事吧!
- Python接口自动化测试框架(工具篇)-- 接口测试工具SoupUI
- 基于C51的DHT11(温湿度传感器)编程(详解)
- Mysql 配置文件 my.cnf 参数详情参考
- TP5.1框架中百度富文本编辑器UEditor的使用
- ngOnChanges的简单举例概述
- 【Spring Boot官方文档原文理解翻译-持续更新中】
- 查找计算机硬件故障,怎么检查电脑硬件故障问题?