最近公司开发内部使用的自动化程序,使用到了selenium、pyautogui和autoxjs。
selenium进行网页元素操控的过程中,遇到了很多的坑,包括目标网站的反爬虫机制问题、页面跳转过程中dom的实际加载问题、XPATH的实际查找问题等等, 看了很多selenium webdriver操控chrome的教程,基本上大部分是雷同的,针对反爬虫方面的策略几乎完全没有写到过,很怀疑写文章的是不是真正用selenium做过项目。最后还是在chatgpt的帮助下,反反复复不断去尝试,才比较妥善的解决了这些问题。
由于本人还没有整理好selenium反反爬虫等的相关的资料,本文并不打算介绍这块的实战经验,而是介绍如何用autoxjs进行云控,获取数据的问题。网络上关于autoxjs从云端进行数据操作的文章并不多,希望这篇文章能够对需要的人有所帮助。
一、前期准备
由于前期的数据存储在Bmob后端云,所以我这边需要从Bmob后端云获取到application id和rest key信息。
此外,还要了解Bmob后端云的数据API接口文档。
二、创建封装的类文件bmobsdk.js
下面的这个类直接从github中相关的项目中改造出来的,市面上看到的代码都不能用,所以就自己改动了一下。
function Bmob(url, appId, restKey) {
this.baseUrl = url;
this.appId = appId;
this.restKey = restKey;
}
Bmob.prototype.makeRequest = function (method, url, json, sessionToken, callback) {
url = this.baseUrl + url;
var options = {};
options.contentType = "application/json";
options.method = method;
if (json) {
options.body = JSON.stringify(json);
}
sessionToken = sessionToken || "";
options.headers = {
"X-Bmob-Application-Id": this.appId,
"X-Bmob-REST-API-Key": this.restKey,
"Content-Type": "application/json",
}
return http.request(url, options, callback);
}
// 添加数据
Bmob.prototype.createObject = function (className, data) {
return this.makeRequest("POST", "/classes/" + className, data).body.json();
}
// 查询表数据
Bmob.prototype.getObjects = function (className) {
return this.makeRequest("GET", "/classes/" + className).body.json();
}
// 查询ID数据
Bmob.prototype.getObject = function (className, id) {
return this.makeRequest("GET", "/classes/" + className + "/" + id).body.json();
}
//条件查询
Bmob.prototype.queryObject = function (className, data) {
let url = encodeURI(util.format('/classes/%s/?where=%j', className, data));
return this.makeRequest("GET", url, null).body.json();
}
// 更新数据
Bmob.prototype.updateObject = function (className, objectId, data) {
return this.makeRequest("PUT", "/classes/" + className + "/" + objectId, data).body.json();
}
// 删除数据
Bmob.prototype.deleteObject = function (className, data) {
var id = typeof (data) == "string" ? data : data.objectId;
return this.makeRequest("DELETE", "/classes/" + className + "/" + id).body.json();
}
module.exports.Bmob = Bmob
三、引用bmobsdk.js类
有了这个类,我们就可以在我们的主程序中使用了,下面仅仅演示从Person表中获取全部数据,打印在日志文件中。
var {
Bmob
} = require('bmobsdk.js');
var b = new Bmob('https://api.codenow.cn/1', '3315840d184f17036594d2f265ba39e0', '10e012d17a82e7454a0ee79cf1cf195f');
log(b.getObject('Person'));
最终效果如下:
欢迎有兴趣研究云控或者自动化的朋友沟通交流。