The controller is a web page served by GPALRestAPI. Open http://localhost:3000/controller in a browser to load it. GPALRestAPI tries port 3000 at startup and increments until it finds an open one. If you are running multiple GPALRestAPI instances on the same machine, each will be on a different port -- and you need to know which port belongs to which browser session. There is no discovery utility that lists active ports, so navigating to the wrong port will open the wrong controller.
// Navigate to it in any browser while
// GPALRestAPI
// http://localhost:3000/controller
//
// Or open it from inside a workflow:
GPAL
"http://localhost:3000/controller")
When multiple GPALRestAPI instances are running simultaneously, open the correct /controller by using the specific port for the browser you want to control -- for example http://localhost:3001/controller. The port is assigned at startup and does not change while that instance is running.
The builder presents every REST API endpoint as a selectable step -- navigate, click, type, scrape, switch tab, scroll, and more. Pick a step, configure its parameters, and run it immediately against the live browser page. Steps can be chained into a sequence and executed in order with the Run Workflow button. Use Save to download the sequence as workflow.json and Load to restore it later -- the file is specific to the controller and replays the same step list without re-entering each parameter.
The workflow.json file the controller saves is a list of REST endpoint calls and parameters. It can be loaded back into the controller and re-run, but it is not a compiled GPAL workflow and cannot be directly imported into a C# program.
The controller can be opened from any browser on your local network -- not just the host machine. This makes it possible to control a browser running on a headless server or a separate workstation from your laptop. By default GPALRestAPI only accepts local connections. When it detects that remote access is blocked it displays a notification, generates the exact netsh commands for your IP and port, and copies them to the clipboard. Paste them into an elevated Command Prompt on the host, then restart GPALRestAPI.
// Run ONCE in an elevated Command Prompt
// on the machine running GPALRestAPI
// GPALRestAPI generates and copies the exact
// commands for your IP and port to the clipboard
// when it detects remote access is blocked
netsh http add urlacl url=http://192
netsh advfirewall firewall add rule ^^
name="GPAL REST API - Port 3000 TCP Inbound" ^^
dir=in action=allow protocol=TCP ^^
localport=3000 profile=private
// Then restart GPALRestAPI
The firewall rule generated by GPALRestAPI uses profile=private, which limits access to your private LAN. Do not change it to profile=any unless you fully understand the exposure -- the controller can execute browser actions on the host machine with no authentication.
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();