-
-
Notifications
You must be signed in to change notification settings - Fork 4.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CentOS下编译程序指南 #236
Comments
好的,我先去看看,非常感谢答复 |
根据说明,修改了权限,现在运行npm run start_direct,主程序可以跑起来了, 也能浏览任务, 但点击设计任务后,会报以下错误: GET A MESSAGE: { type: 0, message: { id: 1 } } GET A MESSAGE: { type: 0, message: { id: 2 } } 还请再帮忙看看是哪里出了问题? 另外,运行npm run start_direct,主程序起来后,后台有如下报错,不知道有没有影响
Server has started. 以上非常非常感谢 |
遇到的错误信息 UnhandledPromiseRejectionWarning: Error: spawn [...] EACCES 通常说明了以下两个主要问题: 权限问题:EACCES(Error Access)表明你执行 chromedriver_linux64 二进制文件时没有设置必要的执行权限,或者运行 Electron 应用程序的用户没有必要的权限。 未处理的承诺拒绝:意味着你的代码中存在一个被拒绝的承诺,且该拒绝没有被适当地通过 .catch 处理程序捕获,或者在 async 函数中没有被 try/catch 块捕获。 解决这些问题,可以按照以下步骤操作: 解决 EACCES 错误
检查所有者权限: 验证当前用户是否具有访问该文件的权限。如果不是,请使用 chown 或者 sudo 命令改变所有者或者允许当前用户访问该文件。 解决未处理的承诺拒绝问题 someAsyncFunction()
.then((result) => {
// 处理结果
})
.catch((error) => {
// 错误处理
console.error(error);
}); 或者在 async 函数中: async function asyncCall() {
try {
let result = await someAsyncFunction();
// 处理结果
} catch (error) {
// 错误处理
console.error(error);
}
} 确保在应用程序中每个异步任务都被适当地管理和捕获错误,这样可以防止它们造成未处理的承诺拒绝警告。 |
好的,非常非常感谢,我再对照看看 |
按照回复修改了chromedriver_linux64的权限,加上执行权限就好了,主程序可以跑起来了,点设计新任务也能够设计了 按照编译说明,开始进行执行阶段程序的编译, [user1@cent11 ExecuteStage]$ python3 easyspider_executestage.py --id [1] Configurations: linux ('64bit', 'ELF') Absolute_user_data_folder: D:\Documents\Projects\EasySpider\ElectronJS\user_data <selenium.webdriver.chrome.options.Options object at 0x7fb099ac03a0> Cannot automatically check new version, please use the following command to check whether a new version avaliable and upgrade by pip: During handling of the above exception, another exception occurred: Traceback (most recent call last): 我看出错提示好像是说FileNotFoundError: [Errno 2] No such file or directory: '../ElectronJS/chrome_win64/chromedriver_win64.exe',没有找到chromedriver_win64.exe这个文件,我这个是linux环境,应该是chromedriver_linux64这个文件才对啊。 是我哪里执行错了吗? 还请再帮忙看看,非常非常感谢 |
直接修改代码中'../ElectronJS/chrome_win64/chromedriver_win64.exe'那行的路径为你Linux的chromedriver路径即可。 |
好的,非常非常感谢,我再对照看看 |
依据您的回复,我把easyspider_executestage.py中的chrome和chromedriver名称和路径修改了, 现在运行python3 easyspider_executestage.py --id [1] 不过后台还是报错有文件找不到, Configurations: Cannot automatically check new version, please use the following command to check whether a new version avaliable and upgrade by pip: Absolute_user_data_folder: D:\Documents\Projects\EasySpider\ElectronJS\user_data <selenium.webdriver.chrome.options.Options object at 0x7f36023b13a0> 我查了一下,这个目录确实没有这个js文件,但不知道从哪里去找, 另外我以为是不是直接打包到主程序能够绕过这个问题,按照编译说明 [user1@cent11 ExecuteStage]$ ./generateExecutable_Linux64.sh 这块也麻烦帮忙看看,非常非常感谢。 |
ElectronJS文件夹下有这个文件,拷贝到指定目录即可。 下面的打包脚本是Ubuntu的,不能混用。 |
好的,我拷贝下看看, 另外打包脚本如果是Ubuntu下用的话,CentOS下问下要如何修改吗? 这几行除了第三行,都是删除和拷贝文件的命令,不知道从何改起? |
不需要打包,能运行起来就行,一定要打包这个脚本可以不用改。 |
拷贝了stealth.min.js到chrome_linux64后,能够正常设计任务和保存任务了, 我按照之前的说明,在ElectronJS目录下也没有找到这个文件,只找到execute_macos.sh 和execute.bat文件, 我试着修改execute_macos.sh这个文件, #!/bin/bash echo "Executing EasySpider on MacOS" ./easyspider_executestage $1 $2 $3 $4 $5 $6 $7 $8 $9 但发现easyspider_executestage 这个文件也没有,按照编译说明,这似乎是执行阶段编译打包后产生的文件, 试着执行打包命令, [user1@cent11 ExecuteStage]$ ./generateExecutable_Linux64.sh 仍然还是报以上错误,并且我实际上也是想打包部署到服务器上使用的, 以上还请再帮忙看看我的问题出在了哪儿?非常非常感谢! |
好的,我试试,非常非常感谢 |
按照推荐的方法搜索拷贝两个文件到相应目录,不行,于是查看了execute.sh,发现执行文件的路径不对, 于是想是不是还是得CentOS环境打包编译执行阶段的程序,重新去执行编译generateExecutable_Linux64.sh,这个脚本去排查问题,发现是pyinstaller找不到,在脚本中指定pyintaller的绝对路径,又解决了提示python3 enable--share参数问题后,打包成功了, dist目录下的easyspider_executestage也自动拷贝到chrome_linux下。 试着在ExecuteStage目录下执行python3 easyspider_executestage.py --id [2],也修改了config.json下的数据文件位置,也还是不行,提示如下,目录下也没有生成的数据文件。 Configurations: linux ('64bit', 'ELF') Absolute_user_data_folder: /home/user1/crawler_data <selenium.webdriver.chrome.options.Options object at 0x7f072c6863a0> Cannot automatically check new version, please use the following command to check whether a new version avaliable and upgrade by pip: 目前不知道从哪方面着手解决问题了,还请再帮忙看看,非常非常感谢。。 |
参考:#239 |
好的,我看看对照下 |
确实是我把执行任务的ID搞错了,我execution_instances下只有0.json和1.json。 python3 easyspider_executestage.py --id [0] 通过命令行./chrome_linux64/easyspider_executestage --id '[0]' --user_data 0 --server_address http://localhost:8074 --config_folder "/mysofts/crawler/EasySpider-0.3.5-c/ElectronJS/" --headless 0 --read_type remote --config_file_name config.json --saved_file_name 很是开心,非常非常感谢您的指导和帮助 现在就是只有在任务页面下点击【本地直接执行】不行,没有反应,后台也看不到报错,就只是正常的提示信息: GET A MESSAGE: { type: 5, message: { id: 2, user_data_folder: '', execute_type: 0 } } GET A MESSAGE: { type: 5, message: { id: 2, user_data_folder: '', execute_type: 0 } } GET A MESSAGE: { type: 5, message: { id: 3, user_data_folder: '', execute_type: 1 } } data目录下也看不到数据。 这个是和我用x11 forward的方式来打开的有关系吗?设计任务的时候可以正常设计和保存,不知道运行的时候为什么不行? |
本地直接执行需要依赖目录下的 driverPath = path.join(__dirname, "chrome_linux64/chromedriver_linux64");
chromeBinaryPath = path.join(__dirname, "chrome_linux64/chrome");
execute_path = path.join(__dirname, "chrome_linux64/execute.sh");
let spawn = require("child_process").spawn;
if (process.platform != "darwin" && msg.message.execute_type == 1 && msg.message.id != -1) {
let child_process = spawn(execute_path, parameters);
child_process.stdout.on('data', function (data) {
console.log(data.toString());
});
} |
好的,明白了,我再试试看,非常非常感谢 |
按照源码中的编译说明,先编译的主程序ElectronJS,
CentOS上下载安装了最新的chrome ,命令google-chrome-stable -version,显示Google Chrome 119.0.6045.159
也按照说明将/opt/google/chrome/,全部copy到了ElectronJS下,并重命名为chrome_linux64。
也下载了对应版本的chromedriver_linux64,放到了chrome_linux64下
npm install和npm install @electron-forge/cli -g 两个命令也都执行安装成功了(换了taobao源,npm安装过程中提示需要python3,也安装了python3.8.15,安装后命令执行成功)
但最后执行npm run start_direct,总是报错,
用root用户执行会报:
[1120/000559.944607:FATAL:electron_main_delegate.cc(294)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
/mysofts/crawler/EasySpider-0.3.5-c/ElectronJS/node_modules/electron/dist/electron exited with signal SIGTRAP
切换普通用户后执行报错:
[13824:1120/000541.120354:FATAL:setuid_sandbox_host.cc(158)] The SUID sandbox helper binary was found, but is not configured correctly. Rather than run without sandboxing I'm aborting now. You need to make sure that /mysofts/crawler/EasySpider-0.3.5-c/ElectronJS/node_modules/electron/dist/chrome-sandbox is owned by root and has mode 4755.
/mysofts/crawler/EasySpider-0.3.5-c/ElectronJS/node_modules/electron/dist/electron exited with signal SIGTRAP
麻烦帮忙看看,是哪里出了问题?万分感谢!!!
The text was updated successfully, but these errors were encountered: