The browser signs in, the session is handed to a client, the browser closes, and the client goes on calling the protected endpoint with nothing else running.
using GenerallyPositive;
using GenerallyPositive
using static GenerallyPositive
GPAL
Selector username = GPAL
Selector password = GPAL
Selector submit = GPAL
IBrowser browser = GPAL
browser
// everything the browser earned, in a client that does not need it any more
browser
string answer = carried
GPAL
Nothing about the handoff cares how the session was earned. A filled-in login form, a profile that was already signed in, a credential given with WithCredentials, an anti-bot check cleared by a real navigation. Whatever the browser is holding when you ask is what comes across.
browser
ContinueAsRESTClient is an out parameter in the middle of the chain, so the very next call can be Close. The client already knows the browser's origin, so it is ready to be given an endpoint rather than made to restate what the browser already knew.
browser
A browser that has not been anywhere has no origin to talk to and no cookies to carry. Asking for a client at that point publishes a warning and hands back one that will fail later at the request. Go somewhere first.
The origin, the cookies scoped to it, the user agent and accept language the browser is really sending, and the credential it was given with WithCredentials. That is enough for any site whose wall is the cookie jar, which is most of them.
string answer = carried
int status = ((RESTClient)carried)
The TLS handshake stays with the browser. A client outside it makes its own connection with its own fingerprint, so a site that inspects the transport rather than the cookie will refuse it even though every header is right. When that happens the answer is .Fetch, which issues the request from inside the page and carries the whole thing.
// refused by an edge that fingerprints the transport
carried
// the same call, issued by the page, carrying everything
browser
If the carried client gets in, the site is checking a cookie. If it gets a deny page and the in-page fetch gets data, the site is fingerprinting the transport. Two calls tell you which wall you are standing at.
A pass means nothing without a control. Stand a plain client next to the carried one, pointed at the same endpoint with nothing behind it. If the plain one gets in too, the site was never asking for credentials and the carried one proved nothing.
IRESTClient plain = (IRESTClient)GPAL
string carriedAnswer = carried
string plainAnswer = plain
The handoff pairs with CaptureCallTemplate. Capture the request the page made, hand its headers to the carried client, fill in whatever varied, and issue it with no browser in the path. It is the fast route wherever the session is all a site asks for.
browser
browser
foreach (KeyValuePair<string, string> header in rates
client
string answer = client
Showing off some plain text in these paragraphs eligendi laboriosam illo nostrum corporis at libero vel voluptas? Expedita, facere dolores voluptatem ad ab rem assumenda soluta!
Lorem ipsum dolor sit amet consectetur adipisicing elit. Obcaecati, iste distinctio veritatis eligendi laboriosam illo nostrum corporis at libero vel voluptas? Expedita, facere dolores voluptatem ad ab rem assumenda soluta!
Lorem ipsum dolor sit amet consectetur adipisicing elit. Obcaecati, iste distinctio veritatis eligendi laboriosam illo nostrum corporis at libero vel voluptas? Expedita, facere dolores voluptatem ad ab rem assumenda soluta!
Lorem ipsum dolor sit amet consectetur adipisicing elit. Quo veniam mollitia excepturi animi eum illum non libero sapiente provident assumenda, delectus voluptatum nobis sed dolorem adipisci laudantium incidunt. Error, ratione?
Lorem ipsum dolor sit amet consectetur adipisicing elit. Quo veniam mollitia excepturi animi eum illum non libero sapiente provident assumenda, delectus voluptatum nobis sed dolorem adipisci laudantium incidunt. Error, ratione?
Lorem ipsum dolor sit amet consectetur adipisicing elit. Quo veniam mollitia excepturi animi eum illum non libero sapiente provident assumenda, delectus voluptatum nobis sed dolorem adipisci laudantium incidunt. Error, ratione?
Lorem ipsum dolor sit amet consectetur adipisicing elit. Quo veniam mollitia excepturi animi eum illum non libero sapiente provident assumenda, delectus voluptatum nobis sed dolorem adipisci laudantium incidunt. Error, ratione?
Here you can find different accents and emphasis sit amet consectetur adipisicing elit. Obcaecati, iste distinctio veritatis eligendi laboriosam illo nostrum corporis at libero vel voluptas? Expedita, facere dolores voluptatem ad ab rem assumenda soluta!
This is a link and how it could look like bestlinkinthebeautifulworld. Obcaecati, iste distinctio veritatis eligendi laboriosam illo nostrum corporis at libero vel voluptas? Expedita, facere dolores voluptatem ad ab rem assumenda soluta!
Here's just some classic bold text adipisicing elit. Obcaecati, iste distinctio veritatis eligendi laboriosam notBoldSecondbestlinkinthebeautifulworld illo nostrum corporis at libero vel voluptas? Expedita, facere dolores voluptatem ad ab rem assumenda soluta!
Obcaecati, iste distinctio veritatis eligendi laboriosam adipisicing elit illo nostrum corporis at adipisicing elit libero vel voluptas? Expedita, adipisicing facere dolores voluptatem ad ab rem assumenda soluta!
Other cuple of colors in case we want to emphasize several ways adipisicing elit. Obcaecati, iste distinctio veritatis eligendi laboriosam adipisicing elit illo nostrum corporis at voluptatem libero vel voluptas? Expedita, facere dolores voluptatem ad ab rem assumenda soluta!
Lorem ipsum dolor sit amet consectetur adipisicing elit. Obcaecati, iste distinctio veritatis eligendi laboriosam illo nostrum corporis at libero vel voluptas? Expedita, facere dolores voluptatem ad ab rem assumenda soluta! Lorem ipsum dolor, sit amet consectetur adipisicing elit. Quod veniam, quam ad expedita laborum sed at voluptates culpa ipsam ut vel. Ullam temporibus a mollitia quod aliquam ratione exercitationem nesciunt.
Lorem ipsum dolor sit amet consectetur adipisicing elit. Obcaecati, iste distinctio veritatis eligendi laboriosam illo nostrum corporis at libero vel voluptas? Expedita, facere dolores voluptatem ad ab rem assumenda soluta! Lorem ipsum dolor, sit amet consectetur adipisicing elit. Quod veniam, quam ad expedita laborum sed at voluptates culpa ipsam ut vel. Ullam temporibus a mollitia quod aliquam ratione exercitationem nesciunt.
Lorem ipsum dolor sit amet consectetur adipisicing elit. Obcaecati, iste distinctio veritatis eligendi laboriosam illo nostrum corporis at libero vel voluptas? Expedita, facere dolores voluptatem ad ab rem assumenda soluta!
Lorem ipsum dolor sit amet consectetur adipisicing elit. Repudiandae quas consequuntur illo numquam assumenda autem exercitationem distinctio perspiciatis in natus. Eius dicta similique ipsam ipsa minima, nemo quae enim tempore.
GPAL
.CallIfNotFound(GenericCallIfNotFound)
.WithPublishToConsole();
//System.Drawing.Rectangle windowSize = new System.Drawing.Rectangle(10, 10, 1500, 1024);
// NOTE: we have to set browser = before we execute any steps
// this is due to the 'GenericCallIfNotFound' which might throw an exception, and BankScraper will not have the browser set when it calls scraper.Close()
// until the complete fluent line gets executed (meaning every step, meaning browser is not set until everything else succeeds)
browser = GPAL.Browser
.WithBrowserType(Enums.BrowserType.Chrome)
.WithProfileDataDirectory(ChromeProfileLocation)
.WithUseAutomationEngine(AutomationEngine.Selenium)
.WithWindowSize(new System.Drawing.Rectangle(0,0,1920,1080))
.ToGPALObject();