前言今天完成了一个最近的应用,测试运行没有任何问题,剩下的就是查看结果了。从频谱到Lab值,一般都是用matlabroo2lab(),但是经过我最近的测试,发现转换结果并不理想,转换代码也不是我写的,于是另辟蹊径,发现如下网页。手头有了这个网页,很容易想到解析它。然后很快就找到了这个api,可以看到用post提交表单请求是可以返回结果的。于是做了一些操作,修改了form表单,构造了传入的谱,但是最终请求的是一个页面,不是想要的json。然后懊恼自己好久没写爬虫了,想到了一个自动化的工具来模拟运行。但是selenium很难用,还得找新版浏览器的驱动。然后直接搜索,找到了这个神器——剧作家。首先去它的主页看教程,然后安装playwright和浏览器驱动。pipinstallpytest-playwrightplaywrightinstall的第二步很慢,我就等着他下载完chrome和ffmpegctrl+c就停了。毕竟,我不需要其他浏览器驱动程序。然后稍微浏览一下这个文档,功能很丰富,但是功能我用的不多,下次使用真的很适合我们这些懒人。记住一行代码python-mplaywrightcodegenxxx.com其中xxx.com是我们的目标URL,运行后会创建一个熟悉的自动化页面,然后我们进行一些我们想要的操作,比如设置最小波长启动为400nm,然后观察并将光源更改为D65/10。经过一系列的操作,你会看到相应的代码已经生成了。到目前为止,我还没有写过一行代码,但构建输入频谱必须由我自己完成。复制这段代码,然后写构造输入的函数(就几行),然后通过selector获取lab值(直接左击元素复制xpath),这样目标就完成了。整体代码如下:importtimefromplaywright.sync_apiimportPlaywright,sync_playwright,expectimportnumpyasnpdata_test=np.loadtxt('./dist/1_res.csv',delimiter=',')defget_str(arr):arr_str=""for我在arr:arr_str+=str(format(i,".2f"))+"\r\n"returnarr_strlabs=[]defrun(playwright:Playwright)->None:browser=playwright.chromium.launch(headless=False)context=browser.new_context()#打开新页面page=context.new_page()#转到https://www.qtccolor.com/secaiku/tool/spectrumpage.goto("https://www.qtccolor.com/secaiku/tool/spectrum")#点击div[role="tab"]:has-text("光谱数据")page.locator("div[role=\"tab\"]:has-text(\"光谱数据\")).click(#点击text=最小波长:nmpage.locator("text=最小波长:nm").click()#填充[placeholder="\3380"]页面.locator("[placeholder=\"\\3380\"]").fill("400")#选择1964page.locator("select[name=\"obs\"]").select_option("1964")#选择D65page.locator("select[name=\"ill\"]").select_option("D65")#Filltextarea[name="spectrum"]foriinrange(len(data_test)):inputs=get_str(data_test[i,:])#点击textarea[name="spectrum"]page.locator("textarea[name=\"spectrum\"]").click()page.locator("textarea[name=\"spectrum\"]").press("Control+a")page.locator("textarea[name=\"spectrum\"]").fill(inputs)#点击button:has-text("转换颜色")page.locator("button:has-text(\"转换颜色\")").click()time.sleep(1)#点击text=Lab0.000.000.00>>td>>nth=1L=float(page.locator('xpath=//*[@id="scroll_container"]/div[1]/div/div[2]/table/tbody/tr[2]/td[2]').inner_text())#点击text=Lab0.000.000.00>>td>>nth=2a=float(page.locator('xpath=//*[@id="scroll_container"]/div[1]/div/div[2]/table/tbody/tr[2]/td[3]').inner_text())#点击text=Lab0.000.000.00>>td>>nth=3b=float(page.locator('xpath=//*[@id="scroll_container"]/div[1]/div/div[2]/table/tbody/tr[2]/td[4]').inner_text())print(L,a,b)labs.append([L,a,b])#------------------context.close()browser.close()withsync_playwright()asplaywright:run(playwright)np.savetxt('./1_lab_res.csv',labs,delimiter=",")可以说从安装到实现只需要几分钟,非常容易使用。这是我第一次使用它。效果可以实现了,剩下的就是简单的写一个计算色差的函数,没什么难度。说到底,各大厂商生产的产品,真的是千差万别。使用它可以在不考虑运行效率的情况下轻松实现复杂的操作(有异步但是懒得看),是懒人的最爱!
