Arkaik Web Sitelerini API'lere Dönüştürmek

Mar 17 2023
Şirketler süreçlerini optimize etmeye ve katma değeri olmayan işleri azaltmaya çalışırken, süreç otomasyonu giderek daha popüler hale geldi. Otomasyon yalnızca döngü sürelerini azaltmakla kalmaz, aynı zamanda hata olasılığını en aza indirir ve daha olumlu bir çalışma ortamı yaratır.

Şirketler süreçlerini optimize etmeye ve katma değeri olmayan işleri azaltmaya çalışırken, süreç otomasyonu giderek daha popüler hale geldi. Otomasyon yalnızca döngü sürelerini azaltmakla kalmaz, aynı zamanda hata olasılığını en aza indirir ve daha olumlu bir çalışma ortamı yaratır.

Otomasyonun faydalarına rağmen şirketler, tekrarlayan görevleri otomatikleştirmeye çalışırken genellikle büyük bir engelle karşılaşır: süreçlerinin merkezinde yer alan eski web siteleri. Bu web siteleri, kritik bilgileri toplamak ve süreç akışlarını başlatmak için gerekli olsa da, genellikle bir şirketin mevcut teknoloji ortamının karmaşıklığından yoksundurlar ve otomasyon sürecine entegre edilmeleri imkansız değilse bile zordur.

Neyse ki Playwright bir çözüm sunuyor. İşletmeler, bu en son teknolojiyi kullanarak arkaik web sitelerini mevcut modellerine sorunsuz bir şekilde uyan RESTful API'lere dönüştürebilir. Öyleyse neden bekleyelim? Eski web sitelerinin sizi otomasyon hedeflerinize ulaşmaktan alıkoymasına izin vermeyin. Playwright'ı kucaklayın ve otomasyon çabalarınızı bir sonraki seviyeye taşıyın!

Gerçek canlı bir örnek üzerinde, bu otomatikleştirme yöntemini keşfetmek istiyoruz. Bu durumda Polonyalı bir KOBİ, Polonya Ticaret Odası web sitesini ( PRS ) kullanarak potansiyel müşterilerini ve ortaklarını saatlerce incelemeden kurtarmaya çalıştı .

İlk önce arama maskesine bir göz atalım:

Gördüğümüz gibi bu, bazı giriş alanları ve arama düğmesi olan basit bir formdur.

Bu örnekte, bir Chromium tarayıcısını başlatmak, bir web sayfasına gitmek, CSS Seçiciyi kullanarak aradığımız her iki günlük tipini de işaretlemek için Playwright kullanıyoruz:

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");
});

Browsie.io, kullanıcı dostu bir arayüz ve verimli bir iş akışı sağlayarak web uygulamalarının otomasyonunu basitleştirir. Daha az kod satırı gerektirir ve karmaşık kullanım durumlarını kolaylıkla işlemek için tasarlanmıştır. Browsie.io , kurulumu daha sağlam ve güvenli hale getiren proxy'ler ve bulutta başlatılan gerçek bir tarayıcı kullanır.

Browsie.io ile işletmeler, iş akışlarının verimliliğini artırırken zamandan ve kaynaklardan tasarruf edebilir. API'nin kullanımı kolaydır ve en zorlu web uygulamalarının bile otomatikleştirilmesine yardımcı olabilir. Bu nedenle, eski web sitelerinizi otomatikleştirmenin güvenilir ve verimli bir yolunu arıyorsanız, Browsie.io sizin için mükemmel bir çözümdür.

Mevcut web otomasyonu engelleriniz nelerdir? Bize bir yorum verin!