技术标签: 爬虫 python selenium 软件测试 google drive
# 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
文章浏览阅读210次。首先,检查你的ROS,确定他本身没有任何问题。然后,打开你的WINBOX登陆进去,打开防火墙规则,IP-FIREWALL-CONNECTIONS-TRACKING好了。打开TRACKING后,将里面的时间设置稍微大点。具体多大,没有确切数字,不过一定要大。最少也得30秒以上。你按照里面的默认,成倍数增加,慢慢试。下面是我自己的设置。已经没有问题了,具体什么原因,慢慢去体会。这个设置不是固定的。因为..._ros wan口断流
文章浏览阅读8.2w次,点赞17次,收藏77次。问题描述:Error starting ApplicationContext. To display the conditions report re-run your application with ‘debug’ enabled.或者:The Tomcat connector configured to listen on port 7001 failed to start. The po..._to display the conditions report re-run your application with 'debug' enable
文章浏览阅读233次。在新经济发展态势下,#中小企业数字化转型#是大势所趋!
文章浏览阅读2.2k次。我在使用multiprocessing库创建进程的时候,发现了这么一个问题:https://docs.python.org/3.5/library/multiprocessing.html#multiprocessing.Process中对于terminate函数的文档中说:Note that exit handlers and finally clauses, etc., will not be..._process.terminate()
文章浏览阅读180次。在ts中,泛型允许在定义函数、接口类和类型别名时,不预先指定具体类型,而是在使用时指定。以达到增加代码复用性和代码安全性的目的。下面举几个例子。
文章浏览阅读246次。链路层上最常见的封装就是以太网和IEEE 802封装,这里就使用以太网作为讲解的对象。一、概述 数据链路层属于计算机网络的底层,使用的信道主要有点对点信道和广播信道两种类型。 在TCP/IP协议族中,数据链路层主要有三个目的: 1)为IP模块发送和接收数据 2)为ARP模块发送ARP请求和接收ARP应答 _trdp数据链路层帧格式
文章浏览阅读160次。1、引言随着GPS技术的发展,在大地测量、工程测量、地球动力学、GPS气象学等多种学科中得到广泛的应用,精密解算GPS观测数据的软件也得到了重视与发展。国内外开发了许多GPS数据处理软件,主要有著名的美国麻省理工学院(MIT)和斯克里普斯海洋研究所(SIO)开发的GAMIT软件,美国宇航局(NASA)喷气推进实验室(JPL)研发的GIPSY-OASIS软件,以及瑞士伯尔尼大学天文研究所研制的BER..._由arc(轨道积分)、model(组成观测方程)、sincln(单差自动修复周跳)、dblcln(双差
文章浏览阅读849次,点赞19次,收藏12次。综上所述,环保小卫士APP的开发不仅可以满足公众对环保知识和行动的需求,还可以促进环保事业的发展,提高社会的环保意识和行动水平。通过利用前端技术(HTML+CSS+JavaScript+Vue)、后端技术(Node.js+Express)和数据库(MySQL 5.7),结合开发工具(VSCode和Navicat),我们可以构建一个功能强大、用户友好的环保小卫士APP,为用户提供全面的环保服务和指导。其次,该应用可以促进环保活动的组织和参与,鼓励人们积极参与到环保事业中,共同为环境保护做出贡献。
文章浏览阅读42次。仓库标签V1.2基站——系统结构
文章浏览阅读1k次,点赞19次,收藏7次。如何使用react框架进行两个html页面的切换?_react页面跳转
文章浏览阅读106次。然后,我们使用三角函数计算每个角度对应的x和y坐标,并在z轴上生成一系列为0的坐标,以形成平面点云。最后,我们将x、y和z坐标合并为一个点云数组,并使用。Open3D是一个用于处理三维数据的开源库,它提供了各种功能,包括点云处理和可视化。在本文中,我们将使用Open3D来绘制一个圆形点云。接下来,我们设置了圆形点云的半径、中心坐标和点的数量。最后,我们创建了一个可视化窗口,并将点云添加到可视化器中。然后,我们运行可视化器,显示圆形点云。,该函数根据给定的半径、中心和点的数量创建一个圆形点云。_open3d怎么生成圆点状点云
文章浏览阅读9k次,点赞13次,收藏27次。一、枚举类的概述1.枚举类的理解:类的对象只有有限个,确定的。我们称此类为枚举类2.当需要定义一组常量时,强烈建议使用枚举类3.如果枚举类中只一个对象,则可以作为单例模式的实现方式。二、枚举类中的常用方法values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是,会有运行时异常:IllegalArgumentException。toString_枚举类