首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PM2运行带有Selenium和Chromedriver的Python应用程序经常崩溃和重新启动

使用PM2运行带有Selenium和Chromedriver的Python应用程序经常崩溃和重新启动
EN

Stack Overflow用户
提问于 2018-04-11 18:13:57
回答 1查看 409关注 0票数 0

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

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

代码语言:javascript
复制
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

这些是我的镀铬选项:

代码语言:javascript
复制
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本身直接位于apps父目录中。

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

代码语言:javascript
复制
{
  "apps" : 
  [
    {
      "name"        : "Scraper",
      "script"      : "Scraper.py",
      "interpreter" : "python3",
      "watch"       : true
    }
  ]
}

我所做的就是PM2 start Scraper-process.json,然后是PM2 logs Scraper来查看输出。

编辑:以下是色度驱动程序的初始化

代码语言:javascript
复制
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))

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

代码语言:javascript
复制
browser.get(ourURL)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-12 21:48:45

问题似乎出现在我的PM2进程文件中。我错误地将"watch“设置为true,忘记了应用程序经常对文件进行更改,这导致pm2每次都重新启动应用程序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49781900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档