Skip to content
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

feat: dockerize, fix sign in loop #11

Merged
merged 5 commits into from
Apr 9, 2022
Merged

feat: dockerize, fix sign in loop #11

merged 5 commits into from
Apr 9, 2022

Conversation

jackblk
Copy link
Collaborator

@jackblk jackblk commented Mar 30, 2022

I have tried to implement this in Docker, it works nicely inside the container now without captcha (sometimes it displays captcha because I login too many times, but it will go away).

What changed:

  • Dockerize
  • Fixed sign in loop. After signing in, it should redirect to freegames page.
  • Removed chrome channel because it doesn't work for Linux ARM64
  • Upgraded playwright to 1.20.1

You can build with docker build --tag free-games-claimer .

Run with:

docker run --rm -it \
    -p 5900:5900 \
    -v "$(pwd)/userDataDir:/fgc/userDataDir" \
    -v "$(pwd)/screenshots:/fgc/screenshots" \
    --name free-games-claimer \
    free-games-claimer

Then you can connect to the GUI with VNC Viewer on 127.0.0.1:5900. Default password is secret.

#3 should be fixed, but not working for Raspberry 32 bit (<4)
#9 should be closed

TODO:

  • Reduce the image size?
  • Write/fix README for Docker, sign in bug
  • Consider using Firefox? -> can fix raspberry arm 32bit issue, smaller size
  • Handle after login
  • Maximize the browser if it's in container
  • Image without VNC (minimal)

Some further info:

  • Playwright browser binaries only fully supports amd64 and arm64 for now. This means the docker image will not work for Raspberry <4.
  • For arm 32 bit, using local built browser for armhf won't work even if we use executablePath. If you can find a way for it to work with executablePath then we can consider but I doubt it.
  • As much as I want to use Alpine image, it doesn't work with Playwright due to browser binaries again (alpine uses musl instead of glibc).

@jackblk
Copy link
Collaborator Author

jackblk commented Mar 31, 2022

I'll try to reduce the size by experimenting this https://github.com/Zenika/alpine-chrome, but without patching the binaries I think it won't work on newer version of Playwright.

@vogler
Copy link
Owner

vogler commented Mar 31, 2022

Nice, thanks! Just tried it.

Build took 2m 21s on an M1 MBA, GUI says 1.73GB as image size:

$ docker build --tag free-games-claimer .
docker build --tag free-games-claimer .
[+] Building 138.9s (14/14) FINISHED
 => [internal] load build definition from Dockerfile                                                                    0.0s
 => => transferring dockerfile: 1.93kB                                                                                  0.0s
 => [internal] load .dockerignore                                                                                       0.0s
 => => transferring context: 108B                                                                                       0.0s
 => [internal] load metadata for docker.io/library/ubuntu:focal                                                         2.3s
 => [auth] library/ubuntu:pull token for registry-1.docker.io                                                           0.0s
 => [internal] load build context                                                                                       0.3s
 => => transferring context: 4.64MB                                                                                     0.2s
 => [1/8] FROM docker.io/library/ubuntu:focal@sha256:bea6d19168bbfd6af8d77c2cc3c572114eb5d113e6f422573c93cb605a0e2ffb   3.6s
 => => resolve docker.io/library/ubuntu:focal@sha256:bea6d19168bbfd6af8d77c2cc3c572114eb5d113e6f422573c93cb605a0e2ffb   0.0s
 => => sha256:bea6d19168bbfd6af8d77c2cc3c572114eb5d113e6f422573c93cb605a0e2ffb 1.42kB / 1.42kB                          0.0s
 => => sha256:fe2e84436d23f1aa22c44036d3aef84c2493c0c60c1bc814df74eaa9f53a30e0 529B / 529B                              0.0s
 => => sha256:e784f03641c948e19855ca4741e6f4b7ebfbfe7e8b53672083e52efa465d1e97 1.48kB / 1.48kB                          0.0s
 => => sha256:57d0418fe9dcc5262d8c4fcb06c852ad2d0407b541c64d0f5f2e6ec01fd411ba 27.17MB / 27.17MB                        2.7s
 => => extracting sha256:57d0418fe9dcc5262d8c4fcb06c852ad2d0407b541c64d0f5f2e6ec01fd411ba                               0.7s
 => [2/8] RUN apt-get update &&     apt-get install -y curl wget &&     curl -sL https://deb.nodesource.com/setup_16.  22.5s
 => [3/8] RUN apt-get update     && apt-get install --no-install-recommends --no-install-suggests -y     xvfb     xau  12.9s
 => [4/8] WORKDIR /fgc                                                                                                  0.0s
 => [5/8] COPY package.json .                                                                                           0.0s
 => [6/8] RUN export PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true     && npm install     && npx playwright install-deps       85.9s
 => [7/8] COPY . .                                                                                                      0.2s
 => [8/8] RUN mv ./docker/entrypoint.sh /usr/local/bin/entrypoint     && chmod +x /usr/local/bin/entrypoint     && mv   0.3s
 => exporting to image                                                                                                 10.9s
 => => exporting layers                                                                                                10.9s
 => => writing image sha256:7c359b1fa87a1ca4ea7fe70d09f921450aa47d0f6d4d196dcb707ddf613f25a8                            0.0s
 => => naming to docker.io/library/free-games-claimer                                                                   0.0s

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
$ docker run --rm -it \
    -p 5900:5900 \
    -v "$(pwd)/userDataDir:/fgc/userDataDir" \
    --name free-games-claimer \
    free-games-claimer
31/03/2022 14:56:31 passing arg to libvncserver: -rfbport
31/03/2022 14:56:31 passing arg to libvncserver: 5900
31/03/2022 14:56:31 passing arg to libvncserver: -passwd
31/03/2022 14:56:31 x11vnc version: 0.9.16 lastmod: 2019-01-05  pid: 25
Failed to read: session.ignoreBorder
...
Not signed in anymore. Please login and then navigate to the 'Free Games' page.
31/03/2022 14:57:07 Got connection from client 172.17.0.1
...
31/03/2022 15:07:26 destroyed xdamage object: 0x400031
^Ccaught signal: 2X connection to :60 broken (explicit kill or server shutdown).
31/03/2022 15:07:32 deleted 45 tile_row polling images.
extra[1] signal: -1
XIO:  fatal IO error 4 (Interrupted system call) on X server ":60"
      after 269258 requests (269258 known processed) with 0 events remaining.
node:internal/process/esm_loader:94
    internalBinding('errors').triggerUncaughtException(
                              ^

page.waitForNavigation: Navigation failed because page was closed!
=========================== logs ===========================
waiting for navigation to "https://store.epicgames.com/store/en-US/free-games" until "load"
  navigated to "https://www.epicgames.com/id/login/epic?redirect_uri=https%3A%2F%2Fstore.epicgames.com%2Fstore%2Fen-US%2Ffree-games"
  navigated to "https://www.epicgames.com/id/login/mfa?redirect_uri=https%3A%2F%2Fstore.epicgames.com%2Fstore%2Fen-US%2Ffree-games"
  navigated to "https://store.epicgames.com/en-US/free-games"
  navigated to "https://store.epicgames.com/en-US/free-games"
============================================================
    at file:///fgc/epic-games.js:47:14

Logged in, but then it did not continue. Seems like the URL changed in the meantime, the /store should be removed for it to match.

Started it again, but it said it got a captcha (VNC not connected):

...
Signed in.
Number of free games: 2
Current free game: City of Brass
Not in library yet! Click GET.
page.waitForSelector: Timeout 20000ms exceeded.
=========================== logs ===========================
waiting for selector "text=Thank you for buying" to be visible
============================================================
    at file:///fgc/epic-games.js:98:18 {
  name: 'TimeoutError'
}
Saved a screenshot of hcaptcha challenge to screenshots/2022-03-31T15:14:56.170Z.png
Got hcaptcha challenge. To avoid it, get a link from https://www.hcaptcha.com/accessibility
Current free game: Total War: WARHAMMER
Already in library! Nothing to claim.

Started it again and tried to connect with VNC while it was running, but then it said the game was already claimed.
It finished and closed down before I could do anything via VNC, so I'm not sure if it was because of the VNC connection, but I assume it already worked in the previous run and they changed the text the script waits for. Sadly couldn't check the saved screenshot since it's not saved outside the container.

Other things:

  • The X server and VNC logs are quite a lot, can we pipe them somewhere other than stdout? Or somehow color the output from the actual script.
  • Can the browser window open maximized in Fluxbox?
  • Scrolling the window for login did not seem to work, had to submit with Enter. Does it work for you? Should we increase the vertical resolution?
  • Should we map the root of the repo into the container? Then it could save screenshots/logs and the image does not need to be rebuild for every change to the script.

epic-games.js Outdated Show resolved Hide resolved
Dockerfile Outdated Show resolved Hide resolved
@jackblk
Copy link
Collaborator Author

jackblk commented Mar 31, 2022

The X server and VNC logs are quite a lot, can we pipe them somewhere other than stdout? Or somehow color the output from the actual script.

I think we will pipe it to null.

Can the browser window open maximized in Fluxbox?

Fluxbox is just for convenient usage inside VNC, we will drop it.

Scrolling the window for login did not seem to work, had to submit with Enter. Does it work for you? Should we increase the vertical resolution?

Doesn't work for me either, but after logging in, the scrollbar will work. Maybe maximizing the browser will help.

Should we map the root of the repo into the container? Then it could save screenshots/logs and the image does not need to be rebuild for every change to the script.

No we should not map the root. We can map -v $(pwd)/screenshots:/fgc/screenshots for it.

Currently the image will rebuild very fast if you have built it before. I have made it so modifying package.json will make the cache invalid and it will rebuild slowly, but everything else will go fast if you have the cache.


I just ran the script in Docker, it claimed 2 games without any captcha.

Somehow when claiming Total War, it said "Got hcaptcha" but it still claimed successfully.

Current free game: City of Brass
Already in library! Nothing to claim.
Current free game: Total War: WARHAMMER
Not in library yet! Click GET.
locator.count: Error: failed to find frame for selector "#webPurchaseContainer iframe >> control=enter-frame >> button:has-text("I Agree")"
    at file:///fgc/epic-games.js:89:26
Saved a screenshot of hcaptcha challenge to screenshots/2022-03-31T17:24:51.179Z.png
Got hcaptcha challenge. To avoid it, get a link from https://www.hcaptcha.com/accessibility

* correct freegames url
* skip downloading browsers in docker
* remove fluxbox
* remove stdout for vnc & xvfb
@jackblk jackblk requested a review from vogler March 31, 2022 18:48
@jackblk
Copy link
Collaborator Author

jackblk commented Mar 31, 2022

@vogler updated the PR.

  • correct freegames url
  • skip downloading browsers in docker
  • remove fluxbox
  • remove stdout for vnc & xvfb

The image size is now 1.17GB

@vogler
Copy link
Owner

vogler commented Mar 31, 2022

I think we will pipe it to null.

Sounds good.

Fluxbox is just for convenient usage inside VNC, we will drop it.

You want to drop VNC as well then?
I did the login via VNC, but it's more convenient to do it on the host and only then run in docker.

No we should not map the root. We can map -v $(pwd)/screenshots:/fgc/screenshots for it.

I assume screenshots/ should also be in .dockerignore.
Can't docker use the .gitignore as a base? If the extra entries are not important, can we just ln -s .gitignore .dockerignore?

Currently the image will rebuild very fast if you have built it before. I have made it so modifying package.json will make the cache invalid and it will rebuild slowly, but everything else will go fast if you have the cache.

Ok, maybe it doesn't matter. Just thought for development I don't want to rebuild it after every .js change.

I just ran the script in Docker, it claimed 2 games without any captcha.

Somehow when claiming Total War, it said "Got hcaptcha" but it still claimed successfully.

Current free game: City of Brass
Already in library! Nothing to claim.
Current free game: Total War: WARHAMMER
Not in library yet! Click GET.
locator.count: Error: failed to find frame for selector "#webPurchaseContainer iframe >> control=enter-frame >> button:has-text("I Agree")"
    at file:///fgc/epic-games.js:89:26
Saved a screenshot of hcaptcha challenge to screenshots/2022-03-31T17:24:51.179Z.png
Got hcaptcha challenge. To avoid it, get a link from https://www.hcaptcha.com/accessibility

Yes, claimed City of Brass for me, just timed out waiting for Thank you for buying - have to debug next week what changed.
For you there seems to be a problem with the frame though, which is strange since iframe.locator('button:has-text("Place Order")') must have worked for you, but for iframe.locator('button:has-text("I Agree")') it had a problem.
Maybe the iframe is already gone for you then (since you don't have this step).
Need to think about it. This mutually exclusive waiting is a bit tricky to do right.

@jackblk
Copy link
Collaborator Author

jackblk commented Mar 31, 2022

I did the login via VNC, but it's more convenient to do it on the host and only then run in docker.

IIRC you can't do that because the data dir for Chromium inside the container might be different from your local Chrome data dir. It will invalidate everything and make you sign in again.

I assume screenshots/ should also be in .dockerignore.
Can't docker use the .gitignore as a base? If the extra entries are not important, can we just ln -s .gitignore .dockerignore?

You're right about screenshots, I will add it later. But I think it's better to just maintain a separate .dockerignore.

I don't want to rebuild it after every .js change.

You still need to rebuild but it will be very fast if you have built it before.


I think the script works for now, but certainly we need to refactor & handle more exceptions. Also we need to improve the locators as it might easily be broken. But for now, it works.

My IP gets blacklisted now I guess, it displays captcha for even normal browser. But I'm sure everything works fine now in Docker.

@jackblk
Copy link
Collaborator Author

jackblk commented Mar 31, 2022

Updated TODO:

  • Reduce the image size (with alpine?)
  • Write/fix README for Docker, sign in bug
  • Consider using Firefox? -> can fix raspberry arm 32bit issue, smaller size
  • Docker image without VNC (minimal) -> need to fix the login issue first (handle logging in automatically)
  • Github actions to upload to Docker hub

@vogler
Copy link
Owner

vogler commented Mar 31, 2022

IIRC you can't do that because the data dir for Chromium inside the container might be different from your local Chrome data dir. It will invalidate everything and make you sign in again.

I had to delete it in the beginning because of the change channel: 'chrome' to chromium, but then it seemed to be portable.
But need to check again if login etc. really works.

You still need to rebuild but it will be very fast if you have built it before.

I don't normally use docker. Why would I have to rebuild it if it just runs the .js file from the share?

I think the script works for now, but certainly we need to refactor & handle more exceptions. Also we need to improve the locators as it might easily be broken. But for now, it works.

Yes. The text-based locators are probably the safest bet, but there are still some DOM/CSS-based ones.

My IP gets blacklisted now I guess, it displays captcha for even normal browser. But I'm sure everything works fine now in Docker.

👍
I think it was ~6h for me. Getting a new IP worked.

@jackblk
Copy link
Collaborator Author

jackblk commented Mar 31, 2022

I don't normally use docker. Why would I have to rebuild it if it just runs the .js file from the share?

Not sure if I get what you mean. But if you don't use Docker then you don't need to build anything 😄 . This PR won't affect non-docker user in anyway.

@vogler
Copy link
Owner

vogler commented Mar 31, 2022

I meant if I'm testing epic-games.js in docker (like now), then I need to rebuild the image instead of just saving the .js file before running the container.

@jackblk
Copy link
Collaborator Author

jackblk commented Mar 31, 2022

I meant if I'm testing epic-games.js in docker (like now), then I need to rebuild the image instead of just saving the .js file before running the container.

I see. It builds fast though, but you can use this so you don't need to rebuild:

docker run --rm -it \
    -p 5900:5900 \
    -v "$(pwd)/userDataDir:/fgc/userDataDir" \
    -v "$(pwd)/screenshots:/fgc/screenshots" \
    -v "$(pwd)/epic-games.js:/fgc/epic-games.js" \
    --name free-games-claimer \
    free-games-claimer

@vogler
Copy link
Owner

vogler commented Mar 31, 2022

That's why I asked why not just share $(pwd). Devs don't need to rebuild, for non-devs it doesn't make a difference (besides that the command is not as long).
But I remember that you wanted to map different userDataDir's . Can shares shadow subdirs?

@viperdriver2000
Copy link

viperdriver2000 commented Apr 1, 2022

hey thanks and a little feedback.
it takes a few minutes until i understand that you have your own fork ;)
my git checkouts are on another folder then my docker "saves" that was my second problem ;)
in this constellation the .js not found. i copied the files. so i geht solved it. then i can start.
i was not singed in. i tried to connect via vnc. first in the browser. that dosnt work. after the first timeout i tryied the vnc viewer app. then it works. now i can login.
in my opinion it would be better in the browser. take a look at "novnc".
i have tried to build it in but i dont understand why the container close ^^ and how i can stop this.
but after a little bit and many tries i get it work.
because i dont know how i can make an new branch in your projekt i will post it here.

# git diff

diff --git a/Dockerfile b/Dockerfile
index 4baeb48..a47903e 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -44,6 +44,7 @@ RUN apt-get update \
     x11vnc \
     curl \
     tini \
+    novnc websockify \
     && apt-get clean \
     && rm -rf \
     /tmp/* \

diff --git a/docker/vnc-start.sh b/docker/vnc-start.sh
index ef28937..8b3859c 100755
--- a/docker/vnc-start.sh
+++ b/docker/vnc-start.sh
@@ -6,3 +6,6 @@ x11vnc -display "$DISPLAY" -forever -shared -rfbport "${VNC_PORT:-5900}" \

 # Execute the given command:
 exec "$@"
+
+mkdir -p /usr/share/novnc/
+websockify -D --web /usr/share/novnc/ 6080  localhost:5900
docker run --rm -it \
	-p 6080:6080 \
	-p 5900:5900 \
	-v "$(pwd)/userDataDir:/fgc/userDataDir" \
	-v "$(pwd)/screenshots:/fgc/screenshots" \
	--name free-games-claimer \
	free-games-claimer

http://[DOCKER-HOST-IP]:6080/vnc.html

now you can use vnc in the browser and login.

now i try that prime-gaming and epic-games both work.

@vogler
Copy link
Owner

vogler commented Apr 1, 2022

it takes a few minutes until i understand that you have your own fork ;)

That's the default procedure. Without rights to a repo, you fork it, commit to a new branch and then open a PR on the target.
We'll merge this PR soon. With GitHub's cli you can easily checkout PRs: gh pr checkout 11.

my git checkouts are on another folder then my docker "saves" that was my second problem ;)

We'll mention it in the readme that it should be in the same directory.
Do you have a need for them to be different locations?

in my opinion it would be better in the browser. take a look at "novnc".

Nice, that would be more convenient. But maybe we won't need VNC at all.

@viperdriver2000
Copy link

viperdriver2000 commented Apr 1, 2022

That's the default procedure. Without rights to a repo, you fork it, commit to a new branch and then open a PR on the target. We'll merge this PR soon. With GitHub's cli you can easily checkout PRs: gh pr checkout 11.

ah okay i dont know gh. i will have a look.

We'll mention it in the readme that it should be in the same directory. Do you have a need for them to be different locations?
oh then i have overread it. sorry for that.

it's only for my personal organisation. the little monk inside me.

Nice, that would be more convenient. But maybe we won't need VNC at all.

as long as it needed we could install it. makes things easier. just a suggestion.

@jackblk
Copy link
Collaborator Author

jackblk commented Apr 8, 2022

@viperdriver2000 nice one, I think noVNC is great to use.

@vogler I think implementing noVNC is nice, because if we meet captcha, we can send a notification to our device (maybe use apprise?). Then user can open noVNC to control the browser, solve the captcha & claim the game. It has password built in so it's fine to forward the port. Maybe we can use ngrok to tunnel it as well.

@vogler
Copy link
Owner

vogler commented Apr 8, 2022

Sounds good.

apprise is in Python and I didn't find any JS bindings or an alternative project for nodejs.
We could use it in the docker image, but it would be nicer to send notifications from the JS files.
We could shell out from JS, but then you'd still have the setup problem for people not using the docker image.

ngrok docs look like you need an API key to use it?
Here are some alternatives we could try:


Should we merge this PR and continue in a new one?
I can adjust the readme later.
Other things to keep in mind:

Probably best to split into topics:

  • Firefox for image size / ARM
  • noVNC & tunnel
  • notifications
  • GitHub actions to upload to Docker hub
  • (Reduce the image size (with alpine?))

@jackblk
Copy link
Collaborator Author

jackblk commented Apr 9, 2022

I fixed the bug "timed out waiting for Thank you for buying".

Now it works perfectly for me, without any captcha.


I also found this project https://github.com/claabs/epicgames-freegames-node, claabs did a great job in documenting & handling all stuff that we are missing (alpine docker, logging in, 2fa, refreshing token using cookies, advanced free game searching, tunneling...).

There's only one problem, this project is using Puppeteer and it will display captcha in everything (including logging in). I suspect that hcaptcha can detect puppeteer but not Playwright.

I'll finish this soon, maybe after that, we can collaborate with claabs to fix his captcha issue.

@jackblk
Copy link
Collaborator Author

jackblk commented Apr 9, 2022

@vogler Let's merge it for now if you don't mind, it has some bug fixes and a basic Dockerfile for now. We will improve it later :).

  • noVNC & tunnel
  • notifications
  • GitHub actions to upload to Docker hub
  • Firefox for image size / ARM
  • (Reduce the image size (with alpine?))

@vogler
Copy link
Owner

vogler commented Apr 9, 2022

Just tried it on my RPi4 (SSD): docker build took 6m53s.
It's a 64bit kernel, 32bit userland.

Launching the browser failed:

$ uname -m
aarch64

$ dpkg --print-architecture
armhf

$ docker run --rm -it \
    -p 5900:5900 -p 6080:6080 \
    -v "$(pwd)/userDataDir:/fgc/userDataDir" \
    -v "$(pwd)/screenshots:/fgc/screenshots" \
    -v "$(pwd)/epic-games.js:/fgc/epic-games.js" \
    --name free-games-claimer \
    free-games-claimer

node:internal/process/esm_loader:94
    internalBinding('errors').triggerUncaughtException(
                              ^

browserType.launchPersistentContext: Browser closed.
==================== Browser output: ====================
<launching> /root/.cache/ms-playwright/chromium-978106/chrome-linux/chrome --disable-background-networking --enable-features=NetworkService,NetworkServiceInProcess --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-default-apps --disable-dev-shm-usage --disable-extensions --disable-features=ImprovedCookieControls,LazyFrameLoading,GlobalMediaControls,DestroyProfileOnBrowserClose,MediaRouter,AcceptCHFrame,AutoExpandDetailsElement,CertificateTransparencyComponentUpdater --allow-pre-commit-input --disable-hang-monitor --disable-ipc-flooding-protection --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --disable-sync --force-color-profile=srgb --metrics-recording-only --no-first-run --enable-automation --password-store=basic --use-mock-keychain --no-service-autorun --export-tagged-pdf --no-sandbox --disable-session-crashed-bubble --restore-last-session --user-data-dir=/fgc/userDataDir --remote-debugging-pipe about:blank
<launched> pid=68
[pid=68][err] /root/.cache/ms-playwright/chromium-978106/chrome-linux/chrome: 1: y: not found
[pid=68][err] /root/.cache/ms-playwright/chromium-978106/chrome-linux/chrome: 1: ?: not found
[pid=68][err] /root/.cache/ms-playwright/chromium-978106/chrome-linux/chrome: 1: cannot open DLS]dq}����������������
[pid=68][err] $-5DTY_hr: No such file
[pid=68][err] /root/.cache/ms-playwright/chromium-978106/chrome-linux/chrome: 1: ������������: not found
[pid=68][err] /root/.cache/ms-playwright/chromium-978106/chrome-linux/chrome: 1: @GKRahqx�������������
                                                                                                      9@MZp: not found
[pid=68][err] /root/.cache/ms-playwright/chromium-978106/chrome-linux/chrome: 1: ������������: not found
[pid=68][err] /root/.cache/ms-playwright/chromium-978106/chrome-linux/chrome: 1: cannot create �W@xO@8
                                                                                                      @$@@@�����
[pid=68][err] W�
[pid=68][err] W�
[pid=68][err] W�W�Wлл��7
                        ��7
                           ��7
                              y�)�
                                  �Y�
                                     �Y�
                                        ��ypfyP�td�F��F��F��7�7Q�td���XX/lib64/ld-linux-x86-64.so.2GNU INFOCrashpad4�
                                                                                                                    GNU&+�U9���Ba p � �������9: Directory nonexistent
[pid=68][err] /root/.cache/ms-playwright/chromium-978106/chrome-linux/chrome: 1: ELF: not found
[pid=68][err] /root/.cache/ms-playwright/chromium-978106/chrome-linux/chrome: 17: Syntax error: word unexpected (expecting ")")
[pid=68] <process did exit: exitCode=2, signal=null>
[pid=68] starting temporary directories cleanup
=========================== logs ===========================
... same as above
============================================================
    at async file:///fgc/epic-games.js:13:17 {
  name: 'Error'
}

@vogler vogler merged commit 2129306 into vogler:main Apr 9, 2022
@vogler
Copy link
Owner

vogler commented Apr 9, 2022

Closes #2, closes #9.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants