ソースを参照

MACOS version

pull/43/head
Naibo Wang 1年前
コミット
4669caf0c4
46個のファイルの変更164行の追加26行の削除
  1. バイナリ
      .DS_Store
  2. +3
    -0
      .gitignore
  3. バイナリ
      ElectronJS/.DS_Store
  4. +1
    -1
      ElectronJS/config.json
  5. +2
    -0
      ElectronJS/execute_macos.sh
  6. +1
    -1
      ElectronJS/execution_instances/0.json
  7. バイナリ
      ElectronJS/favicon.icns
  8. +9
    -7
      ElectronJS/main.js
  9. +4
    -4
      ElectronJS/package.json
  10. +14
    -0
      ElectronJS/package_macos.sh
  11. +12
    -3
      ElectronJS/server.js
  12. +4
    -0
      ElectronJS/src/taskGrid/global.js
  13. +39
    -1
      ElectronJS/src/taskGrid/invokeTask.html
  14. バイナリ
      ExecuteStage/.DS_Store
  15. +11
    -6
      ExecuteStage/easyspider_executestage.py
  16. +4
    -2
      ExecuteStage/generateExecutable_Macos.sh
  17. +2
    -1
      Releases/.gitignore
  18. +1
    -0
      Releases/EasySpider_MacOS_all_arch/config.json
  19. バイナリ
      Releases/EasySpider_MacOS_all_arch/easyspider_executestage
  20. +1
    -0
      Releases/EasySpider_MacOS_all_arch/execution_instances/0.json
  21. +1
    -0
      Releases/EasySpider_MacOS_all_arch/execution_instances/1.json
  22. +1
    -0
      Releases/EasySpider_MacOS_all_arch/execution_instances/2.json
  23. +31
    -0
      Releases/EasySpider_MacOS_all_arch/readme.txt
  24. +1
    -0
      Releases/EasySpider_MacOS_all_arch/tasks/11.json
  25. +1
    -0
      Releases/EasySpider_MacOS_all_arch/tasks/15.json
  26. +1
    -0
      Releases/EasySpider_MacOS_all_arch/tasks/16.json
  27. +1
    -0
      Releases/EasySpider_MacOS_all_arch/tasks/17.json
  28. +1
    -0
      Releases/EasySpider_MacOS_all_arch/tasks/19.json
  29. +1
    -0
      Releases/EasySpider_MacOS_all_arch/tasks/2.json
  30. +1
    -0
      Releases/EasySpider_MacOS_all_arch/tasks/20.json
  31. +1
    -0
      Releases/EasySpider_MacOS_all_arch/tasks/23.json
  32. +1
    -0
      Releases/EasySpider_MacOS_all_arch/tasks/25.json
  33. +1
    -0
      Releases/EasySpider_MacOS_all_arch/tasks/27.json
  34. +1
    -0
      Releases/EasySpider_MacOS_all_arch/tasks/28.json
  35. +1
    -0
      Releases/EasySpider_MacOS_all_arch/tasks/29.json
  36. +1
    -0
      Releases/EasySpider_MacOS_all_arch/tasks/30.json
  37. +1
    -0
      Releases/EasySpider_MacOS_all_arch/tasks/31.json
  38. +1
    -0
      Releases/EasySpider_MacOS_all_arch/tasks/32.json
  39. +1
    -0
      Releases/EasySpider_MacOS_all_arch/tasks/33.json
  40. +1
    -0
      Releases/EasySpider_MacOS_all_arch/tasks/34.json
  41. +1
    -0
      Releases/EasySpider_MacOS_all_arch/tasks/35.json
  42. +1
    -0
      Releases/EasySpider_MacOS_all_arch/tasks/36.json
  43. +1
    -0
      Releases/EasySpider_MacOS_all_arch/tasks/4.json
  44. +1
    -0
      Releases/EasySpider_MacOS_all_arch/tasks/5.json
  45. +1
    -0
      Releases/EasySpider_MacOS_all_arch/tasks/6.json
  46. +1
    -0
      Releases/EasySpider_MacOS_all_arch/tasks/7.json

バイナリ
.DS_Store ファイルの表示


+ 3
- 0
.gitignore ファイルの表示

@ -1,3 +1,5 @@
.DS_Store/
.DS_Store
.idea/
node_modules/
ServiceWrapper/
@ -9,3 +11,4 @@ old_code/
*.7z
*.mp4
*.tar.xz
*.zip

バイナリ
ElectronJS/.DS_Store ファイルの表示


+ 1
- 1
ElectronJS/config.json ファイルの表示

@ -1 +1 @@
{"webserver_address":"http://localhost","webserver_port":8074,"user_data_folder":"./user_data","absolute_user_data_folder":"/Users/naibowang/Documents/EasySpider/ElectronJS/user_data"}
{"webserver_address":"http://localhost","webserver_port":8074,"user_data_folder":"./user_data123","absolute_user_data_folder":"/Users/naibowang/Documents/EasySpider/ElectronJS/user_data123"}

+ 2
- 0
ElectronJS/execute_macos.sh ファイルの表示

@ -1,3 +1,5 @@
#!/bin/bash
echo "Executing EasySpider on MacOS"
./easyspider_executestage $1 $2 $3 $4 $5 $6 $7 $8 $9

+ 1
- 1
ElectronJS/execution_instances/0.json
ファイル差分が大きすぎるため省略します
ファイルの表示


バイナリ
ElectronJS/favicon.icns ファイルの表示


+ 9
- 7
ElectronJS/main.js ファイルの表示

@ -34,7 +34,7 @@ if (process.platform === 'win32' && process.arch === 'ia32') {
} else if (process.platform === 'darwin') {
driverPath = path.join(__dirname, "chromedriver_mac64");
chromeBinaryPath = path.join(__dirname, "chrome_mac64.app/Contents/MacOS/Google Chrome");
execute_path = path.join(__dirname, "execute_macos.sh");
execute_path = path.join(__dirname, "");
} else if (process.platform === 'linux') {
driverPath = path.join(__dirname, "chrome_linux64/chromedriver_linux64");
chromeBinaryPath = path.join(__dirname, "chrome_linux64/chrome");
@ -204,7 +204,7 @@ async function beginInvoke(msg) {
if (msg.message.user_data_folder == null || msg.message.user_data_folder == undefined || msg.message.user_data_folder == "") {
parameters = ["--id", msg.message.id, "--server_address", server_address, "--user_data", 0];
} else {
let user_data_folder_path = __dirname.indexOf("resources") >= 0 && __dirname.indexOf("app") >= 0 ? path.join(__dirname, "../../..", msg.message.user_data_folder) : path.join(__dirname, msg.message.user_data_folder);
let user_data_folder_path = path.join(task_server.getDir(), msg.message.user_data_folder);
parameters = ["--id", msg.message.id, "--server_address", server_address, "--user_data", 1];
config.user_data_folder = msg.message.user_data_folder;
config.absolute_user_data_folder = user_data_folder_path;
@ -215,10 +215,12 @@ async function beginInvoke(msg) {
// });
let spawn = require("child_process").spawn;
let child_process = spawn(execute_path, parameters);
child_process.stdout.on('data', function (data) {
console.log(data.toString());
});
if (process.platform != "darwin") {
let child_process = spawn(execute_path, parameters);
child_process.stdout.on('data', function (data) {
console.log(data.toString());
});
}
}
}
@ -282,7 +284,7 @@ async function runBrowser(lang = "en", user_data_folder = '') {
}
options.setChromeBinaryPath(chromeBinaryPath);
if (user_data_folder != "") {
let dir = __dirname.indexOf("resources") >= 0 && __dirname.indexOf("app") >= 0 ? path.join(__dirname, "../../..", user_data_folder) : path.join(__dirname, user_data_folder);
let dir = path.join(task_server.getDir(), user_data_folder);
console.log(dir);
options.addArguments("--user-data-dir=" + dir);
config.user_data_folder = user_data_folder;

+ 4
- 4
ElectronJS/package.json ファイルの表示

@ -1,8 +1,8 @@
{
"name": "easy-spider",
"productName": "EasySpider",
"version": "0.1.0",
"icon": "favicon.ico",
"version": "0.2.0",
"icon": "./favicon",
"description": "NoCode Visual Web Crawler",
"main": "main.js",
"scripts": {
@ -59,8 +59,8 @@
}
],
"packagerConfig": {
"icon": "favicon.ico",
"appVersion": "0.1.0",
"icon": "./favicon",
"appVersion": "0.2.0",
"name": "EasySpider",
"executableName": "EasySpider",
"appCopyright": "Naibo Wang (naibowang@foxmail.com)",

+ 14
- 0
ElectronJS/package_macos.sh ファイルの表示

@ -0,0 +1,14 @@
#!/bin/bash
# This script is used to build.md the package for Linux 64-bit.
rm -rf out
rm -r ../Releases/EasySpider_MacOS_all_arch/EasySpider.app
npm run make
unzip out/make/zip/darwin/x64/EasySpider-darwin-x64-* -d ../Releases/EasySpider_MacOS_all_arch/
rm ../Releases/EasySpider_MacOS_all_arch/EasySpider.app/Contents/Resources/app/VS_BuildTools.exe
rm -r ../Releases/EasySpider_MacOS_all_arch/EasySpider.app/Contents/Resources/app/chrome_win64
rm -r ../Releases/EasySpider_MacOS_all_arch/EasySpider.app/Contents/Resources/app/Data
rm -r ../Releases/EasySpider_MacOS_all_arch/EasySpider.app/Contents/Resources/app/.idea
rm -r ../Releases/EasySpider_MacOS_all_arch/EasySpider.app/Contents/Resources/app/tasks
rm -r ../Releases/EasySpider_MacOS_all_arch/EasySpider.app/Contents/Resources/app/execution_instances
rm -r ../Releases/EasySpider_MacOS_all_arch/EasySpider.app/Contents/Resources/app/user_data

+ 12
- 3
ElectronJS/server.js ファイルの表示

@ -20,9 +20,14 @@ function compare(p){ //这是比较函数
return b - a; //降序
}
}
function getDir(){
if(__dirname.indexOf("app") >= 0 && __dirname.indexOf("resources") >= 0){
return path.join(__dirname,"../../..");
if(__dirname.indexOf("app") >= 0 && __dirname.indexOf("sources") >= 0){
if(process.platform == "darwin"){
return path.join(__dirname,"../../../..");
} else {
return path.join(__dirname,"../../..");
}
} else{
return __dirname;
}
@ -223,7 +228,10 @@ exports.start = function(port = 8074) {
let file_names = [];
fs.readdirSync(path.join(getDir(), "execution_instances")).forEach((file)=>{
try{
file_names.push(parseInt(file.split(".")[0]));
if(file.split(".")[1] == "json"){
file_names.push(parseInt(file.split(".")[0]));
}
console.log(file);
} catch (error) {
}
@ -232,6 +240,7 @@ exports.start = function(port = 8074) {
if (file_names.length != 0) {
eid = Math.max(...file_names) + 1;
}
console.log(file_names);
task["id"] = eid;
task = JSON.stringify(task);
fs.writeFile(path.join(getDir(), `execution_instances/${eid}.json`), task, (err) => {});

+ 4
- 0
ElectronJS/src/taskGrid/global.js ファイルの表示

@ -5,6 +5,10 @@ function getUrlParam(name) {
return ""; //返回参数值,默认后台地址
}
function isMac() {
return /macintosh|mac os x/i.test(navigator.userAgent);
};
Vue.filter('lang', function (value) {
if (getUrlParam("lang") == "zh") {
return value.split("~")[1];

+ 39
- 1
ElectronJS/src/taskGrid/invokeTask.html ファイルの表示

@ -8,6 +8,7 @@
name="viewport">
<meta content="ie=edge" http-equiv="X-UA-Compatible">
<script src="vue.js"></script>
<script src="bootstrap/js/bootstrap.js"></script>
<link href="bootstrap/css/bootstrap.css" rel="stylesheet"></link>
<title>Task Invoke</title>
<style>
@ -34,8 +35,32 @@
</head>
<body>
<div class="row" style="margin-top: 40px;">
<div class="col-md-6" id="taskInfo" style="margin:0 auto" v-if="show">
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="myModalLabel">{{"Task Invocation Instruction~执行任务说明" | lang}}</h4>
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
</div>
<div class="modal-body">
<input onkeydown="inputDelete(event)" id="serviceId" type="hidden" name="serviceId" value="-1"></input>
<input onkeydown="inputDelete(event)" id="url" type="hidden" name="url" value="about:blank"></input>
<label>{{"For MacOS, please open a terminal, go to EasySpider's folder, and then type the following command to run the task (EasySpider cannot quit when executing command):~对于MacOS系统,请在EasySpider目录下打开命令行工具Terminal,然后复制和运行以下命令以执行任务(执行命令时不能退出EasySpider):" | lang}}</label>
<textarea class="form-control">{{command}}</textarea>
</div>
<!-- <div class="modal-footer">
<button type="button" id="saveAsButton" class="btn btn-outline-primary">另存为</button>
<button type="button" id="saveButton" class="btn btn-primary">保存</button>
</div> -->
</div>
<!-- /.modal-content -->
</div>
</div>
<nav aria-label="breadcrumb">
<ol class="breadcrumb" style="padding-left:0;background-color: white">
<li @click="gotoHome" class="breadcrumb-item"><a href="#">{{"Home~首页" | lang}}</a></li>
@ -74,7 +99,7 @@
</tbody>
</table>
<div class="form-group" style="margin-top: 10px">
<label>{{"User Data Folder (If you want to load the cookie data from your local browser, please set this folder path, and then cilck the 'Run with (Data Mode)' button to run the task):~用户本地浏览器数据目录(如果需要使用本地的登录信息和cookie,请设置此目录,并点击下方“执行(带用户信息模式)”按钮开始执行任务):" | lang}}</label>
<label>{{"User Data Folder (If you want to load the cookie, data and extension(s) from your local browser, please set this folder path, and then cilck the 'Run with (Data Mode)' button to run the task):~用户本地浏览器数据目录(如果需要使用本地的登录信息,插件和cookie,请设置此目录,并点击下方“执行(带用户信息模式)”按钮开始执行任务):" | lang}}</label>
<input type="text" class="form-control" v-model="user_data_folder"></input>
</div>
</form>
@ -127,10 +152,12 @@
user_data_folder:"",
with_user_data: true,
backEndAddressServiceWrapper: getUrlParam("backEndAddressServiceWrapper"),
command: "./easyspider_executestage "
}, mounted() {
$.get(this.backEndAddressServiceWrapper + "/getConfig", function (result) {
app.$data.user_data_folder = result.user_data_folder;
});
//TODO 翻译 写清楚readme有关浏览器版本的问题 logo更换 提示看文档来运行
},
methods: {
gotoHome: function () {
@ -195,6 +222,10 @@
}
};
ws.send(JSON.stringify(message));
if(isMac()){
app.$data.command = "./easyspider_executestage --id " + app.$data.ID.toString() + " --user_data " + (app.$data.with_user_data ? "1" : "0") + " --server_address " + app.$data.backEndAddressServiceWrapper;
$('#myModal').modal('show');
}
}
},
remoteExecute: function () {
@ -207,6 +238,7 @@
} else {
text = "确定要立即在本地运行此任务吗?";
}
this.with_user_data = with_user_data;
if (confirm(text)) {
var para = {};
@ -226,6 +258,10 @@
}
};
ws.send(JSON.stringify(message));
if(isMac()){
app.$data.command = "./easyspider_executestage --id " + result.toString() + " --user_data " + (app.$data.with_user_data ? "1" : "0") + " --server_address " + app.$data.backEndAddressServiceWrapper;
$('#myModal').modal('show');
}
});
}
},
@ -233,10 +269,12 @@
},
}
});
$.get(app.$data.backEndAddressServiceWrapper + "/queryTask?id=" + sId, function (result) {
app.$data.task = result;
app.$data.show = true;
});
ws = new WebSocket("ws://localhost:"+getUrlParam("wsport"));
ws.onopen = function () {
// Web Socket 已连接上,使用 send() 方法发送数据

バイナリ
ExecuteStage/.DS_Store ファイルの表示


+ 11
- 6
ExecuteStage/easyspider_executestage.py ファイルの表示

@ -693,7 +693,17 @@ if __name__ == '__main__':
option = webdriver.ChromeOptions()
if not os.path.exists(os.getcwd()+"/Data"):
os.mkdir(os.getcwd()+"/Data")
if os.path.exists(os.getcwd()+"/EasySpider/resources"): # 打包后的路径
if sys.platform == "darwin" and platform.architecture()[0] == "64bit":
options.binary_location = "EasySpider.app/Contents/Resources/app/chrome_mac64.app/Contents/MacOS/Google Chrome"
# MacOS需要用option而不是options!
option.binary_location = "EasySpider.app/Contents/Resources/app/chrome_mac64.app/Contents/MacOS/Google Chrome"
driver_path = "EasySpider.app/Contents/Resources/app/chromedriver_mac64"
# options.binary_location = "chrome_mac64.app/Contents/MacOS/Google Chrome"
# # MacOS需要用option而不是options!
# option.binary_location = "chrome_mac64.app/Contents/MacOS/Google Chrome"
# driver_path = os.getcwd()+ "/chromedriver_mac64"
print(driver_path)
elif os.path.exists(os.getcwd()+"/EasySpider/resources"): # 打包后的路径
print("Finding chromedriver in EasySpider",
os.getcwd()+"/EasySpider")
if sys.platform == "win32" and platform.architecture()[0] == "32bit":
@ -709,11 +719,6 @@ if __name__ == '__main__':
elif sys.platform == "linux" and platform.architecture()[0] == "64bit":
options.binary_location = "EasySpider/resources/app/chrome_linux64/chrome"
driver_path = "EasySpider/resources/app/chrome_linux64/chromedriver_linux64"
elif sys.platform == "darwin" and platform.architecture()[0] == "64bit":
options.binary_location = "EasySpider/resources/app/chrome_mac64/chrome"
# MacOS需要用option而不是options!
option.binary_location = "EasySpider/resources/app/chrome_mac64/chrome"
driver_path = "EasySpider/resources/app/chrome_mac64/chromedriver_mac64"
else:
print("Unsupported platform")
sys.exit()

+ 4
- 2
ExecuteStage/generateExecutable_Macos.sh ファイルの表示

@ -1,5 +1,7 @@
rm -r build
rm -r dist
pyinstaller -F --icon=favicon.ico easyspider_executestage.py
rm ../ElectronJS/chrome_mac64/easyspider_executestage
mv dist/easyspider_executestage ../ElectronJS/chrome_linux64/easyspider_executestage
rm ../Releases/EasySpider_MacOS_all_arch/easyspider_executestage
rm ../ElectronJS/easyspider_executestage
mv dist/easyspider_executestage ../Releases/EasySpider_MacOS_all_arch/easyspider_executestage
# mv dist/easyspider_executestage ../ElectronJS/easyspider_executestage

+ 2
- 1
Releases/.gitignore ファイルの表示

@ -1,2 +1,3 @@
EasySpider
*.tmp
EasySpider.app/
*.tmp

+ 1
- 0
Releases/EasySpider_MacOS_all_arch/config.json ファイルの表示

@ -0,0 +1 @@
{"webserver_address":"http://localhost","webserver_port":8074,"user_data_folder":"./user_data","absolute_user_data_folder":"/Users/naibowang/Documents/EasySpider/Releases/EasySpider_MacOS_all_arch/user_data"}

バイナリ
ElectronJS/easyspider_executestage → Releases/EasySpider_MacOS_all_arch/easyspider_executestage ファイルの表示


+ 1
- 0
Releases/EasySpider_MacOS_all_arch/execution_instances/0.json
ファイル差分が大きすぎるため省略します
ファイルの表示


+ 1
- 0
Releases/EasySpider_MacOS_all_arch/execution_instances/1.json ファイルの表示

@ -0,0 +1 @@
{"id":1,"name":"新web采集任务","url":"https://www.jd.com","links":"https://www.jd.com","containJudge":false,"desc":"https://www.jd.com","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.jd.com","desc":"要采集的网址列表,多行以\\n分开","type":"string","exampleValue":"https://www.jd.com"}],"outputParameters":[],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"url":"https://www.jd.com","links":"https://www.jd.com","scrollType":0,"scrollCount":0}}]}

+ 1
- 0
Releases/EasySpider_MacOS_all_arch/execution_instances/2.json ファイルの表示

@ -0,0 +1 @@
{"id":2,"name":"新web采集任务","url":"https://www.jd.com","links":"https://www.jd.com","containJudge":false,"desc":"https://www.jd.com","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.jd.com","desc":"要采集的网址列表,多行以\\n分开","type":"string","exampleValue":"https://www.jd.com"}],"outputParameters":[],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"url":"https://www.jd.com","links":"https://www.jd.com","scrollType":0,"scrollCount":0}}]}

+ 31
- 0
Releases/EasySpider_MacOS_all_arch/readme.txt ファイルの表示

@ -0,0 +1,31 @@
由于MacOS复杂的安全性设置,初次打开软件会显示未验证开发者从而不允许打开的问题,请参考以下github文档来查看MacOS版本如何打开软件和执行任务:https://github.com/NaiboWang/EasySpider/wiki/MacOS-Guide
文件访问权限必须给,麦克风权限完全用不到,作者也不清楚为什么会需要麦克风,因此可以拒绝。
可以从其他机器导入任务,只需要把其他机器的tasks文件夹里的.json文件放入此目录的tasks文件夹里即可。同理执行号文件可以通过复制execution_instances文件夹中的.json文件来导入。注意,两个文件夹里的.json文件只支持命名为大于0的数字。
MacOS版本的软件有一个问题可能存在,即软件所调用的Chrome软件会在打开后经常性自动更新,但软件所依赖的Chromedriver版本并不会随着chrome自动更新,从而导致软件打不开chrome的问题。注意此版本的EasySpider使用的Chrome为111.0版本,如果使用过程中发现Chrome无法打开,请到Github Issues页面提issue,作者将会更新最新版本的软件供大家使用。
检查Chrome版本的方式为:进入EasySpider软件内部,即右键软件“显示包内容”,然后进入Contents/Resources/app文件夹内,手动双击打开chrome_mac64软件打开chrome,然后打开设置->关于Chrome来查看chrome版本是否为111.0版本。
如果不是,除了提出issue外,也可以自行到以下网址下载对应自己当前chrome版本的macOS版本的chromedriver:https://chromedriver.chromium.org/downloads
并放在上面提到的Contents/Resources/app文件夹内,更名并替换掉“chromedriver_mac64”文件即可使软件恢复正常使用。
Due to the complex security settings of MacOS, the issue of being unable to open software due to the "unverified developer" message may occur upon the first attempt to open the software. Please refer to the following GitHub document to see how to open software and perform tasks on your MacOS version:
https://github.com/NaiboWang/EasySpider/wiki/MacOS-Guide
File access permissions must be granted, microphone permissions are not necessary at all, and the author is not sure why microphone permissions are being requested, so they can be declined.
Tasks can be imported from other machines by simply placing the .json files from the "tasks" folder of those machines into the "tasks" folder of this directory. Similarly, execution instance files can be imported by copying the .json files from the "execution_instances" folder. Note that only files named with a number greater than 0 are supported in both folders.
There is a potential issue with the software for MacOS, in that the Chrome software called by the software often updates automatically after opening, but the version of Chromedriver that the software relies on does not update automatically with Chrome, leading to the problem of being unable to open Chrome. Note that the EasySpider version used for Chrome is 111.0. If Chrome cannot be opened during use, please report the issue on the GitHub Issues page, and the author will update the latest version of the software for everyone to use.
To check the Chrome version, enter the EasySpider software and right-click to "Show Package Contents". Then go to Contents/Resources/app folder and double-click on the chrome_mac64 software to open Chrome. Then go to Settings -> About to check if the Chrome version is 111.0.
If it is not, besides reporting the issue, you can also download the corresponding macOS version of Chromedriver for your current Chrome version from the following website: https://chromedriver.chromium.org/downloads
Place the downloaded Chromedriver in the Contents/Resources/app folder mentioned above, rename it and replace the "chromedriver_mac64" file to restore normal use of the software.

+ 1
- 0
Releases/EasySpider_MacOS_all_arch/tasks/11.json
ファイル差分が大きすぎるため省略します
ファイルの表示


+ 1
- 0
Releases/EasySpider_MacOS_all_arch/tasks/15.json
ファイル差分が大きすぎるため省略します
ファイルの表示


+ 1
- 0
Releases/EasySpider_MacOS_all_arch/tasks/16.json
ファイル差分が大きすぎるため省略します
ファイルの表示


+ 1
- 0
Releases/EasySpider_MacOS_all_arch/tasks/17.json
ファイル差分が大きすぎるため省略します
ファイルの表示


+ 1
- 0
Releases/EasySpider_MacOS_all_arch/tasks/19.json
ファイル差分が大きすぎるため省略します
ファイルの表示


+ 1
- 0
Releases/EasySpider_MacOS_all_arch/tasks/2.json
ファイル差分が大きすぎるため省略します
ファイルの表示


+ 1
- 0
Releases/EasySpider_MacOS_all_arch/tasks/20.json ファイルの表示

@ -0,0 +1 @@
{"id": 20, "name": "Bilibili\u7c89\u4e1d", "url": "https://space.bilibili.com/291929894/fans/fans", "links": "https://space.bilibili.com/291929894/fans/fans", "containJudge": false, "desc": "https://space.bilibili.com/291929894/fans/fans", "inputParameters": [{"id": 0, "name": "urlList_0", "nodeId": 1, "nodeName": "Open Page", "value": "https://space.bilibili.com/291929894/fans/fans", "desc": "List of URLs to be collected, separated by \\n for multiple lines", "type": "string", "exampleValue": "https://space.bilibili.com/291929894/fans/fans"}, {"id": 1, "name": "loopTimes_Loop_1", "nodeId": 2, "nodeName": "Loop", "desc": "Number of loop executions, 0 means unlimited loops (until element not found)", "type": "int", "exampleValue": 0, "value": 0}], "outputParameters": [{"id": 0, "name": "\u53c2\u65701_\u6587\u672c", "desc": "", "type": "string", "exampleValue": "\u5bf9\u65b9\u7b54\u590d5"}], "graph": [{"index": 0, "id": 0, "parentId": 0, "type": -1, "option": 0, "title": "root", "sequence": [1, 2], "parameters": {"history": 1, "tabIndex": 0, "useLoop": false, "xpath": "", "wait": 0}, "isInLoop": false}, {"id": 1, "index": 1, "parentId": 0, "type": 0, "option": 1, "title": "Open Page", "sequence": [], "isInLoop": false, "position": 0, "parameters": {"useLoop": false, "xpath": "", "wait": 0, "url": "https://space.bilibili.com/291929894/fans/fans", "links": "https://space.bilibili.com/291929894/fans/fans", "scrollType": 0, "scrollCount": 0}}, {"id": 2, "index": 2, "parentId": 0, "type": 1, "option": 8, "title": "Loop", "sequence": [4], "isInLoop": false, "position": 1, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "//a[contains(text(),\"\u4e0b\u4e00\u9875\")]", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 0, "pathList": "", "textList": "", "exitCount": 0, "historyWait": 2}}, {"id": -1, "index": 3, "parentId": 2, "type": 0, "option": 2, "title": "Click Element", "sequence": [], "isInLoop": true, "position": 1, "parameters": {"history": 4, "tabIndex": -1, "useLoop": true, "xpath": "//*[@id=\"page-follows\"]/div[1]/div[2]/div[2]/div[2]/ul[2]/li[7]", "wait": 1, "scrollType": 0, "scrollCount": 0, "paras": [], "loopType": 0}}, {"id": 3, "index": 4, "parentId": 2, "type": 1, "option": 8, "title": "Loop", "sequence": [5], "isInLoop": true, "position": 0, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "/html/body/div[2]/div[4]/div[1]/div[1]/div[1]/div[2]/div[2]/div[2]/ul[1]/li/div[2]/a[1]/span[1]", "wait": 0, "scrollType": 0, "scrollCount": 0, "loopType": 1, "pathList": "", "textList": "", "exitCount": 0, "historyWait": 2}}, {"id": 4, "index": 5, "parentId": 3, "type": 0, "option": 3, "title": "Extract Data", "sequence": [], "isInLoop": true, "position": 0, "parameters": {"history": 4, "tabIndex": -1, "useLoop": false, "xpath": "", "wait": 0, "paras": [{"nodeType": 0, "contentType": 0, "relative": true, "name": "\u53c2\u65701_\u6587\u672c", "desc": "", "relativeXpath": "", "exampleValues": [{"num": 0, "value": "\u5bf9\u65b9\u7b54\u590d5"}], "default": ""}], "loopType": 1}}]}

+ 1
- 0
Releases/EasySpider_MacOS_all_arch/tasks/23.json
ファイル差分が大きすぎるため省略します
ファイルの表示


+ 1
- 0
Releases/EasySpider_MacOS_all_arch/tasks/25.json
ファイル差分が大きすぎるため省略します
ファイルの表示


+ 1
- 0
Releases/EasySpider_MacOS_all_arch/tasks/27.json
ファイル差分が大きすぎるため省略します
ファイルの表示


+ 1
- 0
Releases/EasySpider_MacOS_all_arch/tasks/28.json
ファイル差分が大きすぎるため省略します
ファイルの表示


+ 1
- 0
Releases/EasySpider_MacOS_all_arch/tasks/29.json
ファイル差分が大きすぎるため省略します
ファイルの表示


+ 1
- 0
Releases/EasySpider_MacOS_all_arch/tasks/30.json
ファイル差分が大きすぎるため省略します
ファイルの表示


+ 1
- 0
Releases/EasySpider_MacOS_all_arch/tasks/31.json
ファイル差分が大きすぎるため省略します
ファイルの表示


+ 1
- 0
Releases/EasySpider_MacOS_all_arch/tasks/32.json ファイルの表示

@ -0,0 +1 @@
{"id":32,"name":"知乎_登录后采集","url":"https://www.zhihu.com","links":"https://www.zhihu.com","containJudge":false,"desc":"https://www.zhihu.com\n使用带用户配置的浏览器模式来先手工登录后保存信息,再接着执行。","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.zhihu.com","desc":"要采集的网址列表,多行以\\n分开","type":"string","exampleValue":"https://www.zhihu.com"}],"outputParameters":[{"id":0,"name":"参数1_文本","desc":"","type":"string","exampleValue":"历史上有哪些通过“正当手段”干出不正当事的人物?"}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"url":"https://www.zhihu.com","links":"https://www.zhihu.com","scrollType":0,"scrollCount":0}},{"id":2,"index":2,"parentId":0,"type":1,"option":8,"title":"循环","sequence":[3],"isInLoop":false,"position":1,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"","wait":0,"scrollType":0,"scrollCount":0,"loopType":2,"pathList":"//*[contains(@class, \"css-0\")]/div[2]/div[1]/div[1]/div[1]/h2[1]/div[1]\n//*[contains(@class, \"css-0\")]/div[3]/div[1]/div[1]/div[1]/h2[1]/div[1]\n//*[contains(@class, \"css-0\")]/div[4]/div[1]/div[1]/div[1]/h2[1]/div[1]\n//*[contains(@class, \"css-0\")]/div[5]/div[1]/div[1]/div[1]/h2[1]/div[1]\n//*[contains(@class, \"css-0\")]/div[6]/div[1]/div[1]/div[1]/h2[1]/div[1]\n//*[contains(@class, \"css-0\")]/div[7]/div[1]/div[1]/div[1]/h2[1]/div[1]\n//*[contains(@class, \"css-0\")]/div[8]/div[1]/div[1]/div[1]/h2[1]/div[1]\n//*[contains(@class, \"css-0\")]/div[9]/div[1]/div[1]/div[1]/h2[1]/div[1]\n//*[contains(@class, \"css-0\")]/div[10]/div[1]/div[1]/div[1]/h2[1]/div[1]\n//*[contains(@class, \"css-0\")]/div[11]/div[1]/div[1]/div[1]/h2[1]/div[1]\n//*[contains(@class, \"css-0\")]/div[12]/div[1]/div[1]/div[1]/h2[1]/div[1]\n//*[contains(@class, \"css-0\")]/div[13]/div[1]/div[1]/div[1]/h2[1]/div[1]","textList":"","exitCount":0,"historyWait":2}},{"id":3,"index":3,"parentId":2,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"","wait":0,"paras":[{"nodeType":0,"contentType":0,"relative":true,"name":"参数1_文本","desc":"","relativeXpath":"","exampleValues":[{"num":0,"value":"历史上有哪些通过“正当手段”干出不正当事的人物?"},{"num":1,"value":"新加坡有哪些不好的地方?"},{"num":2,"value":"孙悟空可以秒杀山村老尸那样的厉鬼吗?"},{"num":3,"value":"为什么渐渐厌倦玩《原神》了?"},{"num":4,"value":"历史上有哪些著名的考古乌龙事件?"},{"num":5,"value":"苹果公司为什么能把用户调教得这么好?"},{"num":6,"value":"哪个瞬间让你发现了世界的bug?"},{"num":7,"value":"假如中国的院士,想为亲属谋体制内的工作,难度大吗?为什么?"},{"num":8,"value":"你一直珍藏的视频是哪个?"},{"num":9,"value":"如何评价《原神》角色艾莉丝?"},{"num":10,"value":"索罗斯如何做空的英镑、泰铢?为什么做空香港失败了?"},{"num":11,"value":"如何在婚前认清并杜绝王力宏这种男人?"}],"default":""}],"loopType":2}}]}

+ 1
- 0
Releases/EasySpider_MacOS_all_arch/tasks/33.json ファイルの表示

@ -0,0 +1 @@
{"id":33,"name":"JD","url":"https://www.jd.com","links":"https://www.jd.com","containJudge":false,"desc":"https://www.jd.com","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.jd.com","desc":"要采集的网址列表,多行以\\n分开","type":"string","exampleValue":"https://www.jd.com"},{"id":1,"name":"inputText_1","nodeName":"输入文字","nodeId":2,"desc":"要输入的文本,如京东搜索框输入:电脑","type":"string","exampleValue":"123","value":"123"}],"outputParameters":[],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2,3],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"url":"https://www.jd.com","links":"https://www.jd.com","scrollType":0,"scrollCount":0}},{"id":2,"index":2,"parentId":0,"type":0,"option":4,"title":"输入文字","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"key\"]","wait":0,"value":"123"}},{"id":3,"index":3,"parentId":0,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"search-btn\"]/i[1]","wait":0,"scrollType":0,"scrollCount":0,"paras":[]}}]}

+ 1
- 0
Releases/EasySpider_MacOS_all_arch/tasks/34.json ファイルの表示

@ -0,0 +1 @@
{"id":34,"name":"新web采集任务","url":"https://www.jd.com","links":"https://www.jd.com","containJudge":false,"desc":"https://www.jd.com","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.jd.com","desc":"要采集的网址列表,多行以\\n分开","type":"string","exampleValue":"https://www.jd.com"}],"outputParameters":[],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"url":"https://www.jd.com","links":"https://www.jd.com","scrollType":0,"scrollCount":0}}]}

+ 1
- 0
Releases/EasySpider_MacOS_all_arch/tasks/35.json ファイルの表示

@ -0,0 +1 @@
{"id":35,"name":"新web采集任务","url":"https://www.jd.com","links":"https://www.jd.com","containJudge":false,"desc":"https://www.jd.com","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.jd.com","desc":"要采集的网址列表,多行以\\n分开","type":"string","exampleValue":"https://www.jd.com"},{"id":1,"name":"inputText_1","nodeName":"输入文字","nodeId":2,"desc":"要输入的文本,如京东搜索框输入:电脑","type":"string","exampleValue":"赛啃老","value":"赛啃老"}],"outputParameters":[],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"url":"https://www.jd.com","links":"https://www.jd.com","scrollType":0,"scrollCount":0}},{"id":2,"index":2,"parentId":0,"type":0,"option":4,"title":"输入文字","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"key\"]","wait":0,"value":"赛啃老"}}]}

+ 1
- 0
Releases/EasySpider_MacOS_all_arch/tasks/36.json ファイルの表示

@ -0,0 +1 @@
{"id":36,"name":"新web采集任务","url":"https://www.jd.com","links":"https://www.jd.com","containJudge":false,"desc":"https://www.jd.com","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.jd.com","desc":"要采集的网址列表,多行以\\n分开","type":"string","exampleValue":"https://www.jd.com"}],"outputParameters":[],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"url":"https://www.jd.com","links":"https://www.jd.com","scrollType":0,"scrollCount":0}}]}

+ 1
- 0
Releases/EasySpider_MacOS_all_arch/tasks/4.json
ファイル差分が大きすぎるため省略します
ファイルの表示


+ 1
- 0
Releases/EasySpider_MacOS_all_arch/tasks/5.json
ファイル差分が大きすぎるため省略します
ファイルの表示


+ 1
- 0
Releases/EasySpider_MacOS_all_arch/tasks/6.json
ファイル差分が大きすぎるため省略します
ファイルの表示


+ 1
- 0
Releases/EasySpider_MacOS_all_arch/tasks/7.json
ファイル差分が大きすぎるため省略します
ファイルの表示


読み込み中…
キャンセル
保存