是否可以在电子应用程序之外运行 python 代码

Posted

技术标签:

【中文标题】是否可以在电子应用程序之外运行 python 代码【英文标题】:is it possible to run python code outside of electron application 【发布时间】:2021-07-07 23:58:49 【问题描述】:

所以我使用 javascript html css 等创建了一个桌面电子应用程序,我有一个机器人,当用户单击按钮时,我想运行该机器人,该机器人是用 python 编写的。 bot 所做的是使用 selenium 和 chrome 驱动程序进行网络抓取 我只是想知道有没有一种方法可以将 bot 及其源代码存储在客户端计算机之外,这样源代码是不可见的,并且仍然使客户端能够使用bot 到 webscrape。

对不起,如果这是一个新手问题,我来自 c++ 和 swift 移动开发,我是一名初级 CS 学生,所以我只是在自学新东西。

【问题讨论】:

这绝对是可能的,不过你必须将你的 python 代码变成一个面向公众的 web 服务器。您可以为此使用烧瓶,但您还需要托管。 @ChrisG 通过面向公众的网络服务器,您到底是什么意思,托管您的意思是 heroku 或 AWS 对。那么使用flask的电子应用程序会与服务器通信并从那里运行代码以访问chromedriver? 好吧,不管涉及哪种语言,如果你想对用户隐藏你的抓取代码,你需要把它放在一个网络服务器上,然后从你的电子应用程序向服务器发出请求。您的 python 代码正在执行抓取,因此您不妨将其扩展为 Web 服务器。 IE。包含您的机器人的烧瓶应用程序托管在服务器上。这可能行得通吗? pythonanywhere.com 是的,我想知道服务器上的请求是否可以在客户端计算机上运行,​​因此请在他们的计算机上打开 chrome 驱动程序。 if the requests on the server can run on the clients computer ...?我不认为你可以让 python 机器人“在”客户端的计算机“外部”和“内部”的 chrome 抓取过程。这个想法是电子应用程序向基于 python 的服务器发出请求,然后进行抓取;结果作为对请求的响应返回。另外:你为什么要对客户端隐藏抓取代码?你首先要刮什么?这可能都是一个巨大的XY problem 【参考方案1】:

我同意 Chris G 的观点,认为使用 Python 的众多 Web 框架(Django、FastAPI、Flask 等)之一创建 Web 应用程序是最佳实践。

或者,使用 python-shell 包,这可以通过电子非常简单地完成:

const  app, BrowserWindow  = require('electron');
const pyshell = require('python-shell')

function createWindow() 
  window = new BrowserWindow( width: 600, height: 450 );
  window.loadFile('index.html');
        
  pyshell.run('your_script.py', function (err, results) 
    if (err) 
      throw err;
    
  );


app.on('ready', createWindow);

app.on('window-all-closed', () => 
  if (process.platform !== 'darwin') 
    app.quit()
  

Source

然后,用一个简单的python脚本your_script.py

a = 'Foo'
b = 'Bar'
print(a + b)

这个例子很简单。如果您不想在发布应用时遇到任何兼容性问题,那么创建自己的面向 Web 的 API 将是您的最佳选择。

【讨论】:

好的,所以 pyshell 是替代方法,但您建议在我的电子应用程序上使用烧瓶或 Django 连接基本上托管在某种服务器上的 python 代码? @RayRay 正确。创建一个面向 Web 的应用程序,然后在您的电子应用程序中呈现它是最好的。或者,您可以创建一个运行您的 python 脚本的 API(我建议使用 FastAPI)。如果你的脚本有额外的参数要传入,那就太好了。 我已经使用 html、css、javascript 创建了我的应用程序,我不需要更改整个应用程序,只需实现并添加 api。我可能会使用您推荐的快速 api,因为我需要将参数传递给 python 代码。谢谢! @RayRay 您无需进行太多更改 - 只需在您的 html/js 中使用 jQuery 进行一些简单的 ajax 调用,即可向 API 发送请求。虽然 FastAPI 很棒,但它确实需要一些时间来学习。然而,Flask 有数以千计的教程用于构建有效的 REST API。我肯定会在这里考虑您的选择,并尝试权衡每种选择的优缺点。祝你好运! @RayRay,看看其他评论线程,我不太确定 API 是否能够很好地处理 ChromeDriver,如果有的话。尝试解决您的问题会变得非常乏味。 Pythonanywhere 在这种情况下不适用——您需要将您的 Python 应用程序捆绑为实际应用程序。您可以创建 CLI、创建 GUI,但这会带来兼容性问题的风险。查看 PySimpleGUI 或 PyQt5。这应该让您更好地了解从哪里开始。

以上是关于是否可以在电子应用程序之外运行 python 代码的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 Rails 应用程序之外设置重定向规则? [关闭]

上下文或活动之外的 getString

如何使 Python 脚本像 Linux 中的服务或守护程序一样运行

在开发时同步电子应用程序中的代码更改

多部分电子邮件在 Hotmail 之外的任何地方都可以使用

使用 Spectron 测试电子应用重新启动时丢失 webdriverio 会话