30 พ.ย. 2020 เวลา 09:31 • ไอที & แก็ดเจ็ต
การใช้ selenium-webdriver in nodejs
ก่อนอื่น เรามาทำความรู้จักกันก่อนว่า selenium เอาไว้ใช้ทำอะไร
ผมข้อยกตัวอย่าง คร่าวๆ นะครับ selenium จะเป็นเมือน bot เอาไว้ เปิดBrowser แล้วกรอกนู่น กรอกนี่ ติ๊กไอนั่น เลือกไอโน่น แล้วกด submit ให้เราเสร็จเลย
การเขียน พวกนี้มันก็มีอยู่หลายตัว เช่น framework(python), cucumber(ruby), nightwatchjs(javascripts) ซึ่งผมขอเลือก selenium-webdriver แล้วกัน เหตุผลง่ายๆ คือ ใช้ npm i ใน nodejs ได้เลย
จริงๆ แล้ว selenium-webdriver มันรองรับหลายภาษาดูได้ตามนี้ http://www.seleniumhq.org/download / ซึ่งผมจะใช้ javascripts
สิ่งที่ต้องเตรียมก่อน
nodejs
npm or yarn
1. เริ่มจากติดตั้งเจ้า selenium-webdriver ก่อนเลย
npm install selenium-webdriver
// or
yarn add selenium-webdriver
แต่ว่าเจ้า selenium-webdriver มันยังทำงานด้วยตัวเองไม่ได้ มันต้องมี driver ของ Browser นั้นด้วย ซึ่งผมจะใช้ Chrome อย่างเดียว
2. ติดตั้ง Chrome Driver
yarn add chromedriver
ผมจะใช้เป็น express นะครับ
ในส่วนของ package.json มีดังนี้
{
"name": "scbauto",
"version": "0.0.0",
"private": true,
"scripts": {
"dev": "nodemon ./bin/www",
"start": "node ./bin/www"
},
"dependencies": {
"body-parser": "^1.19.0",
"chromedriver": "^86.0.0",
"cookie-parser": "~1.4.4",
"debug": "~2.6.9",
"express": "^4.16.4",
"express-queue": "0.0.12",
"express-session": "^1.17.1",
"express-validator": "^6.6.1",
"moment": "^2.29.1",
"morgan": "~1.9.1",
"nodemon": "^2.0.6",
"phantom": "^6.3.0",
"queue": "^6.0.1",
"selenium-webdriver": "^4.0.0-alpha.7"
}
}
code
require("chromedriver");
const session = require('express-session');
const fs = require('fs');
const path = require('path');
const { promisify } = require('util');
const writeFileAsync = promisify(fs.writeFile);
const queue = require("queue");
const phantom = require('phantom');
const { validationResult } = require('express-validator');
// Include selenium webdriver
let tab;
exports.google = async (req, res, next) => {
try {
swd = require("selenium-webdriver");
browser = new swd.Builder();
tab = browser.forBrowser("chrome").withCapabilities(swd.Capabilities.chrome()).build();
await tab.get("https://google.com");
await tab.takeScreenshot().then(function(data){
fs.writeFileSync('screen1.png', data, 'base64');
});
res.status(200).json({
data: 'success'
});
} catch (error) {
next(error);
}
}
พอเรา run จะเห็นว่า browser chrome จะเปิดขึ้นเอง
ถ้าใครได้ตามนี้แปลว่าเสร็จแล้ว
part ต่อไปจะมา ดึงข้อมูลในหน้าเว็บมาครับ
โฆษณา