1
0
Fork 0

xactfetch: Switch to headed Chrome

Earlier this week, `xactfetch` stopped being able to log in to the Chase
website.  After logging in, the website just popped up a message that
said "It looks like this part of our website isn't working right now,"
with a hint that I should try a different browser.  I suspect they have
enhanced their bot detection/scraping resistance, because the error
only occurs when `xactfetch` is run from inside a container.  It happens
every time in that case, but never when I run it on my computer
directly.

After several hours of messing with this, the only way I was able to
get it to work is to use full-blown headed Chromium.  Neither headless
nor headed Firefox works, nor does headless Chromium.  This is a bit
cumbersome, but not really a big deal.  Headed Chromium works fine in
an Xvfb session.
master
Dustin 2024-07-10 10:54:06 -05:00
parent 8de0d93eb1
commit 9f113d6a3f
4 changed files with 13 additions and 6 deletions

View File

@ -1,5 +1,6 @@
*
!.git
!entrypoint.sh
!pinentry-stub.sh
!pyproject.toml
!xactfetch.py

View File

@ -47,11 +47,16 @@ RUN --mount=type=cache,target=/var/cache \
libXrandr \
libXrender \
libXtst \
libdrm \
libxcb \
mesa-libgbm \
nspr \
nss \
pango \
python3 \
python3-pip \
tini \
xorg-x11-server-Xvfb \
&& echo xactfetch:x:2468: >> /etc/group \
&& echo xactfetch:*:2468:2468:xactfetch:/var/lib/xactfetch:/sbin/nologin >> /etc/passwd \
&& :
@ -62,7 +67,8 @@ RUN --mount=type=bind,from=build,source=/,target=/build \
python3 -m pip install --no-index -f /build/wheels xactfetch \
&& cp /build/root/.cargo/bin/rbw* /usr/local/bin/ \
&& install /build/src/pinentry-stub.sh /usr/local/bin/pinentry-stub \
&& playwright install firefox \
&& install /build/src/entrypoint.sh /entrypoint.sh \
&& playwright install chromium \
&& :
VOLUME /var/lib/xactfetch
@ -71,6 +77,4 @@ WORKDIR /var/lib/xactfetch
USER 2468:2468
ENV XDG_CONFIG_HOME=/etc
ENTRYPOINT ["tini", "xactfetch", "--"]
ENTRYPOINT ["tini", "/entrypoint.sh", "--"]

3
entrypoint.sh Normal file
View File

@ -0,0 +1,3 @@
#!/bin/sh
exec xvfb-run -e /dev/stderr -s '-screen 0 1920x1080x24 -nolisten unix' xactfetch "$@"

View File

@ -721,8 +721,7 @@ async def amain() -> None:
end_date = datetime.date.today() - datetime.timedelta(days=1)
failed = False
async with async_playwright() as pw, secrets:
headless = os.environ.get('DEBUG_HEADLESS_BROWSER', '1') == '1'
browser = await pw.firefox.launch(headless=headless)
browser = await pw.chromium.launch(headless=False)
page = await browser.new_page()
banks = sys.argv[1:] or list(ACCOUNTS.keys())
if 'commerce' in banks: