怎么刷色弱测试高分(我可能是有病才会写这个)
Posted 宫水二叶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么刷色弱测试高分(我可能是有病才会写这个)相关的知识,希望对你有一定的参考价值。
文章目录
色弱测试链接
https://xingye.me/game/colortest/index.html色弱测试链接
代码刷高分
鼠标点击法
色弱测试即是n*n的方块里面有一个方块和其他的方块颜色不同,我们找出这个方块并点击,就会跳到下张图片并获得1分。
我首先想到的是利用鼠标依次点击每个方块,只要鼠标点击的够快,我们就能快速得分。
方块的总体区域没有变化,一开始是4*4,最后会变成9*9,那我们直接设计81个点击区域,让鼠标依次点击即可。
效果演示
色弱测试click
运行代码前需要先获取第一个方块和最后一个方块的位置,然后生成81个方块的位置。
然而鼠标点击和移动的速度是有限制的,不可能一瞬间点击81个地方,因此这种方法虽然有效,但只能刷到60分左右
selenium识别元素法
既然鼠标点击速度有限制,我们不妨直接获取方块的颜色,选中所需的方块直接点击就行了。我们直接使用python的selenium模块获取元素的属性(右键元素,点击检查,既可以看到相应元素)。
可以看到方块的style属性即包含了元素的RGB值。
右键copy xpath,再利用下面这行代码即可以得到元素的style属性
(不会用selenium的建议搜一下怎么配置和使用,我这里用的是selenium2.x,不同版本代码有差异)
xpath = '//*[@id="box"]/span[1]'
color = driver.find_element_by_xpath(xpath).get_attribute("style")
然后既是依次获取每个方块的颜色,找到颜色不同的方块直接点击就行,这样每张图片相当于识别n次(n>=3,因为至少要识别三个方块才能判断哪个方块是应该点击的),点击1次
效果演示
chrome_click
识别元素和网站反应都需要时间,所以分数也是有上限的,经过我测试,能过达到130+
相关代码
position.py,用来确定第一个方块和最后一个方块的位置,得到位置后在click.py代码中修改
import os, time
import pyautogui as pag
while 1:
try:
print("Press Ctrl-C to end")
x, y = pag.position() # 返回鼠标的坐标
posStr = "Position(x,y):" + str(x).rjust(4) + ',' + str(y).rjust(4)
print(posStr) # 打印坐标
pix = pag.screenshot().getpixel((x, y))
print(pix)
time.sleep(0.5)
except Exception as e:
print('end....%s' % e)
finally:
pass
click.py,依次点击81个方块的位置(注意修改xs和ys,需要用positipn.py获取位置)
import pyautogui
import time
import sys
def make(start, end, nums):
interval = (end - start) / (nums - 1)
ans = [int(start + interval * i) for i in range(nums)]
return ans
print("屏幕分辨率:", pyautogui.size())
print("鼠标位置:", pyautogui.position())
pyautogui.PAUSE = 0.0001 # 设置每次执行暂停时间
xs = make(860, 1305, 9)
ys = make(267, 707, 9)
xs = xs[::2]+xs[1::2]
ys = ys[::2]+ys[1::2]
start = time.time()
# time.sleep(1)
num = 0
num_seconds = 0.0001 # 将鼠标移动到指定坐标的间隔时间
while 1:
for x in xs:
for y in ys:
pyautogui.moveTo(x, y) # 把鼠标移动到(500,500)
pyautogui.click() # 在原地按鼠标左键
if time.time() - start > 61:
sys.exit()
chrome_rgb.py,识别颜色并点击方块的代码,需要配置selenium和chrome驱动
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait # WebDriverWait 库,负责循环等待
from selenium.webdriver.support import expected_conditions as EC # expected_conditions 类,负责条件出发
import time
driver = webdriver.Chrome()
driver.get('https://xingye.me/game/colortest/index.html')
# element = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.XPATH, '//*[@id="index"]/div[2]/button')))
driver.find_element_by_xpath('//*[@id="index"]/div[2]/button').click()
start = time.time()
all = 0
while True:
try:
index = [1]
nums = [1]
colors = [driver.find_element_by_xpath('//*[@id="box"]/span[1]').get_attribute("style")]
for j in range(2, 82):
xpath = '//*[@id="box"]/span[%d]' % j
color = driver.find_element_by_xpath(xpath).get_attribute("style")
if color not in colors:
colors.append(color)
nums.append(1)
index.append(j)
else:
if color == colors[0]:
nums[0] += 1
else:
nums[1] += 1
if len(nums) == 2:
if nums[0] == 1 and nums[1] == 1:
continue
else:
all += 1
if nums[0] == 1:
xpath = '//*[@id="box"]/span[%d]' % index[0]
driver.find_element_by_xpath(xpath).click()
else:
xpath = '//*[@id="box"]/span[%d]' % index[1]
driver.find_element_by_xpath(xpath).click()
break
finally:
if time.time() - start > 61:
print(all)
break
else:
continue
以上是关于怎么刷色弱测试高分(我可能是有病才会写这个)的主要内容,如果未能解决你的问题,请参考以下文章
echarts堆叠图tooltip中如何仅展示鼠标当前位置相应的指标数据
去面试字节前端,竟然考算法,是不是有病?算法如何刷题?全文高能!倾心整理建议收藏!