注册 登录
发贴工具
查看: 5|回复: 0
打印 上一主题 下一主题

[24小时收录超级好的网站] AIWROK手机数据库MySQL数据库截图片批量上传操作脚本

[复制链接]

2443

主题

2491

帖子

1万

积分

积分
14862
跳转到指定楼层
楼主
AIWROK手机数据库MySQL数据库截图片批量上传操作脚本


AIWROK手机数据库MySQL数据库截图片批量上传操作脚本 群发软件发帖工具

  1. //🍎交流QQ群711841924群一,苹果内测群,528816639
  2. // AIWROK软件数据库图片批量上传操作脚本
  3. // 实现读取本地图片、转换为Base64、上传到数据库、以及从数据库还原图片的功能

  4. print.log("===== 数据库图片上传操作脚本开始 =====");

  5. var conn = null;
  6. var pstmt = null;

  7. /**
  8. * Java原生方法:将文件转换为Base64字符串
  9. */
  10. function fileToBase64(filePath) {
  11.     try {
  12.         var file = new java.io.File(filePath);
  13.         if (!file.exists()) {
  14.             return null;
  15.         }
  16.         
  17.         var fis = new java.io.FileInputStream(file);
  18.         var buffer = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, 1024);
  19.         var bytesRead = 0;
  20.         var byteBuffer = [];
  21.         
  22.         while ((bytesRead = fis.read(buffer)) != -1) {
  23.             for (var i = 0; i < bytesRead; i++) {
  24.                 byteBuffer.push(buffer[i]);
  25.             }
  26.         }
  27.         
  28.         fis.close();
  29.         
  30.         var bytes = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, byteBuffer.length);
  31.         for (var i = 0; i < byteBuffer.length; i++) {
  32.             bytes[i] = byteBuffer[i];
  33.         }
  34.         
  35.         return android.util.Base64.encodeToString(bytes, android.util.Base64.NO_WRAP);
  36.     } catch (e) {
  37.         print.log("❌ 文件转Base64失败: " + e.message);
  38.         return null;
  39.     }
  40. }

  41. /**
  42. * Java原生方法:检查文件是否存在
  43. */
  44. function fileExists(filePath) {
  45.     return new java.io.File(filePath).exists();
  46. }

  47. /**
  48. * Java原生方法:获取文件大小
  49. */
  50. function fileLength(filePath) {
  51.     return new java.io.File(filePath).length();
  52. }

  53. /**
  54. * Java原生方法:获取文件名
  55. */
  56. function getFileName(filePath) {
  57.     return new java.io.File(filePath).getName();
  58. }

  59. /**
  60. * 连接数据库
  61. */
  62. function connectDatabase() {
  63.     try {
  64.         var url = "jdbc:mysql://38.12.31.15:3306/dddfguu";
  65.         var user = "dddfguu";
  66.         var password = "rAXyhnNkiNsChJ8e";
  67.         var params = "?useSSL=false&characterEncoding=utf8&connectTimeout=5000";
  68.         
  69.         print.log("正在连接数据库...");
  70.         conn = mysql.getConnection(url, user, password);
  71.         print.log("✅ 数据库连接成功");
  72.         return true;
  73.     } catch (e) {
  74.         print.log("❌ 数据库连接失败: " + e.message);
  75.         return false;
  76.     }
  77. }

  78. /**
  79. * 创建图片存储表
  80. */
  81. function createImageTable() {
  82.     try {
  83.         var sql = "CREATE TABLE IF NOT EXISTS images (" +
  84.                   "id INT AUTO_INCREMENT PRIMARY KEY, " +
  85.                   "name VARCHAR(255) NOT NULL, " +
  86.                   "path VARCHAR(500), " +
  87.                   "image_data LONGBLOB, " +
  88.                   "file_size INT, " +
  89.                   "image_width INT, " +
  90.                   "image_height INT, " +
  91.                   "mime_type VARCHAR(50), " +
  92.                   "created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP" +
  93.                   ")";
  94.         
  95.         var stmt = conn.createStatement();
  96.         stmt.execute(sql);
  97.         stmt.close();
  98.         
  99.         print.log("✅ 图片存储表创建成功(或已存在)");
  100.         return true;
  101.     } catch (e) {
  102.         print.log("❌ 创建图片表失败: " + e.message);
  103.         return false;
  104.     }
  105. }

  106. /**
  107. * 检查表是否存在并显示表结构
  108. */
  109. function checkTableStructure() {
  110.     try {
  111.         var sql = "SHOW TABLES LIKE 'images'";
  112.         var stmt = conn.createStatement();
  113.         var rs = stmt.executeQuery(sql);
  114.         
  115.         if (rs.next()) {
  116.             print.log("✅ 表 images 已存在");
  117.             rs.close();
  118.             stmt.close();
  119.             
  120.             // 显示表结构
  121.             sql = "DESCRIBE images";
  122.             stmt = conn.createStatement();
  123.             rs = stmt.executeQuery(sql);
  124.             
  125.             print.log("表 images 的字段结构:");
  126.             while (rs.next()) {
  127.                 var columnName = rs.getString(1);
  128.                 var columnType = rs.getString(2);
  129.                 print.log("  - " + columnName + ": " + columnType);
  130.             }
  131.             rs.close();
  132.             stmt.close();
  133.             return true;
  134.         } else {
  135.             print.log("❌ 表 images 不存在,需要先创建表");
  136.             rs.close();
  137.             stmt.close();
  138.             return false;
  139.         }
  140.     } catch (e) {
  141.         print.log("❌ 检查表结构失败: " + e.message);
  142.         return false;
  143.     }
  144. }

  145. /**
  146. * 获取图片文件信息
  147. */
  148. function getImageInfo(imagePath) {
  149.     try {
  150.         if (!fileExists(imagePath)) {
  151.             print.log("❌ 图片文件不存在: " + imagePath);
  152.             return null;
  153.         }
  154.         
  155.         var fileSize = fileLength(imagePath);
  156.         var fileName = getFileName(imagePath);
  157.         var extension = fileName.substring(fileName.lastIndexOf('.') + 1).toLowerCase();
  158.         
  159.         var mimeType = "image/jpeg";
  160.         if (extension === "png") {
  161.             mimeType = "image/png";
  162.         } else if (extension === "gif") {
  163.             mimeType = "image/gif";
  164.         } else if (extension === "webp") {
  165.             mimeType = "image/webp";
  166.         }
  167.         
  168.         print.log("图片文件信息:");
  169.         print.log("  路径: " + imagePath);
  170.         print.log("  文件名: " + fileName);
  171.         print.log("  文件大小: " + (fileSize / 1024).toFixed(2) + " KB");
  172.         print.log("  MIME类型: " + mimeType);
  173.         
  174.         return {
  175.             path: imagePath,
  176.             name: fileName,
  177.             size: fileSize,
  178.             mimeType: mimeType
  179.         };
  180.     } catch (e) {
  181.         print.log("❌ 获取图片信息失败: " + e.message);
  182.         return null;
  183.     }
  184. }

  185. /**
  186. * 将本地图片上传到数据库
  187. * @param {String} imagePath - 图片本地路径
  188. * @param {String} imageName - 图片名称(可选,默认使用文件名)
  189. */
  190. function uploadImageToDatabase(imagePath, imageName) {
  191.     try {
  192.         var imageInfo = getImageInfo(imagePath);
  193.         if (!imageInfo) {
  194.             return false;
  195.         }
  196.         
  197.         var name = imageName || imageInfo.name;
  198.         
  199.         // 将图片文件转换为Base64字符串
  200.         print.log("正在将图片转换为Base64字符串...");
  201.         var base64Data = fileToBase64(imagePath);
  202.         
  203.         if (!base64Data) {
  204.             print.log("❌ 图片转Base64失败");
  205.             return false;
  206.         }
  207.         
  208.         print.log("✅ Base64字符串生成成功,长度: " + base64Data.length + " 字符");
  209.         
  210.         // 将Base64字符串转换为字节数组
  211.         // 格式: "data:image/jpeg;base64,..." 需要去除前缀
  212.         var base64Content = base64Data;
  213.         var prefix = "data:" + imageInfo.mimeType + ";base64,";
  214.         if (base64Data.indexOf(prefix) === 0) {
  215.             base64Content = base64Data.substring(prefix.length);
  216.         }
  217.         
  218.         // 使用预编译语句插入图片数据
  219.         var sql = "INSERT INTO images (name, path, image_data, file_size, mime_type) VALUES (?, ?, ?, ?, ?)";
  220.         pstmt = conn.prepareStatement(sql);
  221.         pstmt.setString(1, name);
  222.         pstmt.setString(2, imagePath);
  223.         
  224.         // 设置BLOB参数 - 使用setBytes方法
  225.         var bytes = android.util.Base64.decode(base64Content, android.util.Base64.NO_WRAP);
  226.         pstmt.setBytes(3, bytes);
  227.         
  228.         pstmt.setInt(4, imageInfo.size);
  229.         pstmt.setString(5, imageInfo.mimeType);
  230.         
  231.         var rowsAffected = pstmt.executeUpdate();
  232.         pstmt.close();
  233.         pstmt = null;
  234.         
  235.         if (rowsAffected > 0) {
  236.             print.log("✅ 图片 '" + name + "' 上传成功,影响行数: " + rowsAffected);
  237.             return true;
  238.         } else {
  239.             print.log("❌ 图片上传失败,影响行数为0");
  240.             return false;
  241.         }
  242.     } catch (e) {
  243.         print.log("❌ 上传图片到数据库失败: " + e.message);
  244.         if (pstmt) {
  245.             try { pstmt.close(); } catch(err) {}
  246.             pstmt = null;
  247.         }
  248.         return false;
  249.     }
  250. }

  251. /**
  252. * 从数据库下载图片并保存到本地
  253. * @param {Number} imageId - 数据库中的图片ID
  254. * @param {String} outputPath - 保存路径
  255. */
  256. function downloadImageFromDatabase(imageId, outputPath) {
  257.     try {
  258.         var sql = "SELECT name, image_data, mime_type FROM images WHERE id = ?";
  259.         pstmt = conn.prepareStatement(sql);
  260.         pstmt.setInt(1, imageId);
  261.         
  262.         var rs = pstmt.executeQuery();
  263.         
  264.         if (rs.next()) {
  265.             var name = rs.getString("name");
  266.             var imageData = rs.getBytes("image_data");
  267.             var mimeType = rs.getString("mime_type");
  268.             
  269.             // 将字节数组转换为Base64字符串
  270.             var base64Content = android.util.Base64.encodeToString(imageData, android.util.Base64.NO_WRAP);
  271.             
  272.             // 添加Base64前缀
  273.             var prefix = "data:" + mimeType + ";base64,";
  274.             var base64WithPrefix = prefix + base64Content;
  275.             
  276.             // 使用 new image().readBase64() 和 save() 保存为文件
  277.             var imageObj = new image();
  278.             imageObj.readBase64(base64WithPrefix);
  279.             imageObj.save(outputPath);
  280.             
  281.             print.log("✅ 图片下载成功: " + outputPath);
  282.             print.log("  图片名称: " + name);
  283.             print.log("  MIME类型: " + mimeType);
  284.             print.log("  文件大小: " + (imageData.length / 1024).toFixed(2) + " KB");
  285.             
  286.             rs.close();
  287.             pstmt.close();
  288.             pstmt = null;
  289.             
  290.             return true;
  291.         } else {
  292.             print.log("❌ 未找到ID为 " + imageId + " 的图片");
  293.             rs.close();
  294.             pstmt.close();
  295.             pstmt = null;
  296.             return false;
  297.         }
  298.     } catch (e) {
  299.         print.log("❌ 从数据库下载图片失败: " + e.message);
  300.         if (pstmt) {
  301.             try { pstmt.close(); } catch(err) {}
  302.             pstmt = null;
  303.         }
  304.         return false;
  305.     }
  306. }

  307. /**
  308. * 查询数据库中所有图片信息
  309. */
  310. function queryAllImages() {
  311.     try {
  312.         var sql = "SELECT id, name, path, file_size, mime_type, created_at FROM images ORDER BY id";
  313.         var stmt = conn.createStatement();
  314.         var rs = stmt.executeQuery(sql);
  315.         
  316.         print.log("数据库中的图片列表:");
  317.         var count = 0;
  318.         
  319.         while (rs.next()) {
  320.             count++;
  321.             var id = rs.getInt("id");
  322.             var name = rs.getString("name");
  323.             var path = rs.getString("path");
  324.             var fileSize = rs.getInt("file_size");
  325.             var mimeType = rs.getString("mime_type");
  326.             var createdAt = rs.getString("created_at");
  327.             
  328.             print.log("  [" + id + "] " + name);
  329.             print.log("      大小: " + (fileSize / 1024).toFixed(2) + " KB");
  330.             print.log("      类型: " + mimeType);
  331.             print.log("      创建时间: " + createdAt);
  332.         }
  333.         
  334.         rs.close();
  335.         stmt.close();
  336.         
  337.         if (count === 0) {
  338.             print.log("  数据库中没有图片记录");
  339.         } else {
  340.             print.log("  共 " + count + " 张图片");
  341.         }
  342.         
  343.         return true;
  344.     } catch (e) {
  345.         print.log("❌ 查询图片列表失败: " + e.message);
  346.         return false;
  347.     }
  348. }

  349. /**
  350. * 根据ID删除图片
  351. */
  352. function deleteImageFromDatabase(imageId) {
  353.     try {
  354.         var sql = "DELETE FROM images WHERE id = ?";
  355.         pstmt = conn.prepareStatement(sql);
  356.         pstmt.setInt(1, imageId);
  357.         
  358.         var rowsAffected = pstmt.executeUpdate();
  359.         pstmt.close();
  360.         pstmt = null;
  361.         
  362.         if (rowsAffected > 0) {
  363.             print.log("✅ 成功删除ID为 " + imageId + " 的图片,影响行数: " + rowsAffected);
  364.             return true;
  365.         } else {
  366.             print.log("❌ 未找到ID为 " + imageId + " 的图片");
  367.             return false;
  368.         }
  369.     } catch (e) {
  370.         print.log("❌ 删除图片失败: " + e.message);
  371.         if (pstmt) {
  372.             try { pstmt.close(); } catch(err) {}
  373.             pstmt = null;
  374.         }
  375.         return false;
  376.     }
  377. }

  378. /**
  379. * 实时截图并上传到数据库
  380. * @param {String} imageName - 图片名称(可选)
  381. * @returns {Boolean} 是否成功
  382. */
  383. function screenshotAndUpload(imageName) {
  384.     try {
  385.         print.log("\n===== 实时截图并上传 =====");
  386.         
  387.         // 1. 截图
  388.         print.log("正在截取屏幕...");
  389.         var screenshot = screen.screenShotFull();
  390.         
  391.         if (!screenshot) {
  392.             print.log("❌ 截图失败");
  393.             return false;
  394.         }
  395.         
  396.         print.log("✅ 截图成功");
  397.         
  398.         // 2. 生成本地保存路径
  399.         var timestamp = new java.util.Date().getTime();
  400.         var localPath = "/sdcard/screenshot_" + timestamp + ".jpg";
  401.         
  402.         // 3. 保存到本地
  403.         print.log("正在保存截图到本地: " + localPath);
  404.         screenshot.save(localPath);
  405.         
  406.         if (!fileExists(localPath)) {
  407.             print.log("❌ 本地保存失败");
  408.             return false;
  409.         }
  410.         
  411.         print.log("✅ 本地保存成功");
  412.         
  413.         // 4. 上传到数据库
  414.         var name = imageName || "截图_" + timestamp;
  415.         print.log("正在上传到数据库: " + name);
  416.         
  417.         var uploadResult = uploadImageToDatabase(localPath, name);
  418.         
  419.         if (uploadResult) {
  420.             print.log("✅ 实时截图上传成功!");
  421.             return true;
  422.         } else {
  423.             print.log("❌ 数据库上传失败,但本地图片已保存");
  424.             return false;
  425.         }
  426.     } catch (e) {
  427.         print.log("❌ 实时截图上传失败: " + e.message);
  428.         return false;
  429.     }
  430. }

  431. /**
  432. * 定时截图并上传(循环执行)
  433. * @param {Number} intervalSeconds - 间隔秒数
  434. * @param {Number} maxCount - 最大执行次数(0表示无限循环)
  435. */
  436. function autoScreenshotUpload(intervalSeconds, maxCount) {
  437.     try {
  438.         print.log("\n===== 启动定时截图上传 =====");
  439.         print.log("间隔: " + intervalSeconds + " 秒");
  440.         print.log("最大次数: " + (maxCount === 0 ? "无限" : maxCount));
  441.         
  442.         var count = 0;
  443.         
  444.         while (maxCount === 0 || count < maxCount) {
  445.             count++;
  446.             print.log("\n--- 第 " + count + " 次截图 ---");
  447.             
  448.             var result = screenshotAndUpload("定时截图_" + count);
  449.             
  450.             if (result) {
  451.                 print.log("✅ 第 " + count + " 次成功");
  452.             } else {
  453.                 print.log("❌ 第 " + count + " 次失败");
  454.             }
  455.             
  456.             // 等待间隔(不包括最后一次)
  457.             if (maxCount === 0 || count < maxCount) {
  458.                 print.log("等待 " + intervalSeconds + " 秒后进行下一次截图...");
  459.                 sleep(intervalSeconds * 1000);
  460.             }
  461.         }
  462.         
  463.         print.log("\n===== 定时截图任务完成 =====");
  464.         print.log("共执行 " + count + " 次截图上传");
  465.         return true;
  466.     } catch (e) {
  467.         print.log("❌ 定时截图任务失败: " + e.message);
  468.         return false;
  469.     }
  470. }

  471. /**
  472. * 截图并获取Base64数据(不上传,用于预览等)
  473. * @returns {String} Base64字符串,失败返回null
  474. */
  475. function screenshotToBase64() {
  476.     try {
  477.         print.log("\n===== 截图并获取Base64 =====");
  478.         
  479.         // 1. 截图
  480.         var screenshot = screen.screenShotFull();
  481.         if (!screenshot) {
  482.             print.log("❌ 截图失败");
  483.             return null;
  484.         }
  485.         
  486.         // 2. 转为Base64
  487.         var base64Data = screenshot.toBase64();
  488.         
  489.         if (base64Data) {
  490.             print.log("✅ Base64数据获取成功,长度: " + base64Data.length + " 字符");
  491.             print.log("  前缀: " + base64Data.substring(0, 50) + "...");
  492.             return base64Data;
  493.         } else {
  494.             print.log("❌ Base64转换失败");
  495.             return null;
  496.         }
  497.     } catch (e) {
  498.         print.log("❌ 截图转Base64失败: " + e.message);
  499.         return null;
  500.     }
  501. }

  502. /**
  503. * 关闭数据库连接
  504. */
  505. function closeConnection() {
  506.     try {
  507.         if (pstmt != null) {
  508.             pstmt.close();
  509.             pstmt = null;
  510.         }
  511.         if (conn != null) {
  512.             conn.close();
  513.         }
  514.         print.log("✅ 数据库连接已关闭");
  515.     } catch (e) {
  516.         print.log("❌ 关闭连接时出错: " + e.message);
  517.     }
  518. }

  519. // 主程序执行流程
  520. try {
  521.     // 1. 连接数据库
  522.     if (!connectDatabase()) {
  523.         throw new Error("数据库连接失败");
  524.     }
  525.    
  526.     // 2. 检查表是否存在,不存在则创建
  527.     if (!checkTableStructure()) {
  528.         print.log("正在创建图片存储表...");
  529.         if (!createImageTable()) {
  530.             throw new Error("创建图片表失败");
  531.         }
  532.     }
  533.    
  534.     // ========== 方式1:上传本地已有图片 ==========
  535.     print.log("\n===== 方式1:上传本地图片 =====");
  536.    
  537.     // 常见的手机图片路径示例
  538.     var sampleImagePaths = [
  539.         "/sdcard/DCIM/Camera/photo_001.jpg",
  540.         "/sdcard/Pictures/Screenshots/screenshot_001.png",
  541.         "/sdcard/Download/image_001.jpg"
  542.     ];
  543.    
  544.     // 使用第一个存在的图片路径
  545.     var uploadPath = null;
  546.     for (var i = 0; i < sampleImagePaths.length; i++) {
  547.         var testPath = sampleImagePaths[i];
  548.         if (new java.io.File(testPath).exists()) {
  549.             uploadPath = testPath;
  550.             print.log("找到可用的测试图片: " + uploadPath);
  551.             break;
  552.         }
  553.     }
  554.    
  555.     if (uploadPath) {
  556.         // 上传找到的图片
  557.         uploadImageToDatabase(uploadPath, "本地测试图片_" + new java.util.Date().getTime());
  558.     } else {
  559.         print.log("⚠️ 未找到测试图片,请确保以下路径有图片文件:");
  560.         for (var j = 0; j < sampleImagePaths.length; j++) {
  561.             print.log("  - " + sampleImagePaths[j]);
  562.         }
  563.     }
  564.    
  565.     // ========== 方式2:实时截图并上传 ==========
  566.     print.log("\n===== 方式2:实时截图并上传 =====");
  567.    
  568.     // 立即截图并上传
  569.     var screenshotResult = screenshotAndUpload("实时截图测试");
  570.    
  571.     // ========== 方式3:定时截图上传(可选) ==========
  572.     // 如果需要定时截图,请取消注释以下代码:
  573.     // autoScreenshotUpload(5, 3);  // 每5秒截图一次,共3次
  574.    
  575.     // 4. 查询所有图片
  576.     print.log("\n===== 查询数据库中的图片 =====");
  577.     queryAllImages();
  578.    
  579.     // 5. 下载最新图片
  580.     print.log("\n===== 从数据库下载最新图片 =====");
  581.     // 查找最新的图片ID
  582.     var latestImageId = 0;
  583.     try {
  584.         var sql = "SELECT MAX(id) as max_id FROM images";
  585.         var stmt = conn.createStatement();
  586.         var rs = stmt.executeQuery(sql);
  587.         if (rs.next()) {
  588.             latestImageId = rs.getInt("max_id");
  589.         }
  590.         rs.close();
  591.         stmt.close();
  592.         
  593.         if (latestImageId > 0) {
  594.             var downloadPath = "/sdcard/downloaded_image_" + latestImageId + ".jpg";
  595.             downloadImageFromDatabase(latestImageId, downloadPath);
  596.             
  597.             // 6. 截图转Base64演示
  598.             print.log("\n===== 截图转Base64演示 =====");
  599.             var base64Data = screenshotToBase64();
  600.             if (base64Data) {
  601.                 print.log("✅ Base64可用于H5界面显示、网络传输等");
  602.             }
  603.             
  604.             // 7. 删除图片演示(取消注释可删除)
  605.             // print.log("\n===== 删除图片演示 =====");
  606.             // deleteImageFromDatabase(latestImageId);
  607.             // print.log("已删除ID为 " + latestImageId + " 的图片");
  608.         }
  609.     } catch (e) {
  610.         print.log("⚠️ 演示下载功能时出错: " + e.message);
  611.     }
  612.    
  613.     // 8. 再次查询确认
  614.     print.log("\n===== 最终图片列表 =====");
  615.     queryAllImages();
  616.    
  617. } catch (e) {
  618.     print.log("❌ 程序执行过程中发生错误: " + e.message);
  619. } finally {
  620.     // 确保连接被关闭
  621.     closeConnection();
  622. }

  623. print.log("===== 数据库图片上传操作脚本结束 =====");

  624. /**
  625. * &#128161; 使用说明:
  626. *
  627. * 1. 图片存储原理:
  628. *    - 使用 MySQL 的 LONGBLOB 类型存储二进制图片数据
  629. *    - 将图片文件转为 Base64 字符串,再转为字节数组存入数据库
  630. *
  631. * 2. 上传流程:
  632. *    - file.fileToBase64(path) → 获取图片Base64字符串
  633. *    - android.util.Base64.decode() → Base64转字节数组
  634. *    - prepareStatement.setBytes() → 存入数据库
  635. *
  636. * 3. 下载流程:
  637. *    - rs.getBytes() → 从数据库读取字节数组
  638. *    - android.util.Base64.encodeToString() → 字节数组转Base64
  639. *    - file.base64ToFile() → 保存为图片文件
  640. *
  641. * 4. 适用场景:
  642. *    - 用户头像存储
  643. *    - 商品图片管理
  644. *    - 截图自动备份
  645. *    - 图片数据迁移
  646. */
复制代码



untoHID中文输入智能打字功能nextnocontent
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关导读了
    采集亚马逊正版群发工具有没有?
    Apr.20旅行X心语今天来说说YYPOST新功能的一个灵活用法,采集亚马逊商品信息,并且获得排名的软件,亚马逊现在越来越多客户做,淘宝的水是越来越清了,以前做电商的客户,现在都转战到外国,最赚钱的要数一些客户往亚马逊里堆了吧,拿我这个YYPOST的客户,最多的是采集,分析排名,刷价格,刷数量,改价,刷访问量等等技术

    企业发展B2B网站有什么东东软件可以发呢
    标题企业发展网B2B软件,现在虽然B2B网站收录不错,可愁的是心急的人们,他们太想一口吃撑胖子了,发帖宣传虽然不能像佛系那样淡定,但也不能像跑火车那般急躁对待,自己内容不收录,完全是自己操作内容问题,可以参考一下别人的内容是怎么弄的,然后自己要试着转变,而且收录这个内容,常常会变化的,不是一种规则就吃到老

    搜房天下房聊软件哪一个好呢
    本帖最后由 发帖软件 于 2019-5-22 16:15 编辑 2搜房天下群发房聊信息软件,开始本来打算做58同城的,但发一个就要一次点触验证码,这就让人没有感觉到存在的价值了吧,都是卖二手房和新房的搜房天下倒是可以发即时聊天信息,也没有发现他这个网站有啥子限制,登陆一个搜房天下账号,然后采集回来分类列表的网址,然后就一

    大家坛有没有好用的群发工具下载呢
    当你的笑容给我礼貌的招呼,大家坛全自动发帖软件,宣传推广是一场持久战,总是有一些人把软件用了一天,或是几个小时,就觉得自己付出太多了,那加进来的粉丝,或是流量,应该是和宣传多少成正比的,其实没有这么便宜的事,就像很多阅读量超过一百万的视频,或是电影,真正会在屏幕打赏的人不会超过三千,真正大额打赏给主

    群发正版软件中国塑料网
    中国塑料网群发软件YYPOST脚本下载地址,这个网站会有一个很奇怪的问题就是你在首页登陆无半个验证码,但在登陆网址登陆就会有一个验证码,所以我们灵活一些,在首页登陆就不用输入验证码了哈。网站秒收录比较高,但发的都是五金和建筑行业,先前有很多人都是发土建工程的大公司操作的,现在这个网站专为那个行业诞生的吧。

    OpenStreetMap网站正版2019年发帖工具下载
    本帖最后由 发帖软件 于 2019-5-21 11:13 编辑 OpenStreetMap网站全自动群发,OpenStreetMapOpenStreetMap(简称OSM,中文是公开地图)是一个网上地图协作计划,目标是创造一个内容自由且能让所有人编辑的世界地图。有的人编辑地图然后等收录,有的人发日志等收录,我们这里也是利用地图日志做为宣传的目标,简单的脚本理

    搜房天下全自动收短信全自动识别验证码注册账号软件
    房天下自动注册机,这个脚本是前几天发房聊的脚本廷伸品种,这个脚本能做到自动注册账号,自动保存账号,自动发房聊的效果,不过今天我们主要说一说怎么注册账号写脚本吧,这个搜房天天下的账号,可以发提问,可以发房聊,发论坛,发博客,还有发个人中心页都是有秒收的效果的,这样就省去了去买号,去乱花钱的效果了吧,而

    企业邮箱安卓端有什么APP软件可以发的呢
    请输入标题企业邮箱安卓发发送邮箱脚本,这个脚本是利用企业邮箱进行群发的,全程是一种模拟手工操作的过程,所以封号是很少的,而且企业邮箱群发到普通QQ邮箱不容易进垃圾箱中的,所以这个脚本也是这样的原理,不过最好是利用一些多开器,登陆多点的QQ邮箱账号会比较流畅一些,然后用软件一个一个的切换APP进行群发邮件会

    头条留评论软件有没有好用的呢?
    今天整一个今日头条留言软件,对于留言YYPOST是优势是比较大的存在,因为他往往专注一些下拉定位的优点,像今日头条这样,还是需要一些特殊下拉定位的,因为他新闻有长有短,有图有视频的,所以综合起来定位是比较难的,如果用POST也不是很轻松可以破解他的加密参数。这个脚本也是有一个不好的地方就是换号会比较麻烦,您电

    单网页生成神器
    最近新技术,网页生成机占领了整个网络的半壁江山,效果很疯狂,虽然不知道能持续多久,作为开发软件的领头者,一直在找收录的方法,一直在努力创新着,一直被人模仿,却从没有被超越过,这个网页生成机,已经出来有一段时间了,一直没有拿出来分享,醉过醉过,它是利用的一些小小收录漏洞整的,您最好用一些老站域名,进行

关闭
快速回复 返回列表 返回顶部
本站自动发贴软件,是现在最流行的做脚本软件,这种发贴工具,不但发贴收录快,而且抢占好的先机,完全自由编辑,实现针对性群发模拟操作,软件可以顶贴,也可以发贴,可以兼容支持Discuz、PHPWind、Dvbbs三大主流论坛,有手机验证码收件,邮件收发的功能,支持验证码识别,注册问题识别,多线程任务,自动上传头像,自动激活注册邮件,兼容防注册插件,本站软件原创正版,更新效率最快的原创软件。 『网络推广软件』『自动发帖软件』『 自动发帖