PhantomJS - คู่มือฉบับย่อ

PhantomJS กล่าวกันว่าเป็น headless browserเนื่องจากไม่มีส่วนเกี่ยวข้องของเบราว์เซอร์ในขณะที่เรียกใช้โค้ด JavaScript การดำเนินการจะไม่ปรากฏในจอแสดงผลของเบราว์เซอร์ แต่อยู่ในพรอมต์บรรทัดคำสั่ง ฟังก์ชั่นเช่นCSS Handling, DOM Manipulation, JSON, Ajax, Canvas, SVG,ฯลฯ ทั้งหมดจะได้รับการดูแลที่พรอมต์คำสั่ง PhantomJS ไม่มี GUI ดังนั้นการดำเนินการทั้งหมดจะเกิดขึ้นที่บรรทัดคำสั่ง

การใช้ PhantomJS เราสามารถเขียนลงไฟล์อ่านเนื้อหาของไฟล์หรืออัปโหลดไฟล์จับภาพหน้าจอแปลงหน้าเว็บเป็น pdf และอื่น ๆ อีกมากมาย ด้วยเบราว์เซอร์ที่ไม่มีหัวคุณจะได้รับพฤติกรรมทั้งหมดของเบราว์เซอร์เช่นCookies, Http Request Methods กล่าวคือ GET /POST, Clearing Cookies, Deleting Cookiesฯลฯ Reloading of Page, Navigating to a Different Page.

PhantomJS ใช้ WebKit ที่มีสภาพแวดล้อมการท่องเว็บคล้าย ๆ กับเบราว์เซอร์ที่มีชื่อเสียงเช่น Google Chrome, Mozilla Firefox, Safari เป็นต้นนอกจากนี้ยังมี JavaScript API จำนวนมากซึ่งช่วยในการจับภาพหน้าจอการอัปโหลดไฟล์การเขียนลงไฟล์การอ่านไฟล์ , โต้ตอบกับหน้าเว็บ ฯลฯ

PhantomJS ไม่รองรับ Flash หรือ Video เนื่องจากต้องใช้ปลั๊กอินและเป็นการยากที่จะรองรับสิ่งเดียวกันในบรรทัดคำสั่ง

คุณสมบัติของ PhantomJS

ตอนนี้ให้เราเข้าใจคุณสมบัติที่ PhantomJS นำเสนอ

หน้าอัตโนมัติ

PhantomJS ช่วยให้คุณอ่านเนื้อหาของหน้าด้วยความช่วยเหลือของ API สามารถช่วยในการจัดการ DOM ใช้ไลบรารีภายนอกเพื่อดำเนินงานที่ต้องการ

จับภาพหน้าจอ

PhantomJS ช่วยในการจับภาพหน้าจอของหน้าที่ระบุและบันทึกเช่นเดียวกับภาพในรูปแบบต่างๆเช่น PNG, JPEG, PDF และ GIF ด้วยความช่วยเหลือของการจับภาพหน้าจอจะสามารถช่วยให้แน่ใจว่าเนื้อหาเว็บนั้นดี

PhantomJS นำเสนอคุณสมบัติและวิธีการที่ช่วยให้นักพัฒนาสามารถปรับขนาดของภาพหน้าจอและระบุพื้นที่ที่พวกเขาต้องการจับภาพ

การทดสอบหัวขาด

PhantomJS ช่วยทดสอบ UI ที่บรรทัดคำสั่ง ในขณะที่ด้วยความช่วยเหลือของภาพหน้าจอจะสามารถช่วยค้นหาข้อผิดพลาดใน UI ได้อย่างง่ายดาย บางครั้ง PhantomJS ไม่สามารถช่วยในการทดสอบเพียงอย่างเดียว อย่างไรก็ตามสามารถรวมเข้ากับไลบรารีการทดสอบอื่น ๆ เช่น Mocha, Yoeman เป็นต้นคุณสามารถใช้ PhantomJS เพื่ออัปโหลดไฟล์และส่งแบบฟอร์ม

PhantomJS สามารถใช้เพื่อทดสอบการเข้าสู่ระบบในไซต์ต่างๆและตรวจสอบให้แน่ใจว่าการรักษาความปลอดภัยไม่ถูกบุกรุก PhantomJS สามารถใช้ร่วมกับเครื่องมืออื่น ๆ เช่นCasperJS, Mocha, Qunit เพื่อให้การทดสอบมีประสิทธิภาพมากขึ้น

การตรวจสอบเครือข่าย

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

PhantomJS สามารถใช้เพื่อรวบรวมข้อมูลเกี่ยวกับประสิทธิภาพของเว็บเพจในสภาพแวดล้อมจริง PhantomJS สามารถใช้กับเครื่องมือเช่นYslow เพื่อรวบรวมเมตริกประสิทธิภาพของเว็บไซต์ใด ๆ

PhantomJS เป็นซอฟต์แวร์ฟรีและเผยแพร่ภายใต้ BSD License. ติดตั้งง่ายและมีคุณสมบัติหลายอย่างในการเรียกใช้สคริปต์ PhantomJS สามารถทำงานได้อย่างง่ายดายบนหลายแพลตฟอร์มเช่น Windows, Linux และ Mac

สำหรับการดาวน์โหลด PhantomJS คุณสามารถไปที่ - http://phantomjs.org/ จากนั้นคลิกที่ตัวเลือกดาวน์โหลด

สำหรับ Windows

หน้าดาวน์โหลดจะแสดงตัวเลือกสำหรับการดาวน์โหลดสำหรับระบบปฏิบัติการต่างๆ ดาวน์โหลดไฟล์ zip แกะไฟล์และคุณจะได้รับไฟล์ปฏิบัติการphantom.exe. ตั้งค่าตัวแปรสภาพแวดล้อม PATH เป็นพา ธ ของไฟล์ phantom.exe เปิดพรอมต์คำสั่งใหม่แล้วพิมพ์phantomjs –v. ควรให้ PhantomJS เวอร์ชันปัจจุบันที่กำลังทำงานอยู่

สำหรับ MAC OS X

ดาวน์โหลดไฟล์ ZIP PhantomJS สำหรับ MAC OS และแตกเนื้อหา เมื่อดาวน์โหลดเนื้อหาแล้วให้ย้าย PhantomJS ไปที่ -/usr/local/bin/. ดำเนินการคำสั่ง PhantomJS เช่น phantomjs –v ที่เทอร์มินัลและควรให้คำอธิบายเวอร์ชันของ PhantomJS

ลินุกซ์ 64 บิต

ดาวน์โหลดไฟล์ zip PhantomJS สำหรับ Linux 64 บิตและแตกเนื้อหา เมื่อดาวน์โหลดเนื้อหาแล้วให้ย้ายโฟลเดอร์ PhantomJS ไปที่/usr/local/share/ และ create a symlink -

sudo mv $PHANTOM_JS /usr/local/share sudo ln -sf /usr/local/share/$PHANTOM_JS/bin/phantomjs /usr/local/bin.

ดำเนินการ phantomjs –v ที่เทอร์มินัลและควรให้เวอร์ชันของ PhantomJS

ลินุกซ์ 32 บิต

ดาวน์โหลดไฟล์ zip PhantomJS สำหรับ Linux 32 บิตและแตกเนื้อหา เมื่อดาวน์โหลดเนื้อหาแล้วให้ย้ายโฟลเดอร์ PhantomJS ไปที่/usr/local/share/ และสร้าง symlink -

sudo mv $PHANTOM_JS /usr/local/share sudo ln -sf /usr/local/share/$PHANTOM_JS/bin/phantomjs /usr/local/bin.

ดำเนินการ phantomjs –v ที่เทอร์มินัลและควรให้เวอร์ชันของ PhantomJS

ซอร์สโค้ด PhantomJS สามารถนำมาจากที่เก็บ git ได้โดยคลิกที่ลิงค์ต่อไปนี้ - https://github.com/ariya/phantomjs/

ในการรันสคริปต์ใน PhantomJS คำสั่งมีดังนี้ -

phantomjs jsfile arg1 arg2…

ในบทนี้เราจะดูสี่วัตถุสำคัญ PhantomJS มีดังนี้ -

  • CookiesEnabled
  • Cookies
  • LibraryPath
  • Version

ตอนนี้ให้เราคุยรายละเอียดแต่ละเรื่องเหล่านี้

cookiesEnabled

จะบอกว่าคุกกี้ถูกเปิดใช้งานหรือไม่ มันจะกลับมาtrue, ถ้าใช่; มิฉะนั้นfalse.

ไวยากรณ์

ไวยากรณ์มีดังนี้ -

phantom.cookiesEnabled

ตัวอย่าง

cookieenabled.js

phantom.addCookie ({  
   //adding cookie with addcookie property 
   name: 'c1', 
   value: '1', 
   domain: 'localhost' 
}); 

console.log("Cookie Enabled value is : "+phantom.cookiesEnabled); 
phantom.exit();

เอาต์พุต

Command - phantomjs cookieenabled.js

Cookie Enabled value is : true

คุ้กกี้

ช่วยเพิ่มและตั้งค่าคุกกี้ให้กับโดเมน ส่งคืนวัตถุพร้อมคุกกี้ทั้งหมดที่มีอยู่สำหรับโดเมน

ไวยากรณ์

ไวยากรณ์มีดังนี้ -

phantom.cookies;

ตัวอย่าง

Filename: phantomcookie.js

phantom.addCookie ({ 
   name: 'c1', 
   value: '1', 
   domain: 'localhost' 
}); 
phantom.addCookie ({ 
   name: 'c2', 
   value: '2', 
   domain: 'localhost' 
}); 
phantom.addCookie ({ 
   name: 'c3', 
   value: '3', 
   domain: 'localhost' 
}); 
console.log(JSON.stringify(phantom.cookies)); 
phantom.exit();

เอาต์พุต

Command - phantomjs phantomcookie.js

[{"domain":".localhost","httponly":false,"name":"c3","path":"/","secure":false, " 
value":"3"},{"domain":".localhost","httponly":false,"name":"c2","path":"/","sec u 
re":false,"value":"2"},{"domain":".localhost","httponly":false,"name":"c1","pat h
":"/","secure":false,"value":"1"}]

ในตัวอย่างข้างต้นเราได้เพิ่มคุกกี้ลงในโดเมน localhost จากนั้นเราดึงข้อมูลโดยใช้phantom.cookies. ส่งคืนวัตถุที่มีคุกกี้ทั้งหมดโดยใช้ไฟล์JSON stringifyวิธีการแปลงวัตถุ JavaScript เป็นสตริง คุณยังสามารถใช้foreach เพื่อเข้าถึงชื่อ / ค่าของคุกกี้

LibraryPath

PhantomJS libraryPath เก็บพา ธ สคริปต์ที่จะใช้โดย injectJS วิธี.

ไวยากรณ์

ไวยากรณ์มีดังนี้ -

phantom.libraryPath

ตัวอย่าง

นี่คือตัวอย่างเพื่อค้นหาเวอร์ชัน

var webPage = require('webpage');
var page = webPage.create();

page.open('http://www.tutorialspoint.com/jquery', function(status) {
   if (status === "success") { 
      page.includeJs('http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js ', function() { 
         if (page.injectJs('do.js')) { 
            // returnTitle is a function loaded from our do.js file - see below 
            return returnTitle(); 
         });
         
         console.log(title); 
         phantom.exit(); 
      } 
   } 
});

window.returnTitle = function() { 
   return document.title;
};

โปรแกรมข้างต้นสร้างสิ่งต่อไปนี้ output.

Jquery Tutorial

เวอร์ชัน

จะให้เวอร์ชันของ PhantomJS ที่กำลังทำงานอยู่และส่งกลับรายละเอียดในวัตถุ ตัวอย่างเช่น: {"major": 2, "minor": 1, "patch": 1}

ไวยากรณ์

ไวยากรณ์มีดังนี้ -

phantom.version

ตัวอย่าง

นี่คือตัวอย่างเพื่อค้นหาเวอร์ชัน

var a = phantom.version;
console.log(JSON.stringify(a));
console.log(a.major);
console.log(a.minor);
console.log(a.patch);
phantom.exit();

โปรแกรมข้างต้นสร้างสิ่งต่อไปนี้ output.

{"major":2,"minor":1,"patch":1} 
2 
1 
1

ในตัวอย่างข้างต้นเราได้ใช้ console.logเพื่อพิมพ์เวอร์ชัน ขณะนี้เรากำลังใช้งานเวอร์ชัน 2 โดยจะส่งคืนวัตถุพร้อมรายละเอียดที่แสดงในบล็อกโค้ดด้านบน

PhantomJS เป็นแพลตฟอร์มที่ช่วยเรียกใช้งาน JavaScript โดยไม่ต้องใช้เบราว์เซอร์ ในการทำเช่นนั้นจะใช้วิธีการต่อไปนี้ซึ่งช่วยในการเพิ่มคุกกี้การลบการล้างการออกจากสคริปต์การแทรก JS และอื่น ๆ

เราจะพูดคุยเพิ่มเติมเกี่ยวกับวิธีการ PhantomJS และไวยากรณ์ของพวกเขาในบทนี้ วิธีการที่คล้ายกันเช่นaddcookie, injectjs มีอยู่ในโมดูลหน้าเว็บซึ่งจะกล่าวถึงในบทต่อ ๆ ไป

PhantomJS เปิดเผยวิธีการต่อไปนี้ที่สามารถช่วยให้เรารัน JavaScript ได้โดยไม่ต้องใช้เบราว์เซอร์ -

  • addCookie
  • clearCookie
  • deleteCookie
  • Exit
  • InjectJS

ตอนนี้ให้เราเข้าใจวิธีการเหล่านี้โดยละเอียดพร้อมตัวอย่าง

addCookie

วิธีการ addcookie ใช้เพื่อเพิ่มคุกกี้และจัดเก็บในข้อมูล มันคล้ายกับวิธีที่เบราว์เซอร์จัดเก็บ ใช้อาร์กิวเมนต์เดียวที่เป็นวัตถุที่มีคุณสมบัติทั้งหมดของคุกกี้และรูปแบบดังที่แสดงด้านล่าง -

ไวยากรณ์

ไวยากรณ์มีดังนี้ -

phantom.addCookie ({ 
   "name" : "cookie_name",  
   "value" : "cookie_value", 
   "domain" : "localhost" 
});

ชื่อค่าโดเมนเป็นคุณสมบัติบังคับที่ต้องเพิ่มในฟังก์ชัน addcookie หากไม่มีคุณสมบัตินี้ในวัตถุคุกกี้วิธีนี้จะล้มเหลว

  • name - ระบุชื่อคุกกี้

  • value - ระบุมูลค่าของคุกกี้ที่จะใช้

  • domain - โดเมนที่จะใช้คุกกี้

ตัวอย่าง

นี่คือตัวอย่างของไฟล์ addcookie วิธี.

var page = require('webpage').create(),url = 'http://localhost/tasks/a.html'; 
page.open(url, function(status) { 
   if (status === 'success') {     
      phantom.addCookie({   //add name cookie1 with value = 1 
         name: 'cookie1', 
         value: '1', 
         domain: 'localhost' 
      }); 
      phantom.addCookie({   // add cookie2 with value 2 
         name: 'cookie2', 
         value: '2', 
         domain: 'localhost' 
      }); 
      phantom.addCookie({   // add cookie3 with value 3 
         name: 'cookie3', 
         value: '3', 
         domain: 'localhost' 
      }); 
      console.log('Added 3 cookies'); 
      console.log('Total cookies :'+phantom.cookies.length);  
      
      // will output the total cookies added to the url.    
   } else { 
      console.error('Cannot open file'); 
      phantom.exit(1); 
   } 
});

ตัวอย่าง

a.html

<html>
   <head>
      <title>Welcome to phantomjs test page</title>
   </head>
   
   <body>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
   </body>
</html>

โปรแกรมข้างต้นสร้างสิ่งต่อไปนี้ output.

Added 3 cookies 
Total cookies :3

ความคิดเห็นเกี่ยวกับโค้ดสามารถอธิบายได้ด้วยตนเอง

clearCookies

วิธีนี้ช่วยให้สามารถลบคุกกี้ทั้งหมดได้

ไวยากรณ์

ไวยากรณ์มีดังนี้ -

phantom.clearCookies();

แนวคิดนี้ทำงานคล้ายกับการลบคุกกี้ของเบราว์เซอร์โดยเลือกในเมนูเบราว์เซอร์

ตัวอย่าง

นี่คือตัวอย่างของไฟล์ clearCookies วิธี.

var page = require('webpage').create(),url = 'http://localhost/tasks/a.html'; 
page.open(url, function(status) { 
   if (status === 'success') {     
      phantom.addCookie({   //add name cookie1 with value = 1 
         name: 'cookie1', 
         value: '1', 
         domain: 'localhost' 
      }); 
      phantom.addCookie({   // add cookie2 with value 2 
         name: 'cookie2', 
         value: '2', 
         domain: 'localhost' 
      }); 
      phantom.addCookie({   // add cookie3 with value 3 
         name: 'cookie3', 
         value: '3', 
         domain: 'localhost' 
      }); 
      console.log('Added 3 cookies'); 
      console.log('Total cookies :'+phantom.cookies.length); 
      phantom.clearCookies(); 
      console.log(
         'After clearcookies method total cookies :' +phantom.cookies.length); 
      
      phantom.exit();     
   } else { 
      console.error('Cannot open file'); 
      phantom.exit(1); 
   } 
});

a.html

<html>
   <head>
      <title>Welcome to phantomjs test page</title>
   </head>
   
   <body>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
      <h1>This is a test page</h1>
   </body>
</html>

โปรแกรมข้างต้นสร้างสิ่งต่อไปนี้ output.

Added 3 cookies 
Total cookies :3 
After clearcookies method total cookies :0

deleteCookie

ลบคุกกี้ใด ๆ ในไฟล์ CookieJarด้วยคุณสมบัติ 'ชื่อ' ที่ตรงกับ cookieName มันจะกลับมาtrueหากลบสำเร็จ มิฉะนั้นfalse.

ไวยากรณ์

ไวยากรณ์มีดังนี้ -

phantom.deleteCookie(cookiename);

ให้เราเข้าใจ addcookie, clearcookies และ deletecookie ด้วยความช่วยเหลือของตัวอย่าง

ตัวอย่าง

นี่คือตัวอย่างเพื่อสาธิตการใช้เมธอด deleteCookie -

File: cookie.js

var page = require('webpage').create(),url = 'http://localhost/tasks/a.html'; 
page.open(url, function(status) { 
   if (status === 'success') {     
      phantom.addCookie({   //add name cookie1 with value = 1 
         name: 'cookie1', 
         value: '1', 
         domain: 'localhost' 
      }); 
      phantom.addCookie({   // add cookie2 with value 2 
         name: 'cookie2', 
         value: '2', 
         domain: 'localhost' 
      });
      phantom.addCookie({   // add cookie3 with value 3 
         name: 'cookie3', 
         value: '3', 
         domain: 'localhost' 
      });  
      console.log('Added 3 cookies'); 
      console.log('Total cookies :'+phantom.cookies.length); 
      
      //will output the total cookies added to the url.    
      console.log("Deleting cookie2"); 
      phantom.deleteCookie('cookie2'); 
      
      console.log('Total cookies :'+phantom.cookies.length); 
      phantom.clearCookies();
      
      console.log(
         'After clearcookies method total cookies :' +phantom.cookies.length); 
      phantom.exit(); 
   } else { 
      console.error('Cannot open file'); 
      phantom.exit(1); 
   } 
});

โปรแกรมข้างต้นสร้างสิ่งต่อไปนี้ output.

phantomjs cookie.js
Added 3 cookies
Total cookies :3
Deleting cookie2
Total cookies :2
After clearcookies method total cookies :0

ออก

เมธอด phantom.exit จะออกจากสคริปต์ที่เริ่มต้น ออกจากโปรแกรมพร้อมค่าส่งคืนที่กล่าวถึง มันให้‘0’หากไม่มีค่าที่ส่งผ่าน

ไวยากรณ์

ไวยากรณ์มีดังนี้ -

phantom.exit(value);

ในกรณีที่คุณไม่ได้เพิ่ม phantom.exitจากนั้นบรรทัดคำสั่งจะถือว่าการดำเนินการยังคงเปิดอยู่และจะไม่เสร็จสมบูรณ์

ตัวอย่าง

ให้เราดูตัวอย่างเพื่อทำความเข้าใจการใช้ไฟล์ exit วิธี.

console.log('Welcome to phantomJs');  // outputs Welcome to phantomJS 
var a = 1; 
if (a === 1) { 
   console.log('Exit 1'); //outputs Exit 1 
   phantom.exit(); // Code exits. 
} else { 
   console.log('Exit 2'); 
   phantom.exit(1); 
}

โปรแกรมข้างต้นสร้างสิ่งต่อไปนี้ output.

phantomjs exit.js

Welcome to phantomJs 
Exit 1

ส่วนของโค้ดใด ๆ หลังจาก phantom.exit จะไม่ถูกเรียกใช้เนื่องจาก phantom.exit เป็นวิธีการสิ้นสุดสคริปต์

ฉีด Js

InjectJs ใช้เพื่อเพิ่ม addtionaljsไฟล์ใน phantom หากไม่พบไฟล์ในปัจจุบันdirectory librarypathจากนั้นคุณสมบัติ phantom (phantom.libraryPath) จะถูกใช้เป็นสถานที่เพิ่มเติมในการติดตามเส้นทาง มันกลับมาtrue หากการเพิ่มไฟล์สำเร็จเป็นอย่างอื่น false สำหรับความล้มเหลวในกรณีที่ไม่สามารถค้นหาไฟล์ได้

ไวยากรณ์

ไวยากรณ์มีดังนี้ -

phantom.injectJs(filename);

ตัวอย่าง

ให้เราดูตัวอย่างต่อไปนี้เพื่อทำความเข้าใจการใช้ injectJs.

Filename: inject.js

console.log(“Added file”);

File name: addfile.js

var addfile =  injectJs(inject.js);
console.log(addfile);
phantom.exit();

เอาต์พุต

Command - C: \ phantomjs \ bin> phantomjs addfile.js

Added file // coming from inject.js
true

ในตัวอย่างข้างต้น addfile.js เรียกไฟล์ inject.jsโดยใช้ injectJs เมื่อคุณดำเนินการ addfile.js console.log ที่มีอยู่ใน inject.js จะแสดงในเอาต์พุต นอกจากนี้ยังแสดงเป็นจริงสำหรับตัวแปร addfile เนื่องจากเพิ่มไฟล์ inject.js เรียบร้อยแล้ว

PhantomJS มีคุณสมบัติและวิธีการมากมายที่จะช่วยให้เราโต้ตอบกับเนื้อหาภายในเว็บเพจ

คำสั่ง require ("webpage"). create () สร้างออบเจ็กต์เว็บเพจ เราจะใช้ออบเจ็กต์นี้เพื่อจัดการหน้าเว็บด้วยความช่วยเหลือของคุณสมบัติและวิธีการที่ระบุไว้ด้านล่าง

var wpage = require("webpage").create();

ตารางต่อไปนี้มีรายการคุณสมบัติของหน้าเว็บทั้งหมดที่เราจะพูดถึง

ส. เลขที่ คุณสมบัติและคำอธิบาย
1 สามารถ GoBack

คุณสมบัตินี้ส่งกลับ trueหากมีหน้าก่อนหน้าในประวัติการนำทาง ถ้าไม่,false.

2 canGoForward

คุณสมบัตินี้จะคืนค่าจริงหากมีหน้าถัดไปในประวัติการนำทาง ถ้าไม่,false.

3 clipRect

clipRect เป็นวัตถุที่มีค่าด้านบนซ้ายความกว้างและความสูงและใช้ในการจับภาพของหน้าเว็บเมื่อใช้โดยวิธีการ render ()

4 เนื้อหา

คุณสมบัตินี้มีเนื้อหาของเว็บเพจ

5 คุ้กกี้

ด้วยคุกกี้คุณสามารถตั้งค่า / รับคุกกี้ที่มีอยู่ใน URL นอกจากนี้ยังให้คุกกี้ที่มีอยู่ใน URL และคุกกี้ใหม่ที่ตั้งค่าบนหน้าเว็บ

6 กำหนดเอง

customHeaders ระบุส่วนหัวของคำร้องขอ HTTP เพิ่มเติมที่จะถูกส่งไปยังเซิร์ฟเวอร์สำหรับทุกคำขอที่ออกโดยเพจ

7 เหตุการณ์

มันให้รายการเหตุการณ์ที่ยาวเช่นตัวปรับแต่งรายละเอียดคีย์

8 focusFrameName

ส่งคืนชื่อของเฟรมที่โฟกัสในปัจจุบัน

9 frameContent

คุณสมบัตินี้ให้เนื้อหาของเฟรมที่แอ็คทีฟ

10 frameName

ส่งคืนชื่อของเฟรมที่โฟกัสในปัจจุบัน

11 framePlainText

คุณสมบัตินี้ยังให้เนื้อหาของเฟรมที่แอ็คทีฟปัจจุบัน แต่มีเฉพาะเนื้อหาที่ไม่มีแท็ก html

12 กรอบ

ให้ชื่อของเฟรมที่ใช้งานอยู่

13 frameUrl

คุณสมบัตินี้จะให้ url ของเฟรมที่โฟกัสในปัจจุบัน

14 framesCount

ให้จำนวนเฟรมที่มีอยู่บนเพจ

15 framesName

ให้อาร์เรย์ของชื่อเฟรม

16 libraryPath

คุณสมบัตินี้มีพา ธ ซึ่งใช้โดยเมธอด page.inectJs

17 การนำทาง

คุณสมบัตินี้กำหนดว่าการนำทางของเพจได้รับอนุญาตหรือไม่ หากเป็นจริงจะอยู่ใน url ของหน้าปัจจุบันและไม่อนุญาตให้คลิกที่หน้าเพื่อไปยังหน้าถัดไป

18 OfflineStoragePath

คุณสมบัตินี้ให้พา ธ ที่เก็บข้อมูลโดยใช้ window.localStorage เส้นทางสามารถเปลี่ยนได้โดยใช้ --local-storage-path จากบรรทัดรับคำสั่ง

19 OfflineStorageQuota

คุณสมบัตินี้กำหนดจำนวนข้อมูลสูงสุดที่คุณสามารถจัดเก็บใน window.localStorage ค่าคือ 5242880 ไบต์ซึ่งมีขนาด 5MB ค่านี้สามารถเขียนทับที่บรรทัดรับคำสั่งโดยใช้คำสั่งต่อไปนี้ --localstorage-quota = size ตรงนี้

20 เป็นเจ้าของ

ownerPages จะส่งคืนค่าจริงหรือเท็จหากเพจที่เปิดโดยเว็บเพจเป็นส่วนย่อยของเว็บเพจ

21 pagesWindowName

PagesWindowName จะให้ชื่อของหน้าต่างที่เปิดโดยใช้ window.open

22 หน้า

คุณสมบัติเพจจะให้อาร์เรย์ของเพจที่เปิดในเพจโดยใช้ window.open หากเพจถูกปิดใน url ที่คุณอ้างอิงเพจนั้นจะไม่ได้รับการพิจารณา

23 ขนาดกระดาษ

คุณสมบัตินี้ให้ขนาดคือขนาดของหน้าเว็บเมื่อจำเป็นต้องใช้เพื่อแปลงหน้าเว็บในรูปแบบ pdf PaperSize มีขนาดที่ต้องการในออบเจ็กต์

24 ข้อความธรรมดา

คุณสมบัตินี้ยังให้เนื้อหาของเฟรมที่แอ็คทีฟปัจจุบัน แต่มีเฉพาะเนื้อหาที่ไม่มีแท็ก html

25 scrollPosition

สิ่งนี้มีวัตถุที่ระบุตำแหน่งการเลื่อน มันให้ซ้ายและบน

26 การตั้งค่า

คุณสมบัตินี้จะให้การตั้งค่าของเว็บเพจเมื่อใช้เมธอด page.open เมื่อโหลดเพจแล้วการเปลี่ยนแปลงคุณสมบัติการตั้งค่าจะไม่สร้างผลกระทบใด ๆ

27 หัวข้อ

คุณสมบัตินี้จะให้ชื่อของหน้าที่คุณกำลังอ่าน

28 url

คุณสมบัตินี้จะให้ url ของเพจ

29 วิวพอร์ตขนาด

คุณสมบัตินี้อนุญาตให้เปลี่ยนขนาดของการแสดงหน้าต่าง ประกอบด้วยความกว้างและความสูงซึ่งคุณสามารถอ่านหรือเปลี่ยนแปลงได้ตามความต้องการ

30 windowName

ตั้งชื่อหน้าต่าง

31 ซูมแฟคเตอร์

คุณสมบัตินี้ระบุปัจจัยการซูมสำหรับวิธีการเรนเดอร์และ renderBase64 ช่วยในการซูมหน้าและจับภาพหน้าจอหากจำเป็น

โมดูลเว็บเพจมีวิธีการสำหรับ Cookies, Frames, Page Navigation, Reload, Rendering และ Uploading of Files.

ต่อไปนี้เป็นวิธีการที่มีอยู่ในหน้าเว็บ

ส. เลขที่ วิธีการและคำอธิบาย
1 addCookie ()

วิธีการ addCookie เพิ่มคุกกี้ไปยังหน้าที่ระบุ

2 childFramesCount()

วิธีนี้เลิกใช้แล้วตาม http://phantomjs.org.

3 childFramesName()

วิธีนี้เลิกใช้แล้วตาม http://phantomjs.org.

4 clearCookies ()

จะลบคุกกี้ทั้งหมดสำหรับหน้าที่ระบุ

5 ปิด()

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

6 currentFrameName()

วิธีนี้เลิกใช้แล้วตาม http://phantomjs.org.

7 deleteCookie ()

การดำเนินการนี้จะลบคุกกี้ที่มีชื่อตรงกับรายการคุกกี้ที่มีอยู่สำหรับ URL ของหน้าเว็บที่กำหนด

8 ประเมิน Async ()

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

9 ประเมินจาวาสคริปต์ ()

EvaluateJavaScript ช่วยในการดำเนินการฟังก์ชั่นที่ส่งผ่านไปเป็นสตริง โปรดทราบว่าสตริงที่ส่งผ่านจะต้องเป็นฟังก์ชันเท่านั้น

10 ประเมิน ()

การประเมินจะเรียกใช้ฟังก์ชันที่ส่งผ่านไป หากฟังก์ชันมีข้อความคอนโซลจะไม่แสดงโดยตรงในเทอร์มินัล ในการแสดงข้อความคอนโซลใด ๆ ที่คุณต้องใช้ onConsoleMessage phantom callback

11 getPage ()

สิ่งนี้จะทำให้คุณมีเพจย่อยที่ตรงกับ Windowname ที่ส่งใน getpage

12 กลับไป()

จะแสดงหน้าก่อนหน้าในประวัติการนำทางหากเฉพาะการนำทางไม่ได้ถูกล็อก

13 ไปข้างหน้า()

จะให้หน้าถัดไปในประวัติการนำทางหากไม่ได้ล็อกเฉพาะการนำทาง

14 ไป()

วิธีนี้ช่วยให้คุณสามารถไปยังหน้าต่างๆได้

15 includeJs ()

Includejs เรียกใช้ไฟล์ JS ภายนอกในเพจและเรียกใช้ฟังก์ชันเรียกกลับเมื่อเสร็จสิ้น

16 ฉีด Js ()

InjectJs รวมสคริปต์ภายนอกจากไฟล์ที่ระบุลงในเพจ หากไฟล์ไม่มีอยู่ในไดเร็กทอรีปัจจุบันจะใช้ libraryPath สำหรับการค้นหาเพิ่มเติมของไฟล์ มันจะคืนค่าจริงถ้าไฟล์ถูกแทรกมิฉะนั้นเป็นเท็จ

17 openUrl ()

OpenUrl เปิดหน้าเว็บ คล้ายกับวิธีเปิดของ PhantomJS OpenUrl มีพารามิเตอร์เพิ่มเติมซึ่ง ได้แก่ httpConf การตั้งค่าและฟังก์ชันการโทรกลับ

18 เปิด()

Open ใช้เพื่อเปิดหน้าเว็บ

19 ปล่อย()

Release จะปล่อยการใช้งานฮีปหน่วยความจำสำหรับเพจ อย่าใช้เมธอดเพจอินสแตนซ์หลังจากเรียกรีลีส วิธีนี้คล้ายกับวิธีปิดและเลิกใช้งานแล้ว ใช้ wpage.close () แทน

20 โหลดซ้ำ ()

Reload ใช้เพื่อโหลดเพจปัจจุบันที่ใช้ซ้ำ

21 renderBase64 ()

วิธีนี้จะจับภาพหน้าจอและให้ภาพเป็นสตริงใน base46 Renderbase64 รองรับรูปแบบเช่น PNG, JPEG และ JPG ตอนนี้ไม่รองรับ gif คุณสามารถใช้คุณสมบัติ clipRect เพื่อกำหนดส่วนสำหรับการจับภาพ

22 renderBuffer ()

RenderBuffer จับภาพหน้าเว็บไปยังบัฟเฟอร์รูปภาพซึ่งสามารถส่งไปยังเซิร์ฟเวอร์ได้โดยตรง รูปแบบที่รองรับ ได้แก่ PNG, GIF และ JPEG

23 แสดงผล ()

Render ช่วยถ่ายบัฟเฟอร์ภาพและบันทึกตามรูปแบบที่กำหนด

24 sendEvent ()

ใช้เพื่อส่งเหตุการณ์ไปยังเว็บเพจ ไม่ใช่เหตุการณ์ Dom แต่ละเหตุการณ์เหล่านี้จะถูกส่งไปยังหน้าเว็บตามการโต้ตอบของผู้ใช้

25 setContent ()

setcontent จะเปลี่ยนเนื้อหาหน้าของ url ที่ระบุด้วยเนื้อหาที่ระบุ

26 หยุด()

ช่วยหยุดการโหลดหน้าเว็บ

27 switchToChildFrame()

ไม่สนับสนุนการใช้ switchToFrame ();

28 switchToFocusedFrame ()

เลือกเฟรมที่อยู่ในโฟกัส

29 switchToFrame ()

เลือกเฟรมที่มีชื่อระบุและซึ่งเป็นชายด์ของเฟรมปัจจุบัน

30 switchToMainFrame ()

เลือกเมนเฟรมเช่นหน้าต่างรูท

31 switchToParentFrame ()

ใช้เฟรมหลักของเฟรมย่อยปัจจุบัน

32 uploadFile ()

วิธีนี้ใช้เพื่อจัดการการอัปโหลดไฟล์โดยใช้แบบฟอร์มใน html PhantomJS ไม่มีวิธีโดยตรงในการทำเช่นนั้นโดยใช้รูปแบบเดียวกันนี้สามารถทำได้โดยใช้เมธอด uploadFile ใช้ตัวเลือกแท็ก html สำหรับตำแหน่งไฟล์และปลายทางที่ต้องคัดลอก

การเรียกกลับที่พร้อมใช้งานกับโมดูลหน้าเว็บได้อธิบายไว้ในตารางต่อไปนี้

ส. เลขที่ การโทรกลับและคำอธิบาย
1 onAlert ()

การโทรกลับนี้จะเรียกเมื่อมีการแจ้งเตือนบนเพจ การเรียกกลับรับสตริงและไม่ส่งคืนอะไรเลย

2 onCallback ()

OnCallback ใช้เพื่อส่งผ่านค่าจากเว็บเพจไปยังออบเจ็กต์หน้าเว็บและทำได้โดยใช้เมธอด window.callPhantom () ซึ่งเรียกใช้ฟังก์ชัน onCallback ภายใน

3 onClosing ()

สิ่งนี้เรียกว่าเมื่อปิดหน้าต่างโดยใช้เมธอด page.close () หรือเมธอด window.close ()

4 onConfirm ()

การโทรกลับนี้จะเรียกเมื่อมีข้อความยืนยันที่เรียกพร้อมตกลง / ยกเลิกจากหน้า

5 onConsoleMessage ()

การโทรกลับนี้ใช้เมื่อมีข้อความคอนโซลที่ใช้ในเว็บเพจ เมธอด onConsoleMessage รับ 3 อาร์กิวเมนต์

6 onError ()

เรียกว่าเมื่อมีข้อผิดพลาด JavaScript อาร์กิวเมนต์สำหรับ onError คือ msg และ stack trace ซึ่งเป็นอาร์เรย์

7 onFilePicker ()

ใช้สำหรับอัปโหลดไฟล์ที่เรียกกลับเมื่อผู้ใช้ต้องการอัปโหลดไฟล์

8 onInitialized ()

เรียกกลับนี้เมื่อเรียกหน้าก่อนที่จะโหลด

9 onLoadFinished ()

ฟังก์ชั่นนี้เรียกว่าเมื่อเพจเปิดขึ้นมาเต็ม มีอาร์กิวเมนต์หนึ่งซึ่งบอกว่าการโหลดสำเร็จหรือล้มเหลวเมื่อใด

10 onLoadStarted ()

เรียกกลับนี้เมื่อหน้าเริ่มโหลด

11 onNavigationRequested ()

การโทรกลับนี้จะบอกเมื่อเหตุการณ์การนำทางเกิดขึ้น

12 onPageCreated ()

การเรียกกลับนี้จะเรียกใช้เมื่อเปิดหน้าต่างย่อยใหม่โดยเพจ

13 onPrompt ()

การเรียกกลับนี้เรียกเมื่อมีการเรียกใช้พร้อมต์จากหน้าเว็บ ต้องใช้ 2 อาร์กิวเมนต์ข้อความและคำตอบ ค่าที่ส่งคืนเป็นสตริง

14 onResourceError ()

การเรียกกลับนี้เรียกว่าเมื่อหน้าเว็บไม่สามารถอัปโหลดไฟล์ได้

15 onResourceReceived ()

การโทรกลับนี้จะเรียกเมื่อได้รับทรัพยากรที่เพจร้องขอ

16 onResourceRequested ()

ฟังก์ชันนี้ถูกเรียกใช้เมื่อเพจร้องขอทรัพยากร

17 onResourceTimeout ()

การเรียกกลับนี้ถูกเรียกเมื่อทรัพยากรที่ร้องขอหมดเวลาเมื่อใช้ settings.resourceTimeout

18 onUrlChanged ()

สิ่งนี้เรียกว่าเมื่อ URL เปลี่ยนจาก URL ปัจจุบันโดยใช้การนำทาง มีอาร์กิวเมนต์หนึ่งสำหรับการเรียกกลับซึ่งเป็นสตริง URL targetUrl ใหม่

โมดูลกระบวนการ Phantomjs Child ช่วยในการโต้ตอบกับกระบวนการย่อยและพูดคุยกับพวกเขาโดยใช้ stdin /stdout/stderr. กระบวนการย่อยสามารถใช้สำหรับงานเช่นprinting, sending mail หรือถึง invoke programsเขียนในภาษาอื่น ในการสร้างโมดูลกระบวนการย่อยคุณต้องมีการอ้างอิง

ตัวอย่างเช่น -

var process = require("child_process");

วิธีวางไข่

ด้วยกระบวนการลูกวางไข่คุณสามารถสมัครสมาชิกได้ stdout และ stderr สตรีมเพื่อรับข้อมูลแบบเรียลไทม์

ไวยากรณ์

ไวยากรณ์มีดังนี้ -

var spawn = require('child_process').spawn;

ตัวอย่าง

ให้เราดูตัวอย่างของวิธีการวางไข่

var process = require("child_process")
var spawn = process.spawn
var child = spawn("cmd", ['/c', 'dir']);

child.stdout.on("data", function (data) {
   console.log("spawnSTDOUT---VALUE:", JSON.stringify(data))
})
child.stderr.on("data", function (data) {
   console.log("spawnSTDERR:", JSON.stringify(data))
})
child.on("exit", function (code) {
   console.log("spawnEXIT:", code)
})

เอาต์พุต

โปรแกรมข้างต้นสร้างผลลัพธ์ต่อไปนี้

spawnSTDOUT---VALUE: " Volume in drive C is OS\r\n"
spawnSTDOUT---VALUE: " Volume Serial Number is 7682-9C1B\r\n\r\n Directory of C:
\\phantomjs\\bin\r\n\r\n"
spawnSTDOUT---VALUE: "20-05-2017  10:01
<DIR>          .\r\n20-05-2017  10:01
<DIR>          ..\r\n13-05-2017  20:48   12 a,txt.txt\r\n07-05-2017  08:51
63 a.js\r\n06-05-2017  16:32           120,232 a.pdf\r\n13-05-2017  20:49 
spawnEXIT: 0

โมดูลระบบไฟล์มี API มากมายสำหรับจัดการกับไฟล์และไดเร็กทอรี คุณสามารถสร้าง / เขียนและลบไฟล์ / ไดเร็กทอรี ในการเริ่มใช้โมดูลระบบไฟล์คุณต้องมีการอ้างอิงถึงไฟล์fs module.

var fs = require('fs');

มีคุณสมบัติสองอย่างสำหรับโมดูลระบบไฟล์: Separator และ Working Directory. ให้เราเข้าใจโดยละเอียด

ตัวคั่น

จะบอกคุณถึงตัวคั่นที่ใช้สำหรับเส้นทางไฟล์

  • สำหรับ Windows:\
  • สำหรับ Linux: /

ไวยากรณ์

ไวยากรณ์มีดังนี้ -

fs.seperator

ตัวอย่าง

var fs = require('fs');
console.log(fs.seperator);
phantom.exit();

โปรแกรมข้างต้นสร้างสิ่งต่อไปนี้ output.

undefined

workingDirectory

ไดเร็กทอรีการทำงานคือไดเร็กทอรีที่ PhantomJS ดำเนินการ

ไวยากรณ์

ไวยากรณ์มีดังนี้ -

var fs = require('fs');
fs.workingDirectory;

ตัวอย่าง

var fs = require('fs');
console.log(fs.workingDirectory);
phantom.exit();

โปรแกรมข้างต้นสร้างสิ่งต่อไปนี้ output.

C:/phantomjs/bin

ตารางต่อไปนี้มีวิธีการทั้งหมดและคำอธิบายซึ่งมีอยู่ในโมดูลระบบไฟล์

ส. เลขที่ วิธีการและคำอธิบาย
1 แน่นอน

วิธีนี้ให้เส้นทางสัมบูรณ์ที่ PhantomJS ทำงาน

2 changeWorkingDirectory

สิ่งนี้ช่วยให้คุณสามารถเปลี่ยนไดเร็กทอรีการทำงานและส่งคืนค่าจริงหากสำเร็จเป็นอย่างอื่นคืนค่าเท็จ

3 copyTree

copyTree จะคัดลอกไดเรกทอรีจากเส้นทางหนึ่งไปยังอีกเส้นทางหนึ่ง พารามิเตอร์แรกคือโฟลเดอร์ต้นทางและพารามิเตอร์ที่สองคือโฟลเดอร์ปลายทาง

4 สำเนา

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

5 มีอยู่

ตรวจสอบว่าเส้นทางไฟล์ที่กำหนดมีอยู่ในระบบหรือไม่ มันจะคืนค่าเป็นจริงหากมีอยู่มิฉะนั้นจะเป็นเท็จ

6 isAbsolute

วิธีนี้จะคืนค่า true หากเส้นทางของไฟล์เป็นค่าสัมบูรณ์และเป็นเท็จหากสัมพันธ์กัน

7 isDirectory

isDirectory บอกว่าไฟล์ที่กำหนดเป็นไดเร็กทอรีหรือไม่ มันส่งคืนจริงถ้าไดเรกทอรีเป็นเท็จ มันให้เท็จในกรณีที่ไม่มีเส้นทางที่กำหนด

8 isExecutable

วิธีนี้จะบอกได้ว่าไฟล์ที่กำหนดสามารถเรียกใช้งานได้หรือไม่ จะคืนค่าเป็นจริงถ้าสามารถเรียกใช้งานได้หรือเป็นเท็จ

9 isFile

สิ่งนี้ให้รายละเอียดว่าพา ธ ไฟล์ที่ระบุเป็นไฟล์หรือไม่ มันจะคืนค่าจริงถ้าเป็นไฟล์และเท็จถ้าไม่ใช่

10 isLink

สิ่งนี้จะให้ค่า true หากเส้นทางของไฟล์เป็น symlink มิฉะนั้นจะเป็นเท็จ

11 isReadable

ตรวจสอบว่าไฟล์ที่ระบุสามารถอ่านได้หรือไม่ มันให้จริงถ้าใช่และเท็จถ้าไม่ใช่

12 isWritable

จะบอกว่าไฟล์ที่กำหนดสามารถเขียนได้หรือไม่ ส่งคืนค่าจริงถ้าใช่หรือเป็นเท็จ

13 lastModified

ให้รายละเอียดของการแก้ไขล่าสุดที่ทำกับไฟล์ จะบอกวันที่และเวลาที่แก้ไขไฟล์ครั้งล่าสุด

14 รายการ

จะให้ไฟล์ทั้งหมดที่มีอยู่ในไดเร็กทอรี

15 makeDirectory

สร้างไดเร็กทอรีใหม่

16 makeTree

makeTree สร้างโฟลเดอร์ที่จำเป็นทั้งหมดเพื่อให้สามารถสร้างไดเร็กทอรีสุดท้ายได้ สิ่งนี้จะคืนค่าเป็นจริงหากการสร้างสำเร็จหรือเป็นเท็จ หากมีไดเร็กทอรีอยู่แล้วจะส่งคืนจริง

17 ย้าย

มันจะย้ายไฟล์จากเส้นทางหนึ่งไปยังอีกเส้นทางหนึ่ง

18 เปิด

ใช้เพื่อเปิดไฟล์

19 readLink

สิ่งนี้จะส่งคืนเส้นทางสัมบูรณ์ของไฟล์หรือโฟลเดอร์ที่ชี้โดย symlink (หรือทางลัดบน Windows) ถ้าพา ธ ไม่ใช่ symlink หรือทางลัดจะส่งคืนสตริงว่าง

20 อ่าน

สิ่งนี้จะอ่านไฟล์ที่กำหนด

21 removeDirectory

สิ่งนี้จะลบไดเร็กทอรีที่ระบุ

22 RemoveTree

มันจะลบไฟล์และโฟลเดอร์ทั้งหมดออกจากโฟลเดอร์ที่กำหนดและในที่สุดก็ลบโฟลเดอร์นั้นเอง หากมีข้อผิดพลาดขณะทำกระบวนการนี้จะทำให้เกิดข้อผิดพลาด - 'ไม่สามารถลบเส้นทางทรีไดเร็กทอรี' และหยุดการดำเนินการ

23 ลบ

จะลบไฟล์ที่กำหนด

24 ขนาด

มันให้ขนาดของไฟล์

25 สัมผัส

มันสร้างไฟล์ที่กำหนด

26 เขียน

เขียนไปยังไฟล์ที่กำหนด

ในบทนี้เราจะพูดถึงคุณสมบัติโมดูลระบบต่างๆของ PhantomJS

args

โมดูลระบบของ PhantomJS มีคุณสมบัติที่แตกต่างกันซึ่งช่วยในการส่งผ่านอาร์กิวเมนต์ทำความรู้จักกับไฟล์ที่เรียกใช้งานเป็นต้น

โดยทั่วไปคุณสมบัติ args จะส่งคืนอาร์กิวเมนต์ที่ส่งผ่านที่บรรทัดคำสั่ง คุณยังสามารถส่ง URL ของหน้าเว็บที่คุณต้องการอ่าน หากคุณต้องการจัดเก็บไฟล์ pdf ที่จับภาพหน้าจอหรืออัปโหลดไฟล์รายละเอียดสามารถส่งผ่านไปยังบรรทัดคำสั่งและสามารถอ่านได้โดยใช้args ทรัพย์สิน.

ให้เราค้นหาความยาวและวิธีดึงแต่ละอาร์กิวเมนต์ที่ส่งผ่านไปยังบรรทัดคำสั่ง

ไวยากรณ์

ไวยากรณ์มีดังนี้ -

var system = require('system'); 
system.args;

ตัวอย่าง

ดูตัวอย่างต่อไปนี้เพื่อทำความเข้าใจว่าคุณสมบัตินี้ทำงานอย่างไร

var system = require('system');
console.log(system.args.length);

if (system.args.length>0) {
   console.log(JSON.stringify(system.args));
}
phantom.exit();

โปรแกรมข้างต้นสร้างสิ่งต่อไปนี้ output.

Command - phantomsjs args.js http://localhost/tasks/request.html

2
["args.js","http://localhost/tasks/request.html"]

ค่าแรกคือชื่อของไฟล์และค่าถัดไปคือ URL ที่ส่งผ่าน คุณสามารถส่งผ่านอาร์กิวเมนต์เพิ่มเติมในบรรทัดคำสั่งและดึงข้อมูลเดียวกันโดยใช้system.args.

env

env คุณสมบัติส่งคืนรายละเอียดของระบบ

ไวยากรณ์

ไวยากรณ์มีดังนี้ -

var system = require('system'); 
system.env;

ตัวอย่าง

var system = require('system'); 
console.log(JSON.stringify(system.env)); 
phantom.exit();

โปรแกรมข้างต้นสร้างผลลัพธ์ต่อไปนี้

{"=::":"::\\","=C:":"C:\\phantomjs\\bin","=ExitCode":"00000000","ALLUSERSPROFILE":
"C:\\ProgramData","APPDATA":"C:\\Users\\UserName\\AppData\\Roaming","COMPUTERNAME":
"X","ComSpec":"C:\\Windows\\system32\\cmd.exe","CommonProgramFiles":
"C:\\Program Files (x86)\\Common Files","CommonProgramFiles(x86)":
"C:\\Program Files (x86)\\Common Files","CommonProgramW6432":
"C:\\Program Files\\Common Files","FP_NO_HOST_CHECK":"NO","HOMEDRIVE":"C:",
"HOMEPATH":"\\Users\\UserName","LOCALAPPDATA":
"C:\\Users\\UserName\\AppData\\Local","LOGONSERVER":"\\\\MicrosoftAccount",
"NUMBER_OF_PROCESSORS":"2","OS":"Windows_NT","PATHEXT":".COM;.EXE;.BAT;.CMD;.VBS ;
.VBE;.JS;.JSE;.WSF;.WSH;.MSC","PROCESSOR_ARCHITECTURE":"x86","PROCESSOR_ARCHITEW64 32":
"AMD64","PROCESSOR_IDENTIFIER":"Intel64 Family 6 Model 58Stepping9,GenuineIntel",
"PROCESSOR_LEVEL":"6","PROCESSOR_REVISION":"3a09","PROMPT":
"$P$G","PSModulePath":"C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\
Modules\\" ,"PUBLIC":"C:\\Users\\Public","Path":
"C:\\Program Files\\Dell\\DW WLAN Card;
c:\\Program Files (x86)\\Intel\\iCLS Client\\;c:\\Program Files\\Intel\\iCLSClient\\;
C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\ \Wbem;
C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;
C:\\Program Files\\Intel\\Intel(R) Management Engine Components\\DAL;
C:\\Program Files\\Intel\\Intel(R) Management Engine Components\\IPT;
C:\\Program Files (x86)\\Intel\\Intel(R) Management Engine Components\\DAL;
C:\\Program Files (x86)\\Intel\\Intel(R) 
ManagementEngineComponents\\IPT;c:\\ProgramFiles\\WIDCOMM\\BluetoothSoftware\\;
c:\\ProgramFiles\\WIDCOMM\\BluetoothSoftware\\syswow64;
C:\\ProgramFiles(x86)\\WindowsLive\\Shared;C:\\ProgramFiles\\nodejs\\;
C:\\ProgramFiles\\Git\\cmd;C:\\ProgramFiles\\ OpenVPN\\bin;
C:\\ProgramFiles(x86)\\Skype\\Phone\\;C:\\Users\\UserName\\AppData\\Roaming
\\npm","ProgramData":
"C:\\ProgramData","ProgramFiles":"C:\\ProgramFiles(x86)", 
"ProgramFiles(x86)":"C:\\ProgramFiles(x86)","ProgramW6432":
"C:\\ProgramFiles","SESSIONNAME":"Console","SystemDrive":
"C:","SystemRoot":"C:\\Windows","TEMP":"C:\\Users\ \Username~1\\AppData\\Local\\Temp",
"TMP":"C:\\Users\\Username~1\\AppData\\Local\\Temp",
"USERDOMAIN":"USER","USERDOMAIN_ROAMINGPROFILE":"USER","USERNAME":"X Y","USERPROFILE":
"C:\\Users\\X Y","windir":"C:\\Windows"}

ระบบปฏิบัติการ

จะส่งกลับรายละเอียดของระบบปฏิบัติการที่ใช้ ส่งคืนวัตถุที่มีสถาปัตยกรรมชื่อของระบบปฏิบัติการและเวอร์ชัน

ไวยากรณ์

ไวยากรณ์มีดังนี้ -

var system = require('system');
system.os;

ตัวอย่าง

var system = require('system');
console.log(JSON.stringify(system.os));
phantom.exit();

โปรแกรมข้างต้นสร้างผลลัพธ์ต่อไปนี้

{"architecture":"32bit","name":"windows","version":"8.1"}

pid

คุณสมบัตินี้ส่งคืน ID กระบวนการ

ไวยากรณ์

ไวยากรณ์มีดังนี้ -

var system = require('system');
system.pid;

ตัวอย่าง

ให้เราดูตัวอย่างของไฟล์ pid ทรัพย์สิน.

var system = require('system');
console.log(system.pid);
phantom.exit();

โปรแกรมข้างต้นสร้างผลลัพธ์ต่อไปนี้

2160

แพลตฟอร์ม

คุณสมบัตินี้ส่งคืนแพลตฟอร์มที่เรากำลังดำเนินการอยู่

ไวยากรณ์

ไวยากรณ์มีดังนี้ -

var system = require('system');
system.platform;

ตัวอย่าง

var system = require('system');
console.log(system.platform);
phantom.exit();

โปรแกรมข้างต้นสร้างผลลัพธ์ต่อไปนี้

Phantomjs

PhantomJS ใช้เว็บเซิร์ฟเวอร์ในตัวที่เรียกว่า mongoose. ตอนนี้ PhantomJS ไม่สามารถเชื่อมต่อกับเว็บเซิร์ฟเวอร์การผลิตอื่น ๆ ได้ ในส่วนของการเชื่อมต่อสามารถจัดการกับการเชื่อมต่อได้ 10 รายการในแต่ละครั้งและมากกว่า 10 คำขอจะรอคิว

ในการเริ่มต้นเว็บเซิร์ฟเวอร์เราจำเป็นต้องใช้ไวยากรณ์ต่อไปนี้ -

var webserver = require (‘webserver’);

ให้เราเข้าใจ Port ซึ่งใช้เพื่อรับฟังคำขอที่ส่งไปยังเว็บเซิร์ฟเวอร์

ท่าเรือ

คุณสมบัติพอร์ตสำหรับเว็บเซิร์ฟเวอร์ถูกใช้เพื่อรับฟังคำร้องขอที่ส่งไป

ไวยากรณ์

ไวยากรณ์มีดังนี้ -

var server = require('webserver').create();
var listening = server.listen(port, function (request, response) {});

ตัวอย่าง

ให้เรายกตัวอย่างเพื่อทำความเข้าใจว่าไฟล์ port งานทรัพย์สิน

var webserver = require('webserver'); 
var server = webserver.create(); 
var service = server.listen(8080,function(request,response){  
}); 
if(service) console.log("server started - http://localhost:" + server.port);

โปรแกรมข้างต้นสร้างผลลัพธ์ต่อไปนี้

server started - http://localhost:8080

ในบทนี้เราจะพูดถึงวิธีการต่างๆของ Web Server Module ของ PhantomJS

ปิด

close ใช้วิธีการปิดเว็บเซิร์ฟเวอร์

ไวยากรณ์

ไวยากรณ์มีดังนี้ -

var server = require('webserver').create();
server.close();

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงให้เห็นว่าคุณสามารถใช้ไฟล์ close วิธี.

var webserver = require('webserver');
var server = webserver.create();
var service = server.listen(8080,function(request,response){
});

if(service) console.log("server started - http://localhost:" + server.port);
console.log(server.port);
server.close();
console.log(server.port);

โปรแกรมข้างต้นสร้างสิ่งต่อไปนี้ output.

server started - http://localhost:8080 
8080

ที่นี่เราได้ปลอบใจ server.portหลังจากปิดเซิร์ฟเวอร์ ดังนั้นจะไม่ตอบสนองเนื่องจากเว็บเซิร์ฟเวอร์ปิดไปแล้ว

ฟัง

server.listen เมธอดใช้พอร์ตและฟังก์ชันเรียกกลับโดยมีอาร์กิวเมนต์สองตัวคือ - Request Object และ Response Object.

Request Object มีคุณสมบัติดังต่อไปนี้ -

  • Method - สิ่งนี้กำหนดวิธีการ GET / POST

  • URL - แสดง URL ที่ร้องขอ

  • httpVersion - แสดงเวอร์ชัน http จริง

  • Headers - แสดงส่วนหัวทั้งหมดพร้อมคู่ค่าคีย์

  • Post - ขอเนื้อหาสำหรับวิธีการโพสต์เท่านั้น

  • postRaw - หากตั้งค่าส่วนหัว Content-Type เป็น 'application / x-www-formurlencoded' เนื้อหาต้นฉบับของโพสต์จะถูกเก็บไว้ในคุณสมบัติพิเศษนี้ (postRaw) จากนั้นโพสต์นั้นจะได้รับการอัปเดตโดยอัตโนมัติด้วยเวอร์ชันถอดรหัส URL ของข้อมูล

Response Object มีคุณสมบัติดังต่อไปนี้ -

  • Headers- มีส่วนหัว HTTP ทั้งหมดเป็นคู่คีย์ - ค่า ควรตั้งค่าก่อนเรียกเขียนครั้งแรก

  • SetHeader - ตั้งค่าส่วนหัวเฉพาะ

  • Header (name) - ส่งคืนค่าของส่วนหัวที่กำหนด

  • StatusCode - ตั้งค่ารหัสสถานะ HTTP ที่ส่งคืน

  • SetEncoding (encoding)- ใช้เพื่อแปลงข้อมูลที่กำหนดให้เขียน () โดยค่าเริ่มต้นข้อมูลจะถูกแปลงเป็น UTF-8 ระบุ "ไบนารี" หากข้อมูลเป็นสตริงไบนารี ไม่จำเป็นหากข้อมูลเป็น Buffer (เช่นจาก page.renderBuffer)

  • Write (data)- ส่งข้อมูลสำหรับร่างกายตอบสนอง เรียกได้หลายครั้ง.

  • WriteHead (statusCode, headers)- ส่งส่วนหัวการตอบกลับไปยังคำขอ รหัสสถานะคือรหัสสถานะ HTTP 3 หลัก (เช่น 404) อาร์กิวเมนต์สุดท้ายและส่วนหัวคือส่วนหัวของการตอบกลับ

  • Close - ปิดการเชื่อมต่อ http

  • CloseGracefully - คล้ายกับ close () แต่ตรวจสอบให้แน่ใจว่าได้ส่งส่วนหัวการตอบกลับก่อน

ไวยากรณ์

ไวยากรณ์มีดังนี้ -

var server = require('webserver').create(); 
var listening = server.listen(8080, function (request, response) {}

ตัวอย่าง

ให้เรายกตัวอย่างเพื่อทำความเข้าใจว่าไฟล์ listen วิธีการทำงาน

var page = require('webpage').create(); 
var server = require('webserver').create(); 
var port = 8080; 
var listening = server.listen(8080, function (request, response) { 
   console.log("GOT HTTP REQUEST"); 
   console.log(JSON.stringify(request, null, 4)); 
   
   // we set the headers here 
   response.statusCode = 200; 
   response.headers = {"Cache": "no-cache", "Content-Type": "text/html"};  
 
   // the headers above will now be sent implictly 
   // now we write the body 
   response.write("<html><head><title>Welcone to Phantomjs</title></head>"); 
   response.write("<body><p>Hello World</p></body></html>"); 
   response.close(); 
}); 

if (!listening) { 
   console.log("could not create web server listening on port " + port); 
   phantom.exit(); 
} 

var url = "http://localhost:" + port + "/foo/response.php"; 
console.log("sending request to :" +url); 
page.open(url, function (status) { 
   if (status !== 'success') { 
      console.log('page not opening'); 
   } else { 
      console.log("Getting response from the server:"); 
      console.log(page.content); 
   } 
   
   phantom.exit(); 
});

โปรแกรมข้างต้นสร้างสิ่งต่อไปนี้ output.

sending request to :http://localhost:8080/foo/response.php 
GOT HTTP REQUEST { 
   "headers": {
      "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 
      "Accept-Encoding": "gzip, deflate", 
      "Accept-Language": "en-IN,*", 
      "Connection": "Keep-Alive", 
      "Host": "localhost:8080", 
      "User-Agent": "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/538.1 
         (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1" 
   }, 
   "httpVersion": "1.1", 
   "method": "GET", 
   "url": "/foo/response.php" 
} 
Getting response from the server: 
<html><head><title>Welcone to Phantomjs</title></head><body><p>Hello World</p></body>
</html>

PhantomJS สามารถดำเนินการได้โดยใช้คีย์เวิร์ด "phantomjs" และชื่อของไฟล์ ตัวอย่างเช่น "phantomjs file.js"

คุณยังสามารถส่งอาร์กิวเมนต์ไปยัง "file.js" ได้ดังนี้ -

phantomjs [options] file.js arg1 arg2 ...

ให้เราดูตัวเลือกบางอย่างที่บรรทัดคำสั่ง

ส. เลขที่ ตัวเลือกและคำอธิบาย
1

--help or –h

จะแสดงตัวเลือกบรรทัดคำสั่งทั้งหมด หยุดทันทีและจะไม่เรียกใช้สคริปต์ที่ส่งผ่าน

2

--version or –v

พิมพ์เวอร์ชันของ PhantomJS ที่รัน สิ่งนี้จะหยุดการเรียกใช้สคริปต์ที่จะรัน

3

--debug[true|false]

พิมพ์คำเตือนและข้อความแก้ไขข้อบกพร่อง โดยค่าเริ่มต้นจะตั้งค่าเป็นเท็จ คุณยังสามารถใช้ [ใช่ | ไม่ใช่]

4

--cookies-file = /path/to/cookies.txt

ชื่อไฟล์เพื่อจัดเก็บคุกกี้ถาวร

5

--diskcache=[true|false]

เปิดใช้งานดิสก์แคช นอกจากนี้ยังใช้ค่า [ใช่ | ไม่ใช่]

6

--disk-cahe-path

เส้นทางสำหรับดิสก์แคช

7

--ignore-sslerrors=[true|false]

ละเว้นข้อผิดพลาด SSL ตัวอย่างเช่น - ข้อผิดพลาดใบรับรองหมดอายุหรือเซ็นชื่อด้วยตนเอง ค่าเริ่มต้นเป็นเท็จ นอกจากนี้ยังใช้ค่า [ใช่ | ไม่ใช่]

8

--loadimages=[true|false]

โหลดภาพแบบอินไลน์ทั้งหมด ค่าเริ่มต้นเป็นจริง นอกจากนี้ยังใช้เวลา [ใช่ | ไม่ใช่]

9

--local-storagepath=/some/path

เส้นทางในการบันทึกเนื้อหา LocalStorage และเนื้อหา WebSQL

10

--local-storagequota=number

ขนาดสูงสุดที่อนุญาตสำหรับข้อมูล

11

--local-url-access

อนุญาตให้ใช้ URL 'file: ///' (ค่าเริ่มต้นคือจริง)

12

--local-to-remote-urlaccess=[true|false]

อนุญาตให้เนื้อหาในเครื่องเข้าถึง URL ระยะไกล ค่าเริ่มต้นเป็นเท็จ นอกจากนี้ยังใช้ค่า [ใช่ | ไม่ใช่]

13

--max-disk-cachesize=size

จำกัด ขนาดของดิสก์แคช (เป็น KB)

14

--offline-storage-path

ระบุตำแหน่งสำหรับการจัดเก็บแบบออฟไลน์

15

--offline-storage-quota

ตั้งค่าขนาดสูงสุดของที่เก็บข้อมูลออฟไลน์เป็น KB

16

--outputencoding=encoding

ตั้งค่าการเข้ารหัสที่ใช้สำหรับเอาต์พุตเทอร์มินัล ค่าเริ่มต้นคือ utf-8

17

--proxy=address:port

ระบุพร็อกซีเซิร์ฟเวอร์ที่จะใช้ (ตัวอย่างเช่น - proxy = 192.168.1.1: 8080)

18

--proxytype=[http|socks5|none]

ระบุประเภทของพร็อกซีเซิร์ฟเวอร์ (ค่าเริ่มต้นคือ http)

19

--proxy-auth

ข้อมูลการพิสูจน์ตัวตนสำหรับพร็อกซี ตัวอย่างเช่น -

--proxy-auth = ชื่อผู้ใช้: รหัสผ่าน

20

--scriptencoding=encoding

ตั้งค่าการเข้ารหัสที่ใช้สำหรับสคริปต์ ค่าเริ่มต้นคือ utf8

21

--script-language

ตั้งค่าภาษาสคริปต์

PhantomJS มีประโยชน์มากในการจับภาพหน้าจอของหน้าเว็บและแปลงหน้าเว็บเป็น PDF เราได้ยกตัวอย่างง่ายๆเพื่อแสดงให้เห็นว่ามันทำงานอย่างไร

ตัวอย่าง

var page = require('webpage').create();
page.open('http://phantom.org/',function(status){
   page.render('phantom.png');
   phantom.exit();
});

ดำเนินการโปรแกรมข้างต้นและผลลัพธ์จะถูกบันทึกเป็น phantom.png.

แปลงหน้าเว็บเป็น PDF

PhantomJS ยังช่วยในการแปลงหน้าเว็บเป็น PDF ด้วยส่วนหัวและส่วนท้ายที่เพิ่มเข้าไป ลองดูตัวอย่างต่อไปนี้เพื่อทำความเข้าใจวิธีการทำงาน

var wpage = require('webpage').create(); 
var url = "https://en.wikipedia.org/wiki/Main_Page"; 
var output = "test.pdf"; 

wpage.paperSize = { 
   width: screen.width+'px', 
   height: '1500px', 
   
   margin: {
      'top':'50px', 
      'left':'50px', 
      'rigtht':'50px' 
   }, 
   orientation:'portrait', 
   header: { 
      height: "1cm", 
      contents: phantom.callback(function(pageNumber, nPages) { 
         return "<h5>Header <b>" + pageNumber + " / " + nPages + "</b></h5>"; 
      }) 
   }, 
   footer: { 
      height: "1cm", 
      contents: phantom.callback(function(pageNumber, nPages) {   
         return "<h5>Footer <b>" + pageNumber + " / " + nPages + "</b></h5>"; 
      }) 
   } 
} 
wpage.open(url, function (status) { 
   if (status !== 'success') { 
      console.log('Page is not opening'); 
      phantom.exit(); 
   } else { 
      wpage.render(output); 
      phantom.exit();     
   } 
});

โปรแกรมข้างต้นสร้างสิ่งต่อไปนี้ output.

The above will convert the page into pdf and will be saved in test.pdf

แปลงผ้าใบเป็นรูปภาพ

Phantomjs สามารถแปลง Canvas เป็นรูปภาพได้อย่างง่ายดาย ลองดูตัวอย่างต่อไปนี้เพื่อทำความเข้าใจวิธีการทำงาน

var page = require('webpage').create(); 
page.content = '<html><body><canvas id="surface" width="400" height="400"></canvas></body></html>'; 

page.evaluate(function() {
   var context,e1; 
   el = document.getElementById('surface'); 
   
   context = el.getContext('2d'); 
   context.font = "30px Comic Sans MS"; 
   context.fillStyle = "red"; 
   context.textAlign = "center"; 
   context.fillText("Welcome to PhantomJS ", 200, 200); 
   
   document.body.style.backgroundColor = 'white'; 
   document.body.style.margin = '0px'; 
}); 
page.render('canvas.png'); 
phantom.exit();

โปรแกรมข้างต้นสร้างสิ่งต่อไปนี้ output.

PhantomJS ด้วยความช่วยเหลือของ API โมดูลหน้าเว็บสามารถจัดการหน้าเว็บและดำเนินการต่างๆเช่นการจัดการ DOM การคลิกที่ปุ่ม ฯลฯ

ดึงภาพจากเพจ

โปรแกรมต่อไปนี้แสดงวิธีใช้ PhantomJS เพื่อดึงภาพจากเพจ

var wpage = require('webpage').create();
wpage.onConsoleMessage = function(str) {
   console.log(str.length);
}
wpage.open("http://phantomjs.org", function(status) {
   console.log(status);
   var element = wpage.evaluate(function() {
      var imgdata =  document.querySelectorAll('img');
      var imgsrc = [];
      
      if (imgdata) {
         for (var i in imgdata) {
            imgsrc.push(imgdata[0].src);
         }
      }
      return imgsrc;
   });
   console.log(JSON.stringify(element));
});

โปรแกรมข้างต้นสร้างสิ่งต่อไปนี้ output.

Success 
["http://phantomjs.org/img/phantomjslogo.png","http://phantomjs.org/img/phantom 
js-logo.png","http://phantomjs.org/img/phantomjslogo.png","http://phantomjs.org 
/img/phantomjs-logo.png"]

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

ด้วยความช่วยเหลือของ PhantomJS เราสามารถตรวจสอบเครือข่ายและตรวจสอบพฤติกรรมและประสิทธิภาพของเว็บเพจเฉพาะได้ มีการเรียกกลับใน PhantomJS กล่าวคือonResourceRequested และ onResourceReceivedซึ่งช่วยในการตรวจสอบการเข้าชมสำหรับหน้าเว็บหนึ่ง ๆ

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงให้เห็นว่าคุณสามารถใช้ PhantomJS เพื่อตรวจสอบการรับส่งข้อมูลสำหรับเพจที่กำหนดได้อย่างไร

function createHAR(address, title, startTime, resources) {  
   
   // this function formats the data which is coming from 
      onresourcerequest and onresourcereceived 
   var entries = []; 
   
   resources.forEach(function (resource) { 
      var request = resource.request, startReply = resource.startReply, 
         endReply = resource.endReply;  
      
      if (!request || !startReply || !endReply) { 
         return; 
      }  
      
      // Exclude Data URI from HAR file because 
      // they aren't included in specification 
      if (request.url.match(/(^data:image\/.*)/i)) { 
         return; 
      }  
      entries.push ({ 
         startedDateTime: request.time.toISOString(), 
         time: endReply.time - request.time, 
         
         request: { 
            method: request.method, 
            url: request.url, 
            httpVersion: "HTTP/1.1", 
            cookies: [], headers: request.headers, 
            queryString: [], 
            headersSize: -1, 
            bodySize: -1 
         }, 
         response: { 
            status: endReply.status, 
            statusText: endReply.statusText, 
            httpVersion: "HTTP/1.1", 
            cookies: [], 
            headers: endReply.headers, 
            redirectURL: "", 
            headersSize: -1, 
            bodySize: startReply.bodySize, 
            
            content: { 
               size: startReply.bodySize, 
               mimeType: endReply.contentType 
            } 
         }, 
         cache: {}, 
         timings: { 
            blocked: 0, 
            dns: -1, 
            connect: -1, 
            send: 0, 
            wait: startReply.time - request.time, 
            receive: endReply.time - startReply.time, 
            ssl: -1 
         }, 
         pageref: address 
      }); 
   });  
   return { 
      log: { 
         version: '1.2', creator: { 
            name: "PhantomJS", 
            version: phantom.version.major + '.' + phantom.version.minor + 
               '.' + phantom.version.patch 
         }, 
         pages: [{ 
            startedDateTime: startTime.toISOString(), 
            id: address, 
            title: title, 
            
            pageTimings: { 
               onLoad: page.endTime - page.startTime 
            } 
         }], 
         entries: entries 
      } 
   }; 
}  
var page = require('webpage').create(), system = require('system'); 
var fs = require('fs');   

if (system.args.length === 1) { 
   console.log('Usage: netsniff.js <some URL>'); 
   phantom.exit(1); 
} else { 
   page.address = system.args[1]; 
   page.resources = []; 
   
   page.onLoadStarted = function () {  // called when page is loaded 
      page.startTime = new Date(); 
   };  
   page.onResourceRequested = function (req) {  
      // called when any files are requested from given page url 
      page.resources[req.id] = { 
         request: req, 
         startReply: null, 
         endReply: null 
      }; 
   };  
   page.onResourceReceived = function (res) {  
      //called when any files are received. 
      if (res.stage === 'start') { 
         page.resources[res.id].startReply = res; 
      } 
      if (res.stage === 'end') { 
         page.resources[res.id].endReply = res; 
      } 
   };  
   page.open(page.address, function (status) {  // open given page url 
      var har; 
      
      if (status !== 'success') { 
         console.log('FAIL to load the address'); 
         phantom.exit(1); 
      } else { 
         page.endTime = new Date(); 
         
         page.title = page.evaluate(function () { // gets the page title 
            return document.title; 
         });             
         har = createHAR(page.address, page.title, page.startTime, page.resources);  
         
         // calls the function createHAR with page url, starttime, and page resources. 
         // console.log(JSON.stringify(har, undefined, 4)); 
         fs.write('log.txt', JSON.stringify(har, undefined, 4), 'w');  
         
         // logs are collected in log.txt file. 
         phantom.exit(); 
      } 
   }); 
}

ตัวอย่าง log.txt ที่แสดงตัวอย่าง HAR

{ 
   "log": { 
      "version": "1.2", 
      "creator": { 
         "name": "PhantomJS", 
         "version": "2.1.1" 
      }, 
      "pages": [ 
         { 
            "startedDateTime": "2017-05-21T13:41:21.824Z", 
            "id": "http://www.sample.com", 
            "title": "Free Sample Products – Sample.com ≫ Free Samples, 
               Free Product Samples, Product Test Marketing", 
            "pageTimings": { 
               "onLoad": 11081 
            } 
         } 
      ], 
      "entries": [ 
         { 
            "startedDateTime": "2017-05-21T13:41:21.815Z", 
            "time": 1999, 
            
            "request": { 
               "method": "GET", 
               "url": "http://www.sample.com/", 
               "httpVersion": "HTTP/1.1", 
               "cookies": [], 
               
               "headers": [ 
                  { 
                     "name": "Accept", 
                     "value": "text/html,application/xhtml+xml,
                        application/xml;q = 0.9,*/*;q = 0.8" 
                  }, 
                  
                  { 
                     "name": "User-Agent", 
                     "value": "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/538.1 
                        (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1"  
                  } 
               ], 
               
               "queryString": [], 
               "headersSize": -1, 
               "bodySize": -1 
            }, 
            "response": { 
               "status": 301, 
               "statusText": "Moved Permanently", 
               "httpVersion": "HTTP/1.1", 
               "cookies": [], 
               
               "headers": [ 
                  { 
                     "name": "Date", 
                     "value": "Sun, 21 May 2017 13:41:25 GMT" 
                  }, 
                  
                  { 
                     "name": "Server", 
                     "value": "Apache/2.2.14 (Ubuntu)" 
                  }, 
                  
                  { 
                     "name": "Location", 
                     "value": "http://sample.com//" 
                  }, 
                  
                  { 
                     "name": "Vary", 
                     "value": "Accept-Encoding" 
                  }, 
                  
                  { 
                     "name": "Content-Encoding", 
                     "value": "gzip" 
                  }, 
                  
                  { 
                     "name": "Keep-Alive", 
                     "value": "timeout = 15, max = 100" 
                  },
                  
                  { 
                     "name": "Connection", 
                     "value": "Keep-Alive" 
                  }, 
                  
                  { 
                     "name": "Content-Type", 
                     "value": "text/html; charset = iso-8859-1" 
                  } 
               ],  
               "redirectURL": "", 
               "headersSize": -1, 
               "bodySize": 307, 
               
               "content": { 
                  "size": 307, 
                  "mimeType": "text/html; charset = iso-8859-1" 
               } 
            }, 
            
            "cache": {}, 
            "timings": { 
               "blocked": 0, 
               "dns": -1, 
               "connect": -1, 
               "send": 0, 
               "wait": 1999, 
               "receive": 0, 
               "ssl": -1 
            }, 
            "pageref": "http://www.sample.com" 
         }, 
      ]   
      { 
         "startedDateTime": "2017-05-21T13:41:24.898Z", 
         "time": 885, 
         
         "request": { 
            "method": "GET", 
            "url": "http://sample.com/", 
            "httpVersion": "HTTP/1.1", 
            "cookies": [], 
            
            "headers": [ 
               { 
                  "name": "Accept", 
                  "value": "text/html,application/xhtml+xml,
                     application/xml;q = 0.9,*/*;q = 0.8" 
               }, 
               
               { 
                  "name": "User-Agent", 
                  "value": "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/538.1 
                     (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1" 
               } 
            ], 
            "queryString": [], 
            "headersSize": -1, 
            "bodySize": -1 
         }, 
         "response": { 
            "status": 200, 
            "statusText": "OK", 
            "httpVersion": "HTTP/1.1", 
            "cookies": [], 
            
            "headers": [ 
               { 
                  "name": "Date", 
                  "value": "Sun, 21 May 2017 13:41:27 GMT" 
               }, 
               
               { 
                  "name": "Server", 
                  "value": "Apache/2.2.14 (Ubuntu)" 
               }, 
               
               { 
                  "name": "X-Powered-By", 
                  "value": "PHP/5.3.2-1ubuntu4.29" 
               }, 
               
               {
                  "name": "X-Pingback", 
                  "value": "http://sample.com/xmlrpc.php" 
               }, 
               
               { 
                  "name": "Link", 
                  "value": "<http://sample.com/wp-json/>; 
                     rel = \"https://api.w.org/\", <http://wp.me/P6Jj5H-4>; 
                     rel = shortlink" 
               }, 
               
               { 
                  "name": "Vary", 
                  "value": "Accept-Encoding"  
               }, 
               
               { 
                  "name": "Content-Encoding",
                  "value": "gzip" 
               },

               { 
                  "name": "Keep-Alive",
                  "value": "timeout = 15, max = 99"
               },

               {
                  "name": "Connection",
                  "value": "Keep-Alive"
               },

               { 
                  "name": "Content-Type",
                  "value": "text/html; charset = UTF-8"
               }
            ],

            "redirectURL": "",
            "headersSize": -1,
            "bodySize": 1969,

            "content": {
               "size": 1969,
               "mimeType": "text/html; charset = UTF-8"
            }
         },

         "cache": {},
         "timings": {
            "blocked": 0,
            "dns": -1,
            "connect": -1,
            "send": 0,
            "wait": 869,
            "receive": 16,
            "ssl": -1
         },

         "pageref": http://www.sample.com
      },

      {
         "startedDateTime": "2017-05-21T13:41:25.767Z",
         "time": 388,

         "request": {
            "method": "GET",
            "url": "http://sample.com/wpcontent/themes/samplecom/style.css",
            "httpVersion": "HTTP/1.1",
            "cookies": [],

            "headers": [
               {
                  "name": "Accept",
                  "value": "text/css,*/*;q = 0.1"
               },

               {
                  "name": "Referer",
                  "value": "http://sample.com/"
               },

               {
                  "name": "User-Agent",
                  "value": "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/538.1 
                     (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1"
               }
            ],

            "queryString": [],
            "headersSize": -1,
            "bodySize": -1
         },

         "response": {
            "status": 200,
            "statusText": "OK",
            "httpVersion": "HTTP/1.1",
            "cookies": [],

            "headers": [
               {
                  "name": "Date",
                  "value": "Sun, 21 May 2017 13:41:27 GMT"
               },

               {
                  "name": "Server",
                  "value": "Apache/2.2.14 (Ubuntu)"
               },

               {
                  "name": "Last-Modified",
                  "value": "Fri, 22 Apr 2011 00:32:22 GMT"
               },

               {
                  "name": "ETag",
                  "value": "\"e1d7-1836-4a176fdbbd180\""
               },

               {
                  "name": "Accept-Ranges",
                  "value": "bytes"
               },

               {
                  "name": "Vary",
                  "value": "Accept-Encoding"
               },

               {
                  "name": "Content-Encoding",
                  "value": "gzip"
               },

               {
                  "name": "Keep-Alive",
                  "value": "timeout = 15, max = 98"
               },

               {
                  "name": "Connection",
                  "value": "Keep-Alive"
               },

               {
                  "name": "Content-Type",
                  "value": "text/css"
               }
            ],

            "redirectURL": "",
            "headersSize": -1,
            "bodySize": 3174,
            
            "content": {
               "size": 3174,
               "mimeType": "text/css"
            }
         },

         "cache": {},
         "timings": {
            "blocked": 0,
            "dns": -1,
            "connect": -1,
            "send": 0,
            "wait": 388,
            "receive": 0,
            "ssl": -1
         },
         
         "pageref": "http://www.sample.com"
      }
   }
}

เอาต์พุต

โปรแกรมข้างต้นสร้างผลลัพธ์ต่อไปนี้

บันทึกทั้งหมดจะถูกรวบรวมในไฟล์ .txt file และในภายหลังจะมีการแปลงค่าเดียวกันกับด้านบนโดยใช้ตัวอย่าง HAR ตัวอย่างเช่น (http://www.softwareishard.com/har/viewer/)

PhantomJSมี API มากมายสำหรับหน้าเว็บซึ่งให้รายละเอียดทั้งหมด PhantomJS สามารถใช้ในการทดสอบเช่นการรับเนื้อหาของเพจการแชร์หน้าจอการแปลงเพจเป็น pdf เป็นต้นมีไลบรารีทดสอบยอดนิยมมากมายในตลาดซึ่งสามารถใช้ร่วมกับ PhantomJS และสามารถใช้ในการทดสอบได้ .

เฟรมเวิร์กยอดนิยมบางตัวที่สามารถทำงานร่วมกับ PhantomJS มีดังนี้ -

  • Mocha
  • Jasmine
  • Qunit
  • Hiro
  • Laika
  • Buster.JS
  • WebDriver

ตัวอย่าง - PhantomJS พร้อม Qunit

(function () {     
   var url, timeout,args = require('system').args, page = require('webpage').create(); 
   url = args[1]; 
   timeout = parseInt(10, 10); 
   
   page.onConsoleMessage = function (msg) {  
      //prints all the console messages 
      console.log(msg); 
   }; 
   page.onInitialized = function () {  // called when page is initialized 
      page.evaluate(callqunit); 
   }; 
   page.onCallback = function (message) { // called from  
      var result, failed; 
      
      if (message) {  
         if (message.name === 'QUnit.done') { 
            result = message.data; 
            failed = !result || !result.total || result.failed;  
            
            if (!result.total) { 
               console.error('No tests were executed'); 
            } 
            pageexit(failed ? 1 : 0); 
         } 
      } 
   };  
   page.open(url, function (status) { // opening page  
      if (status !== 'success') { 
         console.error('Unable to access network: ' + status); 
         pageexit(1); 

      } else { 
         var checkqunit = page.evaluate(function () { 
            //evaluating page and chcking if qunit object 
               is present on the given page url 
            return (typeof QUnit === 'undefined' || !QUnit); 
         }); 
         
         if (checkqunit) { 
            console.error('Qunit scripts are not present on the page'); 
            pageexit(1); 
         }             
         
         //timeout of 10seconds is used otherwise message from console will get printed. 
         setTimeout(function () { 
            console.error('The specified timeout of ' + timeout + ' seconds has expired. 
               Aborting...'); 
            pageexit(1); 
         }, timeout * 1000);           
      } 
   });  
   function callqunit() {

qunit.html

<!DOCTYPE html> 
<html> 

   <head> 
      <meta charset = "utf-8"> 
      <meta name = "viewport" content = "width = device-width"> 
      <title>QUnit Example</title> 
      <link rel = "stylesheet" href = "https://code.jquery.com/qunit/qunit-2.3.2.css"> 
   </head> 

   <body> 
      <div id = "qunit"></div> 
      <div id = "qunit-fixture"></div> 
      <script src = "https://code.jquery.com/qunit/qunit-2.3.2.js"></script> 
   </body> 
   
</html>

เอาต์พุต

Command - phantomjs qunit.js http: //localhost/tasks/qunit.html

โปรแกรมข้างต้นสร้างผลลัพธ์ต่อไปนี้

{"passed":3,"failed":2,"total":5,"runtime":23}
Time taken is 23ms to run 5 tests.
3 passed, 2 failed.

REPL หมายถึง Read Eval Print Loop. ใน PhantomJS REPL เป็นโหมดโต้ตอบเพื่อทดสอบโค้ด JavaScript คุณสามารถทำสิ่งเดียวกันนี้ได้ซึ่งทำได้ใน Google Chrome Inspector หรือ Firebug เพื่อเรียกใช้โค้ดบางส่วนบนคอนโซลโดยตรง REPL ส่งคืนแพลตฟอร์มเดียวกันให้คุณเพื่อเรียกใช้สคริปต์

คำสั่งที่พิมพ์ถูกส่งไปยังล่ามเพื่อการตีความทันที (EVAL) และเพื่อให้ข้อมูลป้อนกลับ (PRINT) ป้อนPhantomJS ในบรรทัดคำสั่งและจะนำคุณไปสู่โหมดโต้ตอบซึ่งคุณสามารถรันโค้ดของคุณได้โดยตรง

ไวยากรณ์

ไวยากรณ์มีดังนี้ -

Phantomjs

ตัวอย่าง

ตัวอย่างต่อไปนี้สาธิตวิธีการทำงานของ REPL ใน PhantomJS

phantomjs> console.log("Welcome to phantomjs");
Welcome to phantomjs
Undefined

phantomjs> window.navigator {
   "appCodeName": "Mozilla",
   "appName": "Netscape",
   "appVersion": "5.0 (Windows NT 6.2; WOW64) AppleWebKit/538.1 (KHTML, like Gecko)
      PhantomJS/2.1.1 Safari/538.1",
   "cookieEnabled": true,
   "language": "en-IN",

   "mimeTypes": {
      "length": 0
   },
   "onLine": false,
   "platform": "Win32",

   "plugins": {
      "length": 0
   },
   "product": "Gecko
   "productSub": "20030107",
   "userAgent": "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/538.1 (KHTML, like Gecko)
      PhantomJS/2.1.1 Safari/538.1",
   "vendor": "Apple Computer, Inc.",
   "vendorSub": ""
}

phantomjs>
To find the version
phantomjs> phantom.version {
   "major": 2,
   "minor": 1,
   "patch": 1
}
phantomjs>

แต่ละคำสั่งจะถูกดำเนินการและผลลัพธ์จะปรากฏขึ้น ใช้ CTRL + C, CTRL + D หรือphantom.exit() เพื่อออกจากโหมดโต้ตอบ

ใช้ up/down ปุ่มลูกศรเพื่อฟังคำสั่งที่พิมพ์ไว้ก่อนหน้านี้

มีคุณสมบัติอื่นที่เรียกว่า autocompletionซึ่งช่วยในการจำคำสั่ง เพียงพิมพ์ "phantom" และกดปุ่ม "Tab" เพื่อดูรายการคำสั่งที่มีให้คุณสามารถดำเนินการได้

เอาต์พุต

โปรแกรมข้างต้นสร้างผลลัพธ์ต่อไปนี้

phantomjs> phantom.→| 
phantomjs> phantom.cookies→| 
phantomjs> phantom.exit→| 
phantomjs> phantom.version→|

ในบทนี้เราจะนำเสนอตัวอย่างที่เป็นประโยชน์เพิ่มเติมเพื่อทำความเข้าใจคุณสมบัติที่สำคัญบางประการของ PhantomJS

ตัวอย่างที่ 1 - ค้นหาความเร็วหน้ากระดาษ

ในตัวอย่างนี้เราจะใช้ PhantomJS เพื่อค้นหาไฟล์ page speed สำหรับ URL ของหน้าใดก็ได้

var page = require('webpage').create(), 
   system = require('system'), 
   t, address;  

if (system.args.length === 1) { 
   console.log('Usage: loadspeed.js <some URL>'); 
   phantom.exit(1); 
} else { 
   t = Date.now(); 
   address = system.args[1]; 
   
   page.open(address, function (status) { 
      if (status !== 'success') { 
         console.log('FAIL to load the address'); 
      } else { 
         t = Date.now() - t; 
         
         console.log('Page title is ' + page.evaluate(function () { 
            return document.title; 
         })); 
         console.log('Loading time ' + t + ' msec'); 
      } 
      phantom.exit(); 
   }); 
}

โปรแกรมข้างต้นสร้างสิ่งต่อไปนี้ output.

Command - เพจ phantomjspeed.js http://www.google.com

Page title is Google 
Loading time 1396 msec

ตัวอย่างที่ 2 - ส่งเหตุการณ์การคลิกไปที่เพจ

ในตัวอย่างต่อไปนี้เราจะใช้ PhantomJS เพื่อส่งไฟล์ click event ไปยังหน้า

var page = require('webpage').create(); 
page.onConsoleMessage = function(str) { 
   console.log(str); 
} 
page.open('http://phantomjs.org/api/phantom/', function(status) { 
   page.render('beforeclick.png'); 
   console.log(page.url); 
   
   var element = page.evaluate(function() {   
      return document.querySelector('img[src = "http://phantomjs.org/img/phantomjslogo.png"]'); 
   }); 
   page.sendEvent('click', element.offsetLeft, element.offsetTop, 'left'); 
   
   window.setTimeout(function () { 
      console.log(page.url); 
      page.render('afterclick.png'); 
      phantom.exit(); 
   }, 5000); 
   console.log('element is ' + element); 
});

โปรแกรมข้างต้นสร้างสิ่งต่อไปนี้ output.

http://phantomjs.org/api/phantom/ 
element is [object Object] 
http://phantomjs.org/

โปรแกรมของเราจะสร้างสองสิ่งต่อไปนี้ png ภาพใน binโฟลเดอร์ ภาพสองภาพนี้แสดงความแตกต่างก่อนและหลังการทำงานของโปรแกรมข้างต้น

ตัวอย่างที่ 3 - ส่งแบบฟอร์ม

ตัวอย่างต่อไปนี้แสดงวิธีการส่งแบบฟอร์มโดยใช้ PhantomJS

var wpage = require('webpage').create();  
wpage.open("http://localhost/tasks/submitform.html", function(status) { 
   console.log(status); 
   wpage.uploadFile('input[name = fileToUpload]', 'output.png'); 
   wpage.render("sform.png");  
   
   var element = wpage.evaluate(function() {   
      return document.querySelector('input[type = "submit"]');   
      // getting details of submit button using queryselector. 
   }); 
   wpage.sendEvent('click', element.offsetLeft, element.offsetTop, 'left');  
   
   // sendevent is used to send click event and also giving the left and top 
      position of the submit button. 
   
   window.setTimeout(function () { 
      console.log(wpage.url); 
      wpage.render("submit.png");  // screenshot is saved in submit.png 
      phantom.exit(); 
   }, 5000);  
   console.log('element is ' + element);  
});

submitform.html

รหัสต่อไปนี้แสดงวิธีใช้ไฟล์ submitform.html ไฟล์.

<html> 
   <head>
      <title>Window 2</title>
   </head> 

   <body>
      <form action = "submitform.php" method = "post" enctype = "multipart/form-data" 
         id = "form1">  
         <input type = "file" name = "fileToUpload" id = "fileToUpload"> 
         <input type = "submit" value = "Upload Image" name = "submit"> 
      </form> 
   </body>  
   
</html>

เมื่อส่งแบบฟอร์มแล้วจะไปที่ submitform.php.

submitform.php

submitform.php ก็แค่พิมพ์รายละเอียดของไฟล์

<?php 
   print_r($_FILES); 
?>

โปรแกรมข้างต้นสร้างสิ่งต่อไปนี้ output.

Success 
element is [object Object] 
http://localhost/tasks/submitform.php

รูปภาพ

ต่อไปนี้เป็นภาพสำหรับ file upload และ form submit.