Skip to content

Instantly share code, notes, and snippets.

@xrip
xrip / scroll-to-element.ts
Created March 9, 2022 07:26 — forked from prescience-data/scroll-to-element.ts
Puppeteer Scroll To Element
import { randomInt } from "node:crypto"
import type Puppeteer from "puppeteer-core"
/** Recast Puppeteer private properties **/
type Page = Omit<Puppeteer.Page, "_client"> & {
readonly _client: Puppeteer.CDPSession
}
type ElementHandle = Omit<Puppeteer.ElementHandle, "_page"> & {
@xrip
xrip / namedpipe.py
Created December 23, 2021 10:15 — forked from aont/namedpipe.py
#!/usr/bin/env python
import sys
import msvcrt
import os
import ctypes
import shutil
PIPE_ACCESS_INBOUND = 0x00000001
PIPE_ACCESS_OUTBOUND = 0x00000002
PIPE_TYPE_BYTE = 0x00000000
@xrip
xrip / install-google-fonts.sh
Created October 13, 2021 10:16 — forked from keeferrourke/install-google-fonts.sh
A bash script to install all Google Fonts, system wide, on debian based systems (ex. Ubuntu)
#!/bin/sh
# Written by: Keefer Rourke <https://krourke.org>
# Based on AUR package <https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=ttf-google-fonts-git>
# dependancies: fonts-cantarell, ttf-ubuntu-font-family, git
sudo apt-get install fonts-cantarell ttf-ubuntu-font-family git
srcdir="/tmp/google-fonts"
pkgdir="/usr/share/fonts/truetype/google-fonts"
giturl="git://github.com/google/fonts.git"
@xrip
xrip / asyncHttps.ts
Last active April 8, 2022 11:06
Async Nodejs https request wrapper
import { RequestOptions, get as httpsGet, request as httpsRequest } from 'https';
import { IncomingMessage } from 'http';
const makeCallback = (resolve: (data: string | unknown) => void, reject: (e: Error) => void, json = false) => (response: IncomingMessage): void => {
let buffer = '';
response.on('data', chunk => buffer += chunk);
response.on('end', () => {
try {
@xrip
xrip / webgl.js
Created May 7, 2021 15:21 — forked from abrahamjuliot/webgl.js
webgl fingerprint
/* parameter helpers */
// https://developer.mozilla.org/en-US/docs/Web/API/EXT_texture_filter_anisotropic
const getMaxAnisotropy = context => {
try {
const extension = (
context.getExtension('EXT_texture_filter_anisotropic') ||
context.getExtension('WEBKIT_EXT_texture_filter_anisotropic') ||
context.getExtension('MOZ_EXT_texture_filter_anisotropic')
)
return context.getParameter(extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT)
@xrip
xrip / puppeteer-bot.js
Created May 7, 2021 14:58 — forked from cubu/puppeteer-bot.js
disguisePage - undetectable puppeteer
const WEBGL_RENDERERS = ['ANGLE (NVIDIA Quadro 2000M Direct3D11 vs_5_0 ps_5_0)', 'ANGLE (NVIDIA Quadro K420 Direct3D9Ex vs_3_0 ps_3_0)', 'ANGLE (NVIDIA Quadro 2000M Direct3D9Ex vs_3_0 ps_3_0)', 'ANGLE (NVIDIA Quadro K2000M Direct3D11 vs_5_0 ps_5_0)', 'ANGLE (Intel(R) HD Graphics Direct3D9Ex vs_3_0 ps_3_0)', 'ANGLE (Intel(R) HD Graphics Family Direct3D9Ex vs_3_0 ps_3_0)', 'ANGLE (ATI Radeon HD 3800 Series Direct3D9Ex vs_3_0 ps_3_0)', 'ANGLE (Intel(R) HD Graphics 4000 Direct3D11 vs_5_0 ps_5_0)', 'ANGLE (Intel(R) HD Graphics 4000 Direct3D11 vs_5_0 ps_5_0)', 'ANGLE (AMD Radeon R9 200 Series Direct3D11 vs_5_0 ps_5_0)', 'ANGLE (Intel(R) HD Graphics Direct3D9Ex vs_3_0 ps_3_0)', 'ANGLE (Intel(R) HD Graphics Family Direct3D9Ex vs_3_0 ps_3_0)', 'ANGLE (Intel(R) HD Graphics Direct3D9Ex vs_3_0 ps_3_0)', 'ANGLE (Intel(R) HD Graphics Family Direct3D9Ex vs_3_0 ps_3_0)', 'ANGLE (Intel(R) HD Graphics 4000 Direct3D9Ex vs_3_0 ps_3_0)', 'ANGLE (Intel(R) HD Graphics 3000 Direct3D9Ex vs_3_0 ps_3_0)', 'ANGLE (Mobile Intel(R) 4 Seri
@xrip
xrip / webgl-detection-bypass.js
Created May 7, 2021 14:54 — forked from cubu/webgl-detection-bypass.js
[canvas-webgl-puppeteer-spoof]
() => {
function hookPrototypeMethods(prefix, object) {
// TODO: also hook getters
if (!object) return;
const originals = {};
const prototype = Object.getPrototypeOf(object);
Object
.getOwnPropertyNames(prototype)
.filter((n) => {
try {
@xrip
xrip / hcaptcha.ts
Created April 21, 2021 16:00 — forked from prescience-data/hcaptcha.ts
HCaptcha Solver
import { IncomingMessage, RequestListener, ServerResponse } from "http"
import { createServer, Server } from "https"
import puppeteer, {
Browser,
BrowserLaunchArgumentOptions,
Protocol
} from "puppeteer-core"
import { Page } from "./types"
import Cookie = Protocol.Network.Cookie
class Person {
    name       = 'Ilya Maslennikov';
    nickname   = 'xrip';
    title      = 'Software Engineer / Tech Lead';
    location   = 'Moscow, Russia';
}

class Skills {
 languages = ['TypeScript', 'JavaScript', 'PHP'];
@xrip
xrip / clickhouse_partitions_cleanup.sh
Created October 9, 2019 14:30
Clickhouse drop partitions older than X months may be used as cron basis
#!/bin/bash
# Replace <CLICKHOUSE.IP>, <CLICKHOUSE_USERNAME> AND <CLICKHOUSE_PASSWORD> with your clickhouse credentials
# and <SHORT_TABLE_NAME> together with <FULL_TABLE_NAME>
clickhouse-client --host <CLICKHOUSE.IP> --user <CLICKHOUSE_USERNAME> --password '<CLICKHOUSE_PASSWORD>' -q "SELECT DISTINCT partition FROM system.parts WHERE table='<SHORT_TABLE_NAME>' and max_date<today()-INTERVAL 3 MONTH;" | cut -d "'" -f2 | tr -d '\' | while read line; do clickhouse-client --host <CLICKHOUSE.IP> --user <CLICKHOUSE_USERNAME> --password '<CLICKHOUSE_PASSWORD>' -q "ALTER TABLE <FULL_TABLE_NAME> DROP PARTITION "$line"";done