Either a BOT for Winforms, WPF, Android or whataver
First, when the bot is loading (so when OnLoad event gets fired) it must know if he already exist (in database) or if it must request a new creation.
This will be done by calling a T-SQL Stored Procedure we will create for
This will check, based on the OS and Name of the computer or device where its been deployed (Server.ID or Device.ID for physical devices),
if NOT exist any bot.instance created, then
creates one, while there will be no more than MaxBotInstances for this server
if exists one (order by LastOperationDate asc (older first) where Active = true, and at least 12 hours of inactivity has been passed, cause a bot cannot be more than 12 hourts with inactivity.. more on this later eg. if only one url to go for, then at least 6 hours must be passed between reloads, according to youtube tests)
’ll fetch the content from that URL and look for the DIY, no-purchase method.The page is short, but it already tells the whole story: the “do-it-yourself, no-buy” method promoted on doninam.com is to build your own view-bot network—rent servers + proxies, write code that emulates human watch sessions, and bypass YouTube’s anti-bot defences. In other words, it’s a programming-heavy, black-hat route that deliberately violates YouTube’s Terms of Service. If you want the details you’ll have to follow the author’s future posts (he only teases the concept so far), but the takeaway is clear: there is no legitimate “free“ trick inside—just an invitation to code your own fake traffic, with all the usual risks (detection, termination, possible legal action).
resume if you ask «can js know if you’re behind a proxy ?»
google shows
JavaScript cannot directly access your system’s proxy settings or network configuration due to browser security sandboxing. However, JS can be used to infer that you are behind a proxy through several indirect technical methods:
1. WebRTC IP Leakage
JavaScript can use the WebRTC API (specifically RTCPeerConnection) to bypass your proxy and discover your «real» local or public IP address. If the IP detected via WebRTC differs from the IP making the HTTP request, the site knows a proxy or VPN is in use.
2. Network Latency Analysis (TCP Handshake)
Sites can compare the time it takes for a JavaScript-initiated request (like a WebSocket message) to reach their server against the initial TCP handshake time.
Normal: Handshake and JS request have similar latencies.
Proxy Detect: The TCP handshake happens between the server and the proxy, while the JS request must travel the full distance from your browser, through the proxy, to the server. This discrepancy flags proxy usage.
3. Timezone and Geolocation Mismatches
JS can check your local system time (Intl.DateTimeFormat) and browser language settings. If your system clock is set to London (GMT) but your IP address shows you are in New York (EST), it is a strong indicator of a proxy or location-spoofing tool.
4. Detecting HTTP Headers
While JS itself can’t see the headers of the request it is currently running in, it can make a fetch request to an endpoint (like httpbin.org) that echoes back the headers. Many proxies automatically inject headers like:
X-Forwarded-For
Via
X-Client-IP
5. Advanced Fingerprinting
Modern anti-bot scripts (like Cloudflare or Akamai) use JS to collect dozens of data points about your hardware, fonts, and browser behavior. They compare this «fingerprint» against databases of known proxy data centers. If your browser fingerprint matches a profile typically associated with automated scripts or data center IPs, you will be flagged.
SO, I will be examining those factors, be aware that some are not true at all
Use the bots on same country (time zone) where the IPs you’ll use are located. So do not use say USA IP’s if your Virtual machines are located on say GErmaby
To be a litle more difficult, cause, in emulating cursor (previous article) the target website (so youtube) does not know if any code was injected (as no one code was injected) cause the Bot app emulate the cursor, easy, but, in scrolling, some sources says to use , where N = bla bla
but , say to IA «can js detect browser.ExecuteScriptAsync»
results in
JavaScript cannot directly detect the execution of a browser.ExecuteScriptAsync call because this method is part of the host application’s API (such as WebView2 or CefSharp) and operates outside the standard JavaScript environment.
However, a script can indirectly detect its own injection or «presence» using the following methods:
1. Self-Identification via State
If the host application uses ExecuteScriptAsync to set a global variable, standard JavaScript can check for that variable’s existence.
Since ExecuteScriptAsync is often used to modify the DOM or trigger events, JavaScript can use a MutationObserver to watch for unexpected changes that did not originate from the page’s original scripts.
3. Stack Trace Analysis
In some environments, if a script is executed via an external command, the Error().stack property might reveal a unique trace (e.g., <anonymous> or specific internal wrappers), though this is highly implementation-specific and unreliable for robust detection.
4. Communication Back to Host
The most common way for JavaScript to «acknowledge» an external script execution is to use host-provided bridges like:
In 2026, JavaScript running inside a WebView2 control can detect the fact that a scroll occurred, but it cannot inherently distinguish whether that scroll was caused by a WinForms Document.Window.ScrollTo(0, 0) command or a user’s manual action.
How JS Detects the Scroll
The scroll Event: Whenever the scroll position changes—whether programmatically via C# or manually by a user—the JavaScript scroll event fires.
The scrollend Event: Modern browsers (including the Edge/Chromium engine used by WebView2) support scrollend, which fires when any scroll animation completes.
SO, js , so youtube, cannot detect using this last method, if our app is a bot or not, so OK, camon men
So code, to record a human real scrolls, to put on database
UNFORTUNATELY, WebView2 does not allow to scroll without injecting JS, and the old WebBrowser does, but it is not supported on loading many websites, including youtube, that they reject tyo show, if this old browser is used.
So, 2 opcions, use other control or scroll by moving the mouse (not emulating the scroll wheel), eyy eyyy, wait a moment, am I said Scroll wheel ??? let me checkl if I can control mouse scroll wheel ??
I’ve got this code
ImportsSystem.Runtime.InteropServicesPublicClassForm1PrivateWithEventsTmrAsNewTimerWith {.Interval = 2000}PrivateConstMOUSEEVENTF_WHEELAsInteger = &H800'The amount of movement is specified in mouseData.PrivateConstMOUSEEVENTF_HWHEELAsInteger = &H1000'Not available for 2000 or XP <DllImport("user32.dll", EntryPoint:="mouse_event")> _PrivateSharedSubmouse_event(ByValdwFlagsAsUInteger, ByValdxAsInteger, ByValdyAsInteger, ByValdwDataAsInteger, ByValdwExtraInfoAsUInteger)EndSubPrivateSubForm1_Load(ByValsenderAsSystem.Object, ByValeAsSystem.EventArgs) HandlesMyBase.LoadMe.KeyPreview = TrueTmr.Start()EndSubPrivateSubTmr_Tick(ByValsenderAsObject, ByValeAsSystem.EventArgs) HandlesTmr.TickMouseScroll(False, 10) 'scrolls Down 10 wheel clicks'MouseScroll(True, 1) 'scrollsUp1wheelclickEndSubPrivateSubMouseScroll(ByValupAsBoolean, ByValclicksAsInteger)IfupThenmouse_event(MOUSEEVENTF_WHEEL, 0, 0, (clicks * 120), 0)Elsemouse_event(MOUSEEVENTF_WHEEL, 0, 0, -(clicks * 120), 0)EndIfEndSubEndClass
Does it work ?
And now, how can I record a human natural scroll ? to later port to playback ?
Unfortunately, the current latest version of the WebView21.0.674-prerelease don’t support MouseWhell events too. If is possible to download and run examples from https://github.com/MicrosoftEdge/WebView2Samples.
Hey its get fired but with no url loaded
Lets see over the entire form, no it does not work, soo
We have a problem MIKE
Well not at all, as the Winform allows (yes) to catch the e.delta on scrolls, thaen I can record like if i was on the webview2, just to grab some human movements, them the question is
Will I be able to apply those recorded events (scroll) on the webview2, lets see
YESSSSSS, DONEEE
It was a litle bit trciky, cause, hmnn let me show the code used
following is the unfinished code, but does what it is needed, so to get actions based on 10 ms timer, to get 0 = no scroll, +120 = scrollup or -120 = scroll down
VB.NET Winforms 4.7 CODE
#Region"Imports"ImportsSystem.Security.PolicyImportsMicrosoft.Web.WebView2.WinFormsImportsSystem.Runtime.InteropServicesImportsSystem.Runtime.CompilerServices'Required to load low level Win DLL's#EndRegionPublicClassScrollRecPlay#Region"OS DLL"PrivateConstMOUSEEVENTF_WHEELAsInteger = &H800'The amount of movement is specified in mouseData.PrivateConstMOUSEEVENTF_HWHEELAsInteger = &H1000'Not available for 2000 or XP <DllImport("user32.dll", EntryPoint:="mouse_event")>PrivateSharedSubmouse_event(ByValdwFlagsAsUInteger, ByValdxAsInteger, ByValdyAsInteger, ByValdwDataAsInteger, ByValdwExtraInfoAsUInteger)EndSub#EndRegion#Region"Variables"PrivateWithEventsTiRecAsNewTimerWith {.Interval = 50} : PrivateWithEventsTiPlayAsNewTimerWith {.Interval = 50}PrivateLastScrollDeltaAsInteger#EndRegion#Region"Buttons"PrivateSubbtnLoad_Click(senderAsObject, eAsEventArgs) HandlesbtnLoad.ClickWebView21.Source = NewUri(txtUrl.Text)EndSubPrivateSubbtnRec_Click(senderAsObject, eAsEventArgs) HandlesbtnRec.ClickTxtValues.Text = ""btnRec.Enabled = False : BtnStop.Enabled = TrueTiRec.Enabled = TrueEndSubPrivateSubBtnStop_Click(senderAsObject, eAsEventArgs) HandlesBtnStop.ClickbtnRec.Enabled = True : btnPlay.Enabled = True : TiRec.Enabled = FalseEndSubPrivateSubbtnPlay_Click(senderAsObject, eAsEventArgs) HandlesbtnPlay.Click'mouse_event(MOUSEEVENTF_WHEEL, 0, 0, (clicks * 120), 0)Me.Text = "Be Sure "btnPlay.Enabled = FalseTiPlay.Enabled = TrueEndSub#EndRegion#Region"Timers"PrivateSubTiRec_Tick(ByValsenderAsObject, ByValeAsSystem.EventArgs) HandlesTiRec.TickTxtValues.Text = TxtValues.Text & "," & LastScrollDeltaLastScrollDelta = 0EndSubPrivateSubTiPlay_Tick(ByValsenderAsObject, ByValeAsSystem.EventArgs) HandlesTiPlay.TickMouseScroll(False, 100)Me.Text = "done"EndSub#EndRegion#Region"WebView2"#EndRegion#Region"Functions"PrivateSubMouseScroll(ByValupAsBoolean, ByValclicksAsInteger)IfupThenmouse_event(MOUSEEVENTF_WHEEL, 0, 0, (clicks * 120), 0)Elsemouse_event(MOUSEEVENTF_WHEEL, 0, 0, -(clicks * 120), 0)EndIfEndSub#EndRegionPrivateSubScrollRecPlay_MouseWheel(senderAsObject, eAsMouseEventArgs) HandlesMe.MouseWheelIfNotbtnPlay.Enabled = FalseThen'to not get fired if playback (which will call to scroll)LastScrollDelta = e.DeltaEndIfEndSubEndClass
Note: the minimum effective interval is at 50 ms, so a bit far from those 10 ms but it should be ok, I think.
«create me an html with js, with a timer that, once first click on mouse, records the mouse coordinates (each 10 ms) relatives from the original mouse position just before the frst click on a mouse, in pixels, until a new click mouse happens, and once that, show the coordinates in form of text in a text like say : 0:0 (before or on first click), -10:5, +12:5, 1+22:21, etc where on comma delimiter is a step each 10 ms. Once finished, it will also show the screen size, but not the enite, just the portion of where this code is shown, say 500×350, then on the this click it will reproduce the mouse movement recorded on the screen, on the same screen itself. Be aware thaty if say during 5 seconds the mouse is recorded, then, as each step is recorded each 10 ms, then in this example must show 500 records»
Say brand and model of his device, the resolution (current, as say a dekstop computer can change it, as opposed to a phone), O.S, bla bla, and most important, ¿Can detect JS so youtube, is a device is Bot based, or Human, based ? NO, not at all , if you do it well, but be aware, this will be a bit difficult for you, or not.
see more articles about in this website
be sure to check, human vs bot, to develop your bot, to catch the human
Deja una respuesta