赞
踩
几天前, 我母上大人在我们家群里发了一条消息
一看这文案, 就知道又是一个骗流量的小游戏, 一看就让人没什么兴趣... 但是出于对我母上大人的尊(hào)重(qí)我还是点进来看了一下
游戏链接:
游戏规则十分简单, 按顺序从1点到50
在25或者之前, 点完的数字方块会变成一个25之后的, 比如1点完可能变成37, 然后2变成41这样子
... 然后Sushi就开始了疯狂刷分
难啊!
然而我怎么能被这种小游戏难倒, 怎么都得进30秒吧
一定是我不适应手机, 用电脑试试!
"正常人, 做正常事"... 我的智商仿佛受到了歧视! 不可以!
多次尝试之后我发现这个游戏在你点错的时候没有任何惩罚, 继续点下去就好了, 于是乎我就开始扇我手机耳光
结果是啥都按不到, 玩了10多秒还没按到3...
很快我就开始寻找能全面按到屏幕的物品, 一无所获
就在这时, 我灵光一闪
我可以用selenium整个屏幕点过去!
SELENIUM
selenium 是一个浏览器自动化(Web Browser Automation)的程式. 可以通过代码来对一个网页进行一些操作, 例如点击, 滑动等等
很快就发现这个想法非常可行, 但是很智障, 我既然都自动化了, 直接搜索特定的方块点击不也可以么? 开肝!
我其实花了好久好久才真的开始, 因为我手欠的把macOS更新到了Catalina, 然后anaconda和之前安装的库啥的都没了, 其中也包括了selenium, 我一直尝试修复, 最后还是没有逃过重装conda的命运
珍惜生命, 请勿升级
正文
要使用的工具有:Python 3.x (我使用的是anaconda 3.7)
Selenium
编辑器: Atom
00
最开始肯定是先导入库
没有安装selenium的请 pip install selenium
from selenium import webdriver
01
新建一个driver, 我选择Chrome, 如果提示driver版本不兼容的话, 就需要重新下载Chrome Driver, 链接: https://chromedriver.storage.googleapis.com/index.html
from selenium import webdriver
driver = webdriver.Chrome()
02
打开网站...
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://wap.jue-huo.com/app/html/game/1to50/1to50.html")
03
循环, 从1到50, 这样之后我们就可以通过循环变量 i 来搜寻需要被点击的方块了
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://wap.jue-huo.com/app/html/game/1to50/1to50.html")
for i in range(1, 51):
pass
04
这时候我们需要寻找对应的数字方块并且点击
打开网页, 我们能看到每个颜色方块的样子是
我其实对html不怎么了解, 但是大概能看出数字在div里面
div里面除了数字还有一个span
div有一个style, 值为"opacity: 1;"
span可以不用理会, 我们需要点击的内容可以用两个条件筛选出来, 分别是style是 "opacity: 1"
内容为 数字
这时候就会用到一个很高大上的东西叫做xpath
在xpath里面, 通过这两个条件筛选的语句是:
//*[@style=\"opacity: 1;\" and text() = '{}'] # {}里面是当前数字
这时候可以把xpath另存为一个字符串变量, 但是我懒, 直接搜索了:
for i in range(1, 51):
driver.find_element_by_xpath("//*[@style=\"opacity: 1;\" and text() = '{}']".format(i))
上面这个语句返回的是一个web element
而我们要做的事情就是点他
和xpath一样, 可以重新把element赋值给一个变量, 但是我省一下行数, 直接在最后加上.click()好了
for i in range(1, 51):
driver.find_element_by_xpath("//*[@style=\"opacity: 1;\" and text() = '{}']".format(i)).click()
05
最后一步, 你们可能发现每次点完他有一个动画需要加载, 新的方块才会出来, 运气不好的话你点完25的时候26还没出现, 所以需要等待
可以判断等i到了25之后等待, 不过我就直接没点一次都等待了, 这里用的是python的time.sleep, 不过好像大佬们都建议用driver的implicit wait
完整代码:
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get("http://wap.jue-huo.com/app/html/game/1to50/1to50.html")
for i in range(1, 51):
driver.find_element_by_xpath("//*[@style=\"opacity: 1;\" and text() = '{}']".format(i)).click()
sleep(0.05) # removing this may make the program run faster, but the 26th div might not be loaded yet, which will make my code crash
结尾
代码特别简单, 到这里就结束了, 一个特别简单的脚本
同时也希望这个教程能帮助你们对selenium有一个简单的了解
好了我知道实际上代码不止5行, 但是import啥的不能算的嘛
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。