概述
之前写过一个轻量的天眼查的Quicker动作,可以很快查询到天眼查的一些公司的公开数据,但访问频率过高的话,会被风控,必须要登录才能继续操作,不过之前的方式很难实现登录并刷新验证信息。
天眼查这种网站的反爬做得其实非常好,想要破解验证信息实在有些困难,所以,我采用了另外一种技术栈,既然你不让我通过接口爬,那我就”正正当当“去访问你网页,但是,没有界面的哪种,而且,支持登录和保留登录信息。所有的验证处理,都交给浏览器本身去处理了,不需要我再额外处理。
最终达到的效果,其实和之前版本的企业查询差不多,都是选中文本,然后进行查询,显示结果。
动作网址:企业查询(天眼查)V2 – by SoloShine/Field – 动作信息 – Quicker (getquicker.net)
希望这个示例能帮助到相关开发者。
效果演示
技术栈
Quicker + Selenium + C#/.NET + Javascript + WebDriver(Edge/Chrome)
设计思路
基础库
要实现后台无头浏览器控制,目前主流的是采用Selenium+WebDriver,Quicker本身两者都不支持,想要让其支持,在不动源码的情况下,只有用户自己添加依赖了。
所以,我设计了一个从nuget中获取.net指定版本包dll的子程序,原理很简单,nuget打包本质上也算zip压缩包,解压后提取需要的dll文件并添加到动作调用域即可。具体可查看 装载Nuget包内容(子程序) – 子程序信息 – Quicker (getquicker.net) 。
浏览器控制驱动
拿到需要并装载了对应的dll后,即可在程序中进行调用了,nuget主要是.net包,使用c#脚本是最方便和合适的,在visual studio调试好后,拿到Quicker中运行,发现会报错,无法调用”selenium.webdriver“的”selenium-manager.exe“文件(在vs中,会自动调用这个文件,实现对其他浏览器的控制,可以不用WebDriver)。
想要控制的话,还得指定浏览器的webdriver驱动才行,需要用户自己去安装webdriver。下载浏览器的WebDriver驱动,将可执行文件放在浏览器安装目录,目前只测试了两个浏览器的调用,最新连接放在下面,可以根据自己浏览器版本进行下载,
WebDriver for Edge浏览器:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/,
WebDriver for Chrome:https://getwebdriver.com/;
从程序设计的角度来说,可以实现自动下载,免去手动下载和复制到浏览器安装位置的操作,但会出现一些问题,最明显的就是版本匹配,有些人使用浏览器是本着”能用就不更新“的逻辑,不去更新,而有的人是更新得特别快,甚至用的内侧版、开发版、金丝雀版本,这样是很不好匹配的。
业务逻辑
从天眼查提取信息的逻辑很简单,参考之前的版本:企业查询(天眼查) – by SoloShine/Field – 动作信息 – Quicker (getquicker.net) ,和之前不同之处只有验证和查询。
这里主要说,关于无头浏览器的逻辑:
- 访问查询网页
- 若需要登录验证,则退出无头模式,显示界面,提示登录,登录后重新打开无头模式继续查询;
- 提取查询到到第一个条目(最佳结果);
- 访问该条目,进入网页详情;
- 提取数据节点、返回数据并关闭浏览器调试;
浏览器需要做的内容很简单,拿到数据后的处理回到Quicker即可,json的提取和展示这里就不专门解释了。
但该说不说,天眼查把说有的数据放到一个节点,属实是艺高人胆大了。
注意事项
- 第一次运行动作时候,动作会下载两个Selenium的包,装载到Quicker运行目录,用于调用WebDriver。由于Quicker软件安装在系统目录时候,其运行目录需要管理员权限才能访问,所以会弹出来管理员权限确认窗口,点确定即可;
- 在运行动作时候,务必确保对应浏览器没在运行,且后台已被清理,不然WebDriver会无法调用,这也算是无头浏览器的一个缺陷,不能和界面同时运行;
- 关于传递参数,如果你不清楚你填入内容的意思,以及可能造成的影响,能不使用就不使用,即使要使用,使用后也记得清理,因为其会在下一次调用中也生效,如果你忘了清理(比如包含地区参数),你下一次查询(一个不在设定区域的内容)便可能会没有记录;
作者联系方式
邮箱:soloshine.cfh@foxmail.com
QQ:1393409895
接全栈定制,解决方案+实施