Google App Engine中的无头Chrome浏览器在哪里

时间:2019-07-23 18:42:30

标签: google-app-engine pyppeteer

我正在寻找可执行文件在Google App Engine(标准环境)中的位置。

原因是我试图使用pyppeteer进行某些工作,但是pyppeteer总是将Chrome下载到自定义文件夹中,然后退出。

我看到puppeteer在GAE上运行,因此我希望我能说服pyppeteer也可以运行。

以下是Google App Engine日志:

2019-07-23 17:39:33 default[test]  [W:pyppeteer.chromium_downloader] start chromium download.
2019-07-23 17:39:33 default[test]  Download may take a few minutes.
2019-07-23 17:39:33 default[test]
2019-07-23 17:39:34 default[test]    0%|          | 0/106826418 [00:00<?, ?it/s]
2019-07-23 17:39:34 default[test]    2%|▏         | 1925120/106826418 [00:00<00:07, 13602613.39it/s]
2019-07-23 17:39:34 default[test]    4%|▍         | 4392960/106826418 [00:00<00:06, 15716861.03it/s]
2019-07-23 17:39:34 default[test]    6%|▌         | 6256640/106826418 [00:00<00:06, 16489218.92it/s]
2019-07-23 17:39:34 default[test]    8%|▊         | 8407040/106826418 [00:00<00:05, 17728112.85it/s]
2019-07-23 17:39:34 default[test]   11%|█         | 11683840/106826418 [00:00<00:04, 20557603.00it/s]
2019-07-23 17:39:34 default[test]   13%|█▎        | 14356480/106826418 [00:00<00:04, 22086461.51it/s]
2019-07-23 17:39:34 default[test]   16%|█▌        | 17008640/106826418 [00:00<00:03, 23246105.82it/s]
2019-07-23 17:39:34 default[test]   18%|█▊        | 19374080/106826418 [00:00<00:03, 23225442.25it/s]
2019-07-23 17:39:35 default[test]   20%|██        | 21729280/106826418 [00:00<00:03, 23203081.94it/s]
2019-07-23 17:39:35 default[test]   24%|██▍       | 25681920/106826418 [00:01<00:03, 26483368.08it/s]
2019-07-23 17:39:35 default[test]   27%|██▋       | 28508160/106826418 [00:01<00:02, 26759076.64it/s]
2019-07-23 17:39:35 default[test]   29%|██▉       | 31313920/106826418 [00:01<00:02, 26995282.49it/s]
2019-07-23 17:39:35 default[test]   32%|███▏      | 34375680/106826418 [00:01<00:02, 27987817.70it/s]
2019-07-23 17:39:35 default[test]   35%|███▍      | 37253120/106826418 [00:01<00:02, 28005026.46it/s]
2019-07-23 17:39:35 default[test]   38%|███▊      | 40212480/106826418 [00:01<00:02, 28458335.10it/s]
2019-07-23 17:39:35 default[test]   40%|████      | 43100160/106826418 [00:01<00:02, 28379615.37it/s]
2019-07-23 17:39:35 default[test]   43%|████▎     | 45967360/106826418 [00:01<00:02, 22218027.73it/s]
2019-07-23 17:39:36 default[test]   45%|████▌     | 48414720/106826418 [00:01<00:02, 22336538.22it/s]
2019-07-23 17:39:36 default[test]   48%|████▊     | 51435520/106826418 [00:02<00:02, 24224996.22it/s]
2019-07-23 17:39:36 default[test]   51%|█████▏    | 54763520/106826418 [00:02<00:01, 26376309.32it/s]
2019-07-23 17:39:36 default[test]   54%|█████▍    | 57569280/106826418 [00:02<00:02, 21505161.66it/s]
2019-07-23 17:39:36 default[test]   56%|█████▌    | 60078080/106826418 [00:02<00:02, 22466550.18it/s]
2019-07-23 17:39:36 default[test]   59%|█████▉    | 63027200/106826418 [00:02<00:01, 24192591.42it/s]
2019-07-23 17:39:36 default[test]   61%|██████▏   | 65628160/106826418 [00:02<00:01, 24070010.24it/s]
2019-07-23 17:39:36 default[test]   64%|██████▍   | 68556800/106826418 [00:02<00:01, 25428249.96it/s]
2019-07-23 17:39:36 default[test]   68%|██████▊   | 72529920/106826418 [00:02<00:01, 28506739.68it/s]
2019-07-23 17:39:37 default[test]   71%|███████   | 75581440/106826418 [00:02<00:01, 28986836.20it/s]
2019-07-23 17:39:37 default[test]   74%|███████▎  | 78622720/106826418 [00:03<00:00, 29210576.39it/s]
2019-07-23 17:39:37 default[test]   76%|███████▋  | 81643520/106826418 [00:03<00:01, 22926790.84it/s]
2019-07-23 17:39:37 default[test]   79%|███████▉  | 84224000/106826418 [00:03<00:00, 23612840.24it/s]
2019-07-23 17:39:37 default[test]   82%|████████▏ | 87193600/106826418 [00:03<00:00, 25157952.55it/s]
2019-07-23 17:39:37 default[test]   84%|████████▍ | 89937920/106826418 [00:03<00:00, 25797481.66it/s]
2019-07-23 17:39:37 default[test]   87%|████████▋ | 92672000/106826418 [00:03<00:00, 26235841.07it/s]
2019-07-23 17:39:37 default[test]   89%|████████▉ | 95488000/106826418 [00:03<00:00, 26776710.45it/s]
2019-07-23 17:39:37 default[test]   92%|█████████▏| 98232320/106826418 [00:03<00:00, 26824171.60it/s]
2019-07-23 17:39:38 default[test]   95%|█████████▍| 100966400/106826418 [00:03<00:00, 26803548.31it/s]
2019-07-23 17:39:38 default[test]   97%|█████████▋| 103925760/106826418 [00:04<00:00, 27583062.30it/s]
2019-07-23 17:39:38 default[test]  100%|██████████| 106826418/106826418 [00:04<00:00, 25706775.94it/s]
2019-07-23 17:39:38 default[test]  [W:pyppeteer.chromium_downloader]
2019-07-23 17:39:38 default[test]  chromium download done.
2019-07-23 17:39:44 default[test]  [W:pyppeteer.chromium_downloader] chromium extracted to: /root/.local/share/pyppeteer/local-chromium/575458
2019-07-23 17:39:46 default[test]  [I:pyppeteer.launcher] Browser listening on: ws://127.0.0.1:22168/devtools/browser/c820f895-a90a-4242-a3fa-35dfda06be3f
2019-07-23 17:39:48 default[test]  [2019-07-23 17:39:48 +0000] [9] [INFO] Handling signal: term
2019-07-23 17:39:48 default[test]  [2019-07-23 17:39:48 +0000] [17] [INFO] Worker exiting (pid: 17)```

2 个答案:

答案 0 :(得分:2)

Pyppeteer正在将Chrome可执行文件下载到不可写的本地文件系统[1],这就是为什么当它尝试访问文件时,该文件不再存在并退出的原因。您可以将铬下载到Google Cloud Storage上的存储桶中,然后从那里读取文件。

  

[1] Reading and Writing Files

     

在App Engine中,应用程序部署到的本地文件系统不可写。此行为可确保您的应用程序的安全性和可伸缩性。

     

但是,如果应用程序需要在运行时读写文件,则App Engine提供了内置的Google Cloud Storage流包装器,可让您使用许多标准的PHP文件系统功能来读写App Engine中的文件PHP应用。

答案 1 :(得分:0)

您实际上可以在Google App Engine Flex上运行Pyppeteer。您只需要定义一个Dockerfile并指向图像容器gcr.io/google_appengine/python,它是GCR的标准Python图像。

然后,您将要添加所有允许Chromium运行的linux库。

这是docker文件:

FROM gcr.io/google_appengine/python
RUN apt-get update && apt-get -y install  gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget

RUN virtualenv /env
ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH

RUN mkdir /your/app/path
ADD . /your/app/path
WORKDIR /your/app/path
ADD requirements.txt /your/app/path/requirements.txt
RUN pip3 install -r /your/app/path/requirements.txt
EXPOSE 8080
ENTRYPOINT ["gunicorn", "-b", ":8080", "main:app"]

然后在您的python文件中设置标志

args = ['--no-sandbox']
browser = await launch(args=args)
page = await browser.newPage()

因此Chromium可以以root身份运行。

您可以查看我的完整演练和说明here