Transformando sites arcaicos em APIs
À medida que as empresas se esforçam para otimizar seus processos e reduzir o trabalho sem valor agregado, a automação de processos tornou-se cada vez mais popular. A automação não apenas reduz os tempos de ciclo, mas também minimiza o potencial de erros e cria um ambiente de trabalho mais positivo.
Apesar dos benefícios da automação, as empresas geralmente enfrentam um grande obstáculo ao tentar automatizar tarefas repetitivas: sites desatualizados que são essenciais para seus processos. Embora esses sites sejam essenciais para coletar informações críticas e iniciar fluxos de processo, eles geralmente carecem da sofisticação do cenário tecnológico existente de uma empresa e são difíceis, se não impossíveis, de integrar ao processo de automação.
Felizmente, o Playwright fornece uma solução. Ao utilizar essa tecnologia de ponta, as empresas podem transformar sites arcaicos em APIs RESTful que se encaixam perfeitamente em seu modelo existente. Então, por que esperar? Não deixe que sites desatualizados o impeçam de atingir suas metas de automação. Abrace o Dramaturgo e leve seus esforços de automação para o próximo nível!
Em um exemplo real, queremos explorar essa forma de automação. Neste caso, uma PME polonesa tentou economizar horas e horas examinando potenciais clientes e parceiros usando o site da câmara de comércio polonesa ( PRS ).
Primeiro, damos uma olhada na máscara de pesquisa:
Como podemos ver, este é um formulário simples com alguns campos de entrada e um botão de pesquisa.
Neste exemplo, estamos usando o Playwright para iniciar um navegador Chromium, navegar para uma página da Web, marcar os dois tipos de log que estamos procurando usando o CSS-Selector:
const { chromium } = require('playwright');
async function getGOVPL(){
const browser = await chromium.launch();
const page = await browser.newPage();
// Navigate to the page
await page.goto('https://wyszukiwarka-krs.ms.gov.pl/');
// Click Checkboxes
await page
.locator("p-checkbox:has-text('Przedsiębiorcy') div:nth-child(2)")
.click();
await page
.locator(
"p-checkbox:has-text('Stowarzyszenia, inne organizacje społ. i zawodowe,
fundacje, ZOZ') div:nth-child(2)")
.click();
...
}
module.exports = getGOVPL;
//Selectors for input and button
await page
.locator('ds-input[label="Nazwa"] input:nth-child(1)')
.fill("Softwarehut");
await page
.locator("button:has-text('Wyszukaj'):visible")
.click();
const table = await page.$("div#p-panel-5 table");
const thead = await table.$("thead");
const ths = await thead.$$("th");
const headers = await Promise.all(
ths.map(async (th) => {
const header = await th.innerText();
return header.trim();
})
);
const ths = page.locator("div#p-panel-5 table thead th:visible");
const tbds = page.locator("div#p-panel-5 table tbody tr td:visible");
await page.waitForSelector("div#p-panel-5 table tbody tr td", {
state: "visible",
});
await page.waitForTimeout(1000);
const thsCount = await ths.count();
const result: any = {};
for (let i = 0; i < thsCount; i++) {
const key = await ths.nth(i).innerText();
const value = await tbds.nth(i).innerText();
result[key] = value;
}
return result;
await browser.close();
const express = require("express");
const app = express();
const getGOVPL = require("./example");
const { chromium } = require("playwright");
app.get("/govpl", async (req, res) => {
const result = await getGOVPL();
res.send(result);
});
app.listen(3000, () => {
console.log("Server started on port 3000");
});
curl "http://localhost:3000/govpl"
// example.js
const { chromium } = require("playwright");
async function getGOVPL(searchValue) {
if (!searchValue) {
return { error: "No search value provided" };
}
const browser = await chromium.launch();
const page = await browser.newPage();
// Navigate to the page containing the input element
await page.goto("https://wyszukiwarka-krs.ms.gov.pl/");
await page
.locator("p-checkbox:has-text('Przedsiębiorcy') div:nth-child(2)")
.click();
await page
.locator(
"p-checkbox:has-text('Stowarzyszenia, inne organizacje społ. i zawodowe, fundacje, ZOZ') div:nth-child(2)"
)
.click();
await page
.locator('ds-input[label="Nazwa"] input:nth-child(1)')
.fill(searchValue);
await page.locator("button:has-text('Wyszukaj'):visible").click();
const ths = page.locator("div#p-panel-5 table thead th:visible");
const tbds = page.locator("div#p-panel-5 table tbody tr td:visible");
await page.waitForSelector("div#p-panel-5 table tbody tr td", {
state: "visible",
});
await page.waitForTimeout(2000);
const thsCount = await ths.count();
const result = {};
for (let i = 0; i < thsCount; i++) {
const key = await ths.nth(i).innerText();
const value = await tbds.nth(i).innerText();
result[key] = value;
}
return result;
}
module.exports = getGOVPL;
// api.js
const express = require("express");
const app = express();
const getGOVPL = require("./example");
const { chromium } = require("playwright");
app.get("/govpl", async (req, res) => {
const inputValue = req.query.inputValue;
const result = await getGOVPL(inputValue);
res.send(result);
});
app.listen(3000, () => {
console.log("Server started on port 3000");
});
O Browsie.io simplifica a automação de aplicativos da Web, fornecendo uma interface amigável e um fluxo de trabalho eficiente. Requer menos linhas de código e foi projetado para lidar com casos de uso complexos com facilidade. O Browsie.io usa proxies e um navegador real lançado na nuvem, tornando a configuração mais robusta e segura.
Com o Browsie.io, as empresas podem economizar tempo e recursos, melhorando a eficiência de seus fluxos de trabalho. A API é fácil de usar e pode ajudar a automatizar até mesmo os aplicativos da Web mais desafiadores. Portanto, se você está procurando uma maneira confiável e eficiente de automatizar seus sites arcaicos, o Browsie.io é a solução perfeita para você.
Quais são seus obstáculos atuais de automação da web. Dê-nos um comentário!





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)