เปลี่ยนเว็บไซต์โบราณให้เป็น API

Mar 17 2023
ในขณะที่บริษัทต่าง ๆ พยายามเพิ่มประสิทธิภาพกระบวนการและลดงานที่ไม่เพิ่มมูลค่า กระบวนการทำงานอัตโนมัติจึงได้รับความนิยมมากขึ้นเรื่อยๆ การทำงานอัตโนมัติไม่เพียงแต่ลดรอบเวลาเท่านั้น แต่ยังลดโอกาสเกิดข้อผิดพลาดให้เหลือน้อยที่สุด และสร้างสภาพแวดล้อมการทำงานที่ดียิ่งขึ้น

ในขณะที่บริษัทต่าง ๆ พยายามเพิ่มประสิทธิภาพกระบวนการและลดงานที่ไม่เพิ่มมูลค่า กระบวนการทำงานอัตโนมัติจึงได้รับความนิยมมากขึ้นเรื่อยๆ การทำงานอัตโนมัติไม่เพียงแต่ลดรอบเวลาเท่านั้น แต่ยังลดโอกาสเกิดข้อผิดพลาดให้เหลือน้อยที่สุด และสร้างสภาพแวดล้อมการทำงานที่ดียิ่งขึ้น

แม้จะได้รับประโยชน์จากการทำงานอัตโนมัติ แต่บริษัทต่างๆ มักจะเผชิญกับอุปสรรค์สำคัญเมื่อพยายามทำงานซ้ำๆ โดยอัตโนมัติ นั่นคือเว็บไซต์ที่ล้าสมัยซึ่งเป็นศูนย์กลางของกระบวนการทำงาน แม้ว่าเว็บไซต์เหล่านี้จำเป็นสำหรับการรวบรวมข้อมูลที่สำคัญและเริ่มต้นสตรีมกระบวนการ แต่ก็มักจะขาดความซับซ้อนของภูมิทัศน์ทางเทคโนโลยีที่มีอยู่ของบริษัท และเป็นการยากที่จะรวมเข้ากับกระบวนการอัตโนมัติ

โชคดีที่นักเขียนบทละครมีวิธีแก้ปัญหา ด้วยการใช้เทคโนโลยีที่ล้ำสมัยนี้ ธุรกิจต่างๆ สามารถเปลี่ยนเว็บไซต์เก่าๆ ให้เป็น RESTful API ที่เข้ากับโมเดลที่มีอยู่ได้อย่างลงตัว ทำไมต้องรอ? อย่าปล่อยให้เว็บไซต์ที่ล้าสมัยขัดขวางคุณจากการบรรลุเป้าหมายการทำงานอัตโนมัติของคุณ โอบกอดนักเขียนบทละครและยกระดับความพยายามอัตโนมัติของคุณไปอีกขั้น!

ในตัวอย่างจริง เราต้องการสำรวจวิธีการทำงานอัตโนมัตินี้ ในกรณีนี้ SME ของโปแลนด์พยายามประหยัดเวลาหลายชั่วโมงในการตรวจสอบผู้มีโอกาสเป็นลูกค้าและคู่ค้าโดยใช้เว็บไซต์หอการค้าโปแลนด์ ( PRS )

ก่อนอื่นเรามาดูหน้ากากค้นหา:

อย่างที่เราเห็นนี่เป็นรูปแบบง่ายๆที่มีช่องใส่ข้อมูลและปุ่มค้นหา

ในตัวอย่างนี้ เราใช้ Playwright เพื่อเปิดเบราว์เซอร์ Chromium นำทางไปยังหน้าเว็บ ทำเครื่องหมายที่ประเภทบันทึกทั้งสองที่เรากำลังมองหาโดยใช้ 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");
});

Browsie.io ทำให้การทำงานอัตโนมัติของเว็บแอปพลิเคชันง่ายขึ้นด้วยการจัดเตรียมส่วนต่อประสานที่ใช้งานง่ายและเวิร์กโฟลว์ที่มีประสิทธิภาพ ต้องใช้โค้ดน้อยลงและออกแบบมาเพื่อจัดการกับกรณีการใช้งานที่ซับซ้อนได้อย่างง่ายดาย Browsie.ioใช้พร็อกซีและเบราว์เซอร์ที่ใช้งานจริงในระบบคลาวด์ ทำให้การตั้งค่ามีประสิทธิภาพและปลอดภัยยิ่งขึ้น

ด้วย Browsie.io ธุรกิจสามารถประหยัดเวลาและทรัพยากรในขณะที่ปรับปรุงประสิทธิภาพของเวิร์กโฟลว์ API ใช้งานง่ายและสามารถช่วยให้เว็บแอปพลิเคชันที่ท้าทายที่สุดทำงานอัตโนมัติได้ ดังนั้น หากคุณกำลังมองหาวิธีที่น่าเชื่อถือและมีประสิทธิภาพในการทำให้เว็บไซต์คร่ำครึของคุณเป็นอัตโนมัติBrowsie.ioเป็นโซลูชั่นที่สมบูรณ์แบบสำหรับคุณ

อะไรคืออุปสรรค์ของระบบอัตโนมัติบนเว็บของคุณในปัจจุบัน แสดงความคิดเห็นกับเรา!