当前位置: 首页 > 知识库问答 >
问题:

用Selenium和Chromedriver使用PM2运行Python应用程序时,会经常崩溃和重新启动

从焱
2023-03-14

我一直有一个问题,让我的应用程序运行在PM2.5。这是一个简单的Python3应用程序,使用Selenium和Chrome/ChromeDriver来刮我们的网站。我认为问题要么是Chrome本身位于apps文件夹之外的另一个文件夹中,要么是它一旦启动就失去了与Chrome/ChromeDriver进程的连接,而我只是不知道如何告诉PM2包含那些进程。

脚本在没有PM2的情况下运行良好,所以我不确定问题出在哪里,也不知道如何修复它。以下是它在每次重启后生成的输出(它基本上是不断地启动、崩溃和重启,而从来没有连接到网站):

0|Scraper  | [2018-04-11 10:07:32.222861] STARTING SCRAPER
0|Scraper  | Traceback (most recent call last):
0|Scraper  |   File "/home/myapp/Scraper.py", line 1617, in <module>
0|Scraper  |     process()
0|Scraper  |   File "/home/myapp/Scraper.py", line 164, in process
0|Scraper  |     browser              = webdriver.Chrome(chrome_options = options, executable_path = path_to_chromedriver)
0|Scraper  |   File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/chrome/webdriver.py", line 62, in __init__
0|Scraper  |     self.service.start()
0|Scraper  |   File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/common/service.py", line 100, in start
0|Scraper  |     time.sleep(1)
0|Scraper  | KeyboardInterrupt  <--- I'm guessing this is PM2 killing the app after an error?
0|Scraper  |     Progress is Empty  <--- 'Empty' because it never did anything
0|Scraper  |     Progress SAVED

这些是我的chrome选项:

options  = webdriver.ChromeOptions()
options.binary_location = '/usr/bin/google-chrome'
options.add_argument('headless')
options.add_argument('--log-level=3')
options.add_argument('window-size=1920x1080')
options.add_argument('--mute-audio')
options.add_argument('no-sandbox')

chromedriver本身直接位于应用程序的父目录中。

下面是我的PM2进程json文件:

{
  "apps" : 
  [
    {
      "name"        : "Scraper",
      "script"      : "Scraper.py",
      "interpreter" : "python3",
      "watch"       : true
    }
  ]
}

我所做的只是pm2 start scraper-process.json,然后pm2记录scraper以查看输出。

编辑:这里是chromedriver的初始化

try:
    path_to_chromedriver = "chromedriver"
    browser              = webdriver.Chrome(chrome_options = options, executable_path = path_to_chromedriver)
except Exception as e:
    print("[ERROR] Chromedriver: " + str(e))

然后我把它发到我们的页面:

browser.get(ourURL)

共有1个答案

吕俊美
2023-03-14

问题似乎在我的PM2.5处理文件中。我错误地将“watch”设置为true,忘记了app经常对文件进行更改,这导致pm2每次都要重启app。

 类似资料:
  • 问题是,当我在Google中使用授权运行此代码时,它会立即崩溃: 但是日志中的错误: 2019-06-22 17:55:42.652 29327-23222/?E/AudioSource:在已关闭的AudioSource 2019-06-22 17:55:43.240 2093-2616/?E/TouchFilter:setTouchFilter日志启用参数:0 2019-06-22 17:55:

  • 因此,我试图使用Android Studio进行一个类项目,但是当我尝试启动它时,即使只是一个应该显示“HelloWorld”的空白活动也会崩溃,我不知道为什么。我也不知道如何让错误控制台显示出来,所以我想我应该试着把代码贴在这里,看看它是否因为某种原因出了问题。 这正是android工作室在我用空白活动做一个新项目的时候所做的。 编辑:得到了stacktrace,在这里。

  • 我已经尝试过几次升级flutter,但似乎也没有任何问题: 我最近换了笔记本电脑,并在这个新的笔记本上查看了我的代码的git存储库。有一些问题,但我最终解决了这些问题。唯一的区别是项目名称现在只是,而包名称是-但我认为这不会造成任何问题。 我的猜测是,问题出在我的中的某个地方:

  • 我尝试从firebase获取字符串到ListView,但当我添加行时 应用程序崩溃了,然后就停止了。我确信ListView是正确的。xml(activity\u periferies\u list.xml)。我在另一个活动中使用了相同的代码,并且可以正常工作,但现在我创建的任何新活动中都没有使用相同的代码。 。

  • 问题内容: 我正在制作一个带有mqtt客户端和后台服务的应用程序,当我收到某些mqtt消息时会发出通知。 我使用Paho库和服务作为客户端,只要我连接到wifi并打开代理,一切都可以正常运行。 我不希望通过Internet访问代理,所以当没有wifi可用时,客户端将断开连接,问题是当wifi重新连接时,mqtt客户端将不会重新连接。 我已经尝试了很多事情,但是最新的测试是让处理程序检查是否有互联网