【项目预览】

【创作背景】

这是我的每日工作的一项,登录YK网站后台,把前一天的所有职业棋谱都用“鹰眼”(一个围棋AI)跑一遍,然后发布。头一天比赛不多的时候,这工作挺简单的,几分钟就搞定了。但如果赶上大赛,第二天就要分别点进一张列表里的几十个网页去操作,对于重度懒癌的我来说,还是挺烦的。

在学习selenium之前,我从来没有想过这项要用鼠标挥来挥去的重复劳动也能用python解决。。。

【过程分析】

这是我的日常工作,对于大部分人来说,没有什么参考价值。所以我介绍的简略一点,讲讲重难点就行(不自觉就敲起了黑板):

难点1:登录验证码。识图太难了,我决定绕过这个坑,人机结合,我手动输入验证码。

难点2:加载了第一张显示所有对局的总表网页之后,我需要对这个表进行“按热度排序”,“按直播类型排序”的操作,但我不管怎么尝试,selenium都无法有效的操作这个表格。这个问题一度难倒了我,后来我想通了:验证码我可以手动输入,排序也可以手动啊!设置一个input函数让程序暂停,等我排好序再继续,这个问题就迎刃而解。

难点3:总表整理好之后,点击每一局棋的链接,会产生一个新的网页,我需要在新网页上操作,操作完之后,我该怎么回去呢?难道我要重新加载总表网页,重新排序?NO~NO~NO~ 我设置两个driver,一个加载总表,一个加载各棋谱网页,两个都登录一遍,输入两次验证码,就解决了。

难点4:操作的最后一步,是“保存”。不知道YK网站怎么设计的,这个“保存”键,死活不能click()。我都操作到最后一步了,你跟我说无法保存??我气的跑去演了两局巅峰赛,忽然灵光一闪,万能的“人机结合”大法啊!我只要写一句 time.sleep(3),然后在3秒内手动点击保存,不就完事了吗?还能人工筛选掉一些人气很高的非职业棋谱。啊,太完美了!

【完工感受】

“人机结合”大法好!虽然我的python知识可能欠缺(毕竟只学了2个月),有一些别人能轻松实现的功能,对我来说就是死活迈不过去的坎。但只要我有灵活的思维,解决问题的办法从来不止一种啊!

这个项目还有一点我理解不了的地方:我是用IDLE写的代码,在IDLE里,用ctrl+F5,这个程序是可以正常运行的。但我从桌面双击这个py文件,每次到了手动输入验证码的地方,就运行不下去了。直到现在,我都不知道这是为什么。如果浏览这篇文章的你,能够帮我解答这个疑问,请留言指导。谢谢啦!报错信息如下:

ERROR:device_event_log_impl.cc(214)] [13:49:55.870] USB: usb_device_handle_win.cc:1054 Failed to read descriptor from node connection.(0x1F)

【补充】

上面的问题解决了,我把报错信息复制粘贴去百度搜了一下,果然,遇到问题的不止我一个人,有高手早就破解了这个问题。

在chrome启动的时候加入以下代码(高手说,这是暴力解决的办法):

option = webdriver.ChromeOptions()
# 防止打印一些无用的日志
option.add_experimental_option("excludeSwitches", ['enable-logging'])
driver = webdriver.Chrome(chrome_options=option)

【完整代码】

from selenium import webdriver
import time,datetimeprint('\n棉花糖偷懒项目之——自动跑鹰眼。\n\n注意!!!鹰眼界面弹出后,需要在3秒钟之内手动点击“保存”。')
day=input('\n请输入日期,格式yyyy-mm-dd:')path0='https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' #不展示了,这是俺的工作网站
option = webdriver.ChromeOptions()
# 防止打印一些无用的日志
option.add_experimental_option("excludeSwitches", ['enable-logging'])driver = webdriver.Chrome(chrome_options=option)
driver.get(path0)
time.sleep(2)box0=driver.find_element_by_id('defaultForm')
box123=box0.find_elements_by_class_name('form-control')
n=0
for i in box123:n+=1if n==1:i.send_keys('my username')elif n==2:i.send_keys('my password')else:i.send_keys(input('\n输入验证码:'))sub=driver.find_element_by_id('embed-submit')
sub.click()
time.sleep(1)path1='https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
driver.get(path1)
time.sleep(2)start=driver.find_element_by_id('begin_date')
start.send_keys(day)
end=driver.find_element_by_id('end_date')
end.send_keys(day)
search=driver.find_element_by_id('btn_search')
search.click()
zan_set=int(input('\n请手动选择显示100项,类型为“推荐”,并按关注数降序排序。\n然后根据实际情况输入关注数下限(不知道多少就写10000):'))#---------------打开第二个浏览器(用于加载每一盘棋的页面)------------------driver1 = webdriver.Chrome(chrome_options=option)
driver1.get(path0)
box0=driver1.find_element_by_id('defaultForm')
box123=box0.find_elements_by_class_name('form-control')
n=0
for i in box123:n+=1if n==1:i.send_keys('my username')elif n==2:i.send_keys('my password')else:i.send_keys(input('\n输入验证码:'))sub=driver1.find_element_by_id('embed-submit')
sub.click()
time.sleep(1)#---------------回到主浏览器------------------items=driver.find_elements_by_class_name('updatePersonTimes')
for i in items:zan=i.get_attribute('data-praise')zan=int(zan)if zan>zan_set:idd=i.get_attribute('data-id')href="https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/id/"+iddprint(href)driver1.get(href)    yy=driver1.find_element_by_id('btn_hawkeye')yy.click()time.sleep(3)driver1.close()
print('\n运行完毕。')

本来不想展示代码了,反正这是我的工作,跟你们也没啥关系。但想想没代码还是不完整,写在这里就当备份吧!

【云云怪】第7个项目:自动跑鹰眼相关推荐

  1. [Gitlab]使用Webhook实现前端项目自动发布

    喜闻乐见的背景故事时间--承接[prerender-spa-plugin]--微型Vue项目的静态化利器,官网上线之后,就开始琢磨,每次改动都得上服务器部署一下,是不是有点麻烦了,是时候该整个自动化部 ...

  2. 有没有办法为Node.js项目自动构建package.json文件

    本文翻译自:Is there a way to automatically build the package.json file for Node.js projects Is package.js ...

  3. 【AirTest实例】1.使用脚本自动跑通游戏引导

    本人测试岗位,在项目不是很忙的时候,还是想写一个可以自动跑的游戏脚本.挂着游戏能够代替一些手动的测试,并且闲时晚上下班的时候挂着手机,第二天再来看报告日志,算是物尽其用了.前期脚本基础功能是要在编辑器 ...

  4. [转]Eclipse中的Web项目自动部署到Tomcat

    原文地址:http://www.cnblogs.com/ywl925/p/3815173.html 原因 很长时间没用Eclipse了,近期由于又要用它做个简单的JSP项目,又要重新学习了,虽然熟悉的 ...

  5. ant+svn+tomcat实现项目自动部署

    因工作需要,研究并实现了 ant+svn+tomcat实现项目自动部署,其中参考了下面文章:http://www.cnblogs.com/taoweiji/p/3700915.html jar包需要e ...

  6. 2020-12-14 Python PyCharm新建项目自动添加介绍和utf-8编码

    Python PyCharm新建项目自动添加介绍和utf-8编码 你是不是觉得每次新建项目都要写一次# coding:utf-8,感觉特烦人 呐!懒(fu)人(li)教程来啦,先看效果图吧 如图进入设 ...

  7. myeclipse + tomcat 项目自动部署

    在MyEclipse中设置项目的自动部署需要综合考虑两个方面: 1是MyEclipse本身,通过主菜单中project->auto ,另一个就是tomcat配置文件.配置文件包括 conf 下的 ...

  8. 用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档

    Swagger是一个描述RESTful的Web API的规范和框架.如果使用ASP.NET的话,可以用Swashbuckle来自动生成Swagger,具体参考如何使 WebAPI 自动生成漂亮又实用在 ...

  9. Jenkins+Github+Nginx实现前端项目自动部署

    Jenkins+Github+Nginx实现前端项目自动部署 前言 最近在搭建一个自己的网站,网站框架搭好了要把项目放到服务器运行,但是每次更新网站内容就要手动部署一次,实在很麻烦,于是就想搭建一套自 ...

最新文章

  1. php 派生类 数据库连接 单例模式 xhprof实测 高效连接
  2. Java 对synchronized的补充Lock锁
  3. Unity3D心得分享
  4. 分析uboot中 make xxx_config过程
  5. 一文看懂哈夫曼树与哈夫曼编码
  6. python写入指定行_python文件操作如何写在指定的行
  7. 高数篇(三)-- 最小二乘法、正则化
  8. php人民币转换,PHP 转换人民币数字为大写
  9. K线技术指标实现详解—ENE
  10. 观点|蚂蚁金服玉伯:我们是如何从前端技术进化到体验科技的?
  11. UGUI-- Canvas Scaler 分辨率自适应组件
  12. 老男孩MySqI DBA周末班(三期)
  13. 【QTdesigner】课时36.使用QTextEdit控件输入多行文本【pyqt5+QTdesigner模式】
  14. 微信开发实战(2)—微信公众平台接口调试工具
  15. aws lambda使用_使用AWS Lambda,无服务器框架和Go的按需WebSockets
  16. iOS 自定义推送铃声问题
  17. 硬盘中单击auto病毒的清理
  18. 阿里云超算战纪 | 凌云时刻
  19. 模拟地与数字地、磁珠、电感
  20. Phpyun系统vip第三方短信接口插件适配方法适合v6.1至v6.2

热门文章

  1. Unity Shader - ShaderLab: Culling Depth Testing 剔除与深度测试
  2. 线段划分再分辨”的问答
  3. 腾讯电脑管家2015 v10.6 官方版
  4. Linux ubuntu-18内核版本降级error: macro access_ok passed 3 arguments, but takes just 2
  5. 怎样在Word2007里设置首页不显示页码,第二页页码从“2”开始显示?
  6. ZED2相机标定--双目、IMU、联合标定
  7. 服务器装linux加载raid驱动,DELL R420服务器安装CentOS7 系统加载驱动H310 mini RAID卡...
  8. 项目日记(在线办公项目)day2021/03/02
  9. 手把手教你3D打印机怎么使用,所需要的软件支持
  10. linux vim 前端开发,一个前端开发工程师的 Vim 跟 IDE 一样