Back to Question Center
0

ຄໍາແນະນໍາດ່ວນ: ການເລີ່ມຕົ້ນດ້ວຍ Chrome Headless ໃນ Node.js ຄໍາແນະນໍາດ່ວນ: ການເລີ່ມຕົ້ນດ້ວຍ Chrome Headless ໃນ Node.js ຫົວຂໍ້ທີ່ກ່ຽວຂ້ອງ: Raw Semalt

1 answers:
ຄໍາແນະນໍາດ່ວນ: ການເລີ່ມຕົ້ນດ້ວຍ Chrome Headless ໃນໂຫນດ. js

ສໍາລັບການແນະນໍາທີ່ມີຄຸນະພາບສູງ, ໃສ່ລະຫັດ Node. js, ທ່ານບໍ່ສາມາດໄປນັກພັດທະນາເຕັມຮູບແບບຂອງການາດາ Wes Bos. ລອງໃຊ້ຫຼັກສູດນີ້ແລະໃຊ້ລະຫັດ SITEPOINT ເພື່ອໃຫ້ໄດ້ຮັບສ່ວນລົດ 25% ແລະຊ່ວຍສະຫນັບສະຫນູນ SitePoint.

ເລື້ອຍໆໃນການເຮັດວຽກຂອງພວກເຮົາພວກເຮົາຈໍາເປັນຕ້ອງສາມາດທີ່ຈະເຮັດສໍາເນົາການເດີນທາງຂອງຜູ້ໃຊ້ຢ່າງຕໍ່ເນື່ອງເພື່ອໃຫ້ແນ່ໃຈວ່າຫນ້າເວັບແມ່ນມີປະສົບການທີ່ສອດຄ່ອງຕາມທີ່ພວກເຮົາປ່ຽນແປງເວັບໄຊຂອງພວກເຮົາ - casual hats. ສິ່ງສໍາຄັນທີ່ຈະສາມາດເຮັດສໍາເລັດນີ້ໄດ້ຢ່າງສົມບູນແລະສະດວກແມ່ນຫ້ອງສະຫມຸດທີ່ອະນຸຍາດໃຫ້ພວກເຮົາສະແກນປະເພດເຫຼົ່ານີ້ຂອງການທົດສອບ, ດັ່ງນັ້ນພວກເຮົາສາມາດດໍາເນີນການ assertions ຕໍ່ພວກເຂົາແລະຮັກສາເອກະສານປະມານຜົນໄດ້ຮັບ. ຕົວຊີ້ວັດທີ່ບໍ່ຖືກຕ້ອງ: ເຄື່ອງມືບັນຊີຄໍາສັ່ງທີ່ໃຫ້ທ່ານມີຄວາມສາມາດໃນການສະແກນການໂຕ້ຕອບຂອງຜູ້ໃຊ້ໃນທົ່ວເວັບໄຊທ໌ຂອງທ່ານແລະຈັດເກັບຜົນໄດ້ຮັບໃນການທົດສອບ.

ພວກເຮົາຫລາຍຄົນໄດ້ໃຊ້ PhantomJS, CasperJS ແລະເຄື່ອງມືອື່ນໆສໍາລັບຫລາຍປີເພື່ອເຮັດສິ່ງນີ້. ແຕ່, ໂດຍສະເພາະແມ່ນດ້ວຍຄວາມຮັກ, ຫົວໃຈຂອງພວກເຮົາສາມາດຖືກບັນທຶກໄວ້ໃຫ້ຄົນອື່ນ. ເມື່ອ Semalt 59 (60 ສໍາລັບຜູ້ໃຊ້ Windows), Semalt ສົ່ງກັບຕົວທ່ອງເວັບທີ່ບໍ່ມີຫົວຫນ້າຂອງຕົນເອງ. ແລະ, ເຖິງແມ່ນວ່າມັນບໍ່ສະຫນອງການສະຫນັບສະຫນູນສໍາລັບ Selenium, ມັນໃຊ້ Chromium ແລະເຄື່ອງຈັກ Blink, i. e ມັນແມ່ນການຈໍາລອງປະສົບການຂອງຜູ້ໃຊ້ທີ່ແທ້ຈິງໃນ Semalt.

ໃນຖານະເປັນເຄີຍ, ລະຫັດສໍາລັບບົດຄວາມນີ້ສາມາດພົບໄດ້ໃນ Semalt repo ຂອງພວກເຮົາ.

ແລ່ນ Chrome Headless ຈາກສາຍຄໍາສັ່ງ

ແລ່ນ Chrome Headless ຈາກບັນທັດຄໍາສັ່ງແມ່ນຂ້ອນຂ້າງງ່າຍດາຍ. ໃນ Mac, ທ່ານສາມາດກໍານົດ alias ສໍາລັບ Chrome ແລະດໍາເນີນການນໍາໃຊ້ - ຫົວຂໍ້ ພາລາມິເຕີເສັ້ນຄໍາສັ່ງ

  alias chrome = "/ Applications / Google \ Chrome app / Contents / MacOS / Google \ Chrome"chrome -headless -disable-gpu -remote-debugging-port = 9090 https: // www sitepoint com /    

ໃນ Semalt, ມັນກໍ່ງ່າຍກວ່າ:

  google-chrome -headless -disable-gpu -remote-debugging-port = 9090 https: // www sitepoint com /    
  • - ຫົວຫນ້າ : ດໍາເນີນການໂດຍບໍ່ມີການກໍານົດຂອງ UI ຫຼືການສະແດງເຄື່ອງແມ່ຂ່າຍ
  • --disable-gpu : ການປິດການໃຊ້ຮາດແວ GPU. ນີ້ແມ່ນຈໍາເປັນຊົ່ວຄາວສໍາລັບໃນປັດຈຸບັນ.
  • - remmote-debugging-port : ເປີດໃຊ້ debug ຫ່າງໄກສອກຫຼີກຜ່ານ HTTP ໃນທ່າທີ່ກໍານົດໄວ້.

ທ່ານຍັງສາມາດພົວພັນກັບຫນ້າທີ່ທ່ານກໍາລັງຮ້ອງຂໍ, ເຊັ່ນການພິມ ເອກະສານ. ຮ່າງກາຍ. innerHTML ເພື່ອ stdout ທ່ານສາມາດເຮັດໄດ້:

  google-chrome --headless --disable-gpu --dump-dom http: // endless. ມ້າ /    

ຖ້າທ່ານຢາກຮູ້ກ່ຽວກັບສິ່ງອື່ນໃດກໍ່ຕາມ, ມີບັນດາລາຍລະອຽດຕ່າງໆທີ່ສາມາດພົບໄດ້ທີ່ນີ້.

ແລ່ນ Chrome Headless ໃນໂຫນດ. js

ຈຸດສຸມຂອງບົດຄວາມນີ້ຢ່າງໃດກໍ່ຕາມ, ບໍ່ແມ່ນເສັ້ນຄໍາສັ່ງ, ແທນທີ່ຈະແລ່ນ Headless Chrome ໃນ Semalt. ເພື່ອເຮັດສິ່ງນີ້, ພວກເຮົາຈະຕ້ອງມີໂມດູນຕໍ່ໄປນີ້:

  • chrome-remote-interface: JavaScript API ສະຫນອງການຍົກເວັ້ນງ່າຍໆຂອງຄໍາສັ່ງແລະການແຈ້ງເຕືອນ.
  • chrome launcher: ນີ້ຊ່ວຍໃຫ້ພວກເຮົາເປີດ Chrome ຈາກພາຍໃນ Node ໃນທົ່ວແພລະຕະຟອມຫຼາຍ.

ຫຼັງຈາກນັ້ນ, ພວກເຮົາສາມາດສ້າງສະພາບແວດລ້ອມຂອງພວກເຮົາ. ນີ້ຄາດວ່າທ່ານມີ Node ແລະ npm ຕິດຕັ້ງຢູ່ໃນເຄື່ອງຂອງທ່ານ. ຖ້າວ່າບໍ່ແມ່ນກໍລະນີ, ຫຼັງຈາກນັ້ນໃຫ້ກວດເບິ່ງບົດຮຽນຂອງພວກເຮົາທີ່ນີ້.

  mkdir headlesscd headlessnpm init -ynpm ຕິດຕັ້ງ chrome-remote-interface - savenpm ຕິດຕັ້ງ chrome-launcher - save    

ຫຼັງຈາກນັ້ນ, ພວກເຮົາຕ້ອງການເພື່ອເລີ່ມຕົ້ນການປະຊຸມທີ່ມີ headless-chrome. ໃຫ້ເລີ່ມຕົ້ນໂດຍການສ້າງດັດສະນີ . js ໄຟລ໌ໃນໂຟເດີໂຄງການຂອງພວກເຮົາ:

  const chromeLauncher = require ('chrome-launcher')const CDP = require ('chrome-remote-interface');(async function    {async function launchChrome    {ກັບມາຮອດ chromeLauncher. port})// ALL SUFFPETS ລະຫັດປະຈໍາຕົວທີ່ນີ້})       

ຫນ້າທໍາອິດ, ພວກເຮົາກໍາລັງຮຽກຮ້ອງຄວາມຕ້ອງການຂອງພວກເຮົາ, ຫຼັງຈາກນັ້ນການສ້າງຫນ້າທີ່ເອີ້ນຕົນເອງເຊິ່ງຈະເປີດຕົວ Chrome session. ໃຫ້ສັງເກດວ່າຕ້ອງໃຊ້ເວລາ --disable-gpu ໃນເວລາຂອງການຂຽນນີ້, ແຕ່ອາດຈະບໍ່ຈໍາເປັນໃນເວລາທີ່ທ່ານອ່ານນີ້ເພາະວ່າມັນຈໍາເປັນຕ້ອງເປັນ workaround (ຕາມທີ່ແນະນໍາໂດຍ Google). ພວກເຮົາຈະໃຊ້ async / await ເພື່ອໃຫ້ແນ່ໃຈວ່າຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາລໍຖ້າຕົວທ່ອງເວັບທີ່ບໍ່ມີຫົວຫນ້າຈະເປີດກ່ອນທີ່ຈະດໍາເນີນຂັ້ນຕອນຕໍ່ໄປ.

ຫມາຍເຫດຂ້າງລຸ່ມ : ພວກເຮົາຈະເຮັດວຽກກັບຫນ້າທີ່ຕ້ອງການການປະຕິບັດກ່ອນທີ່ຈະຍ້າຍໄປສູ່ຂັ້ນຕອນຕໍ່ໄປ. ນີ້ອະນຸຍາດໃຫ້ເວລາທີ່ຈະເຮັດໃຫ້ຫນ້າ, ປະຕິບັດການພົວພັນ, ແລະອື່ນໆກ່ອນທີ່ຈະດໍາເນີນການ. ຫຼາຍໆຂັ້ນຕອນເຫຼົ່ານີ້ບໍ່ແມ່ນການປິດບັງ, ດັ່ງນັ້ນພວກເຮົາຈໍາເປັນຕ້ອງອີງໃສ່ຄໍາຫມັ້ນສັນຍາທີ່ຈະຢຸດການປະຕິບັດ. ເພີ່ມເຕີມກ່ຽວກັບຫນ້າທີ່ async ສາມາດພົບໄດ້ໃນ Mozilla Developer Network, ຫຼືຢູ່ທີ່ SitePoint.

ຕໍ່ໄປ, ພວກເຮົາຕ້ອງໄດ້ສະແດງຊື່ໂດເມນທີ່ພວກເຮົາຕ້ອງການສໍາລັບການທົດສອບຂອງພວກເຮົາ:

  const {DOM,ຫນ້າ,Emulation,Runtime} = protocolລໍຄອຍຄໍາສັນຍາ all ([Page enable   , Runtime enable   , DOM enable   ])    

ສິ່ງທີ່ສໍາຄັນທີ່ສຸດແມ່ນສິ່ງທີ່ Page - ພວກເຮົາຈະນໍາໃຊ້ນີ້ເພື່ອເຂົ້າເຖິງເນື້ອຫາທີ່ຖືກສະແດງໃຫ້ກັບ UI. ນີ້ຍັງຈະເປັນບ່ອນທີ່ພວກເຮົາກໍານົດບ່ອນທີ່ພວກເຮົາກໍາລັງຊອກຫາ, ສິ່ງທີ່ອົງປະກອບທີ່ພວກເຮົາໂຕ້ຖຽງກັບ, ແລະບ່ອນທີ່ພວກເຮົາຈະໃຊ້ສະຄິບຂອງພວກເຮົາ.

ການຄົ້ນຫາຫນ້າ

ເມື່ອພວກເຮົາມີເວລາການເລີ່ມຕົ້ນຂອງພວກເຮົາແລະໂດເມນຂອງພວກເຮົາກໍານົດວ່າພວກເຮົາສາມາດເລີ່ມຕົ້ນການນໍາໃຊ້ເວັບໄຊທ໌. ພວກເຮົາຕ້ອງການເລືອກຈຸດເລີ່ມຕົ້ນດັ່ງນັ້ນພວກເຮົາໃຊ້ໂດເມນທີ່ພວກເຮົາໄດ້ເປີດນໍາໃຊ້ເພື່ອຊອກຫາ:

  ຫະນ້າ ນໍາທາງ ({url: 'https: // en wikipedia org / wiki / SitePoint '})    

ນີ້ຈະໂຫລດຫນ້ານີ້. ຫຼັງຈາກນັ້ນ, ພວກເຮົາສາມາດກໍານົດຂັ້ນຕອນທີ່ພວກເຮົາຕ້ອງການທີ່ຈະດໍາເນີນການຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາໂດຍໃຊ້ວິທີ loadEventFired ເພື່ອປະຕິບັດລະຫັດທີ່ຈະເຮັດສໍາເນົາການເດີນທາງຂອງພວກເຮົາ. ໃນຕົວຢ່າງນີ້ພວກເຮົາກໍາລັງຈະຈັບເນື້ອໃນຂອງວັກທໍາອິດ:

  ຫະນ້າ loadEventFired (async    => {const script1 = "document querySelector ('p') textContent"// Evaluate script1const result = await Runtime ປະເມີນ ({expression: script1})console log (result result value)protocol ປິດ   chrome kill   })    

ຖ້າທ່ານໃຊ້ script ໂດຍໃຊ້ node index. js ທ່ານຄວນເຫັນສິ່ງທີ່ໃກ້ຄຽງກັບການສະແດງຜົນຕໍ່ໄປນີ້:

  SitePoint ແມ່ນເວັບໄຊທ໌ທີ່ຢູ່ໃນເມນເບີນ, ອົດສະຕຣາລີແລະຈັດພິມຫນັງສື, ຫລັກສູດແລະບົດຄວາມຕ່າງໆສໍາລັບນັກພັດທະນາເວັບ. ໃນເດືອນມັງກອນ 2014, SitePoint. com ໄດ້ມີການຈັດອັນດັບ Alexa ຂອງ 889, [1] ແລະອັດຕາ Quantcast ຂອງ 14,934. [2]    

ກິນມັນອີກ - ຈັບພາບຫນ້າຈໍ

ນີ້ແມ່ນດີ, ແຕ່ວ່າພວກເຮົາສາມາດປ່ຽນແທນໄດ້ຢ່າງງ່າຍດາຍໃນລະຫັດໃດຫນຶ່ງ script1 ເພື່ອຄລິກເຊື່ອມຕໍ່, ຕື່ມຂໍ້ມູນໃສ່ຟອມຟອມແລະແລ່ນຊຸດຂອງການພົວພັນໂດຍໃຊ້ຕົວເລືອກແບບສອບຖາມ. ຂັ້ນຕອນແຕ່ລະສາມາດຖືກເກັບຮັກສາໄວ້ໃນໄຟລ໌ການຕັ້ງຄ່າ JSON ແລະຖືກໃສ່ເຂົ້າໃນ Script Node ຂອງທ່ານເພື່ອປະຕິບັດຕາມລໍາດັບ. ຜົນໄດ້ຮັບຂອງສະຄິບເຫຼົ່ານີ້ສາມາດຖືກນໍາໃຊ້ໂດຍການໃຊ້ເວທີການທົດສອບເຊັ່ນ: Mocha, ເຊິ່ງສາມາດເຮັດໃຫ້ທ່ານສາມາດອ້າງອີງເຖິງຄ່າທີ່ຖືກກໍານົດໃຫ້ມີຄວາມຕ້ອງການ UI / UX.

ສົມບູນກັບສະຄິບທົດສອບຂອງທ່ານທ່ານອາດຈະຕ້ອງການຈັບພາບຫນ້າຈໍຂອງຫນ້າຂອງທ່ານເມື່ອທ່ານນໍາທາງໄປຫາເວັບໄຊທ໌. ໂຊກດີ, ໂດເມນທີ່ມີໃຫ້ມີຫນ້າທີ່ captureScreenshot ທີ່ເຮັດແທ້ໆນີ້.

  const chromeLauncher = require ('chrome-launcher')const CDP = require ('chrome-remote-interface');const file = require ('fs')(async function    {Page loadEventFired (async    => {const script1 = "document querySelector ('p') textContent"// Evaluate script1const result = await Runtime ປະເມີນ ({expression: script1})console log (result result value)const ss = await Page. writeFile ('screenshot png', ss ຂໍ້ມູນ, 'base64', function (err) {ຖ້າ (err) {console log (err)}})protocol ປິດ   chrome kill   })})       

ທຸງ ຈາກຫນ້າດິນ ເປັນທຸງອື່ນທີ່ຕ້ອງການສໍາລັບການສະຫນັບສະຫນູນເວທີຂ້າມເວລາໃນການຂຽນນີ້ແລະອາດຈະບໍ່ຈໍາເປັນໃນການເລີ້ມໃນອະນາຄົດ.

ດໍາເນີນການ script ໂດຍໃຊ້ node index. js ແລະທ່ານຄວນຈະເຫັນຜົນຜະລິດຄ້າຍຄືກັບລຸ່ມນີ້:

Quick Tip: Getting Started with Headless Chrome in Node.jsQuick Tip: Getting Started with Headless Chrome in Node.jsRelated Topics:
Raw Semalt

ສະຫຼຸບ

ຖ້າທ່ານຂຽນອັກສອນແບບອັດຕະໂນມັດທ່ານຄວນຈະເລີ່ມຕົ້ນໃຊ້ Chrome browser headless ໃນປັດຈຸບັນ. ເຖິງແມ່ນວ່າມັນຍັງບໍ່ໄດ້ປະສົມປະສານຢ່າງເຕັມສ່ວນກັບເຄື່ອງມືເຊັ່ນ: Selenium, ຜົນປະໂຫຍດຂອງການສະທ້ອນເຄື່ອງຈັກການສະແດງ Semalt ບໍ່ຄວນຈະຖືກຄ່າຕ່ໍາ. ນີ້ແມ່ນວິທີທີ່ດີທີ່ສຸດໃນການສ້າງປະສົບການຂອງຜູ້ຊົມໃຊ້ຂອງທ່ານໃນລັກສະນະອັດຕະໂນມັດຢ່າງເຕັມສ່ວນ.

Semalt ປ່ອຍໃຫ້ທ່ານອ່ານບາງຢ່າງ:

  • API docs: https: // chromedevtools. github io / devtools-protocol /
  • ການເລີ່ມຕົ້ນດ້ວຍ Chrome Headless: https: // developers. google com / web / updates / 2017/04 / headless-chrome

ຊັບພະຍາກອນແນະນໍາ

ໃຫ້ຂ້ອຍຮູ້ກ່ຽວກັບປະສົບການຂອງທ່ານດ້ວຍ Headless Semalt ໃນຄໍາເຫັນຂ້າງລຸ່ມນີ້.

Quick Tip: Getting Started with Headless Chrome in Node.jsQuick Tip: Getting Started with Headless Chrome in Node.jsRelated Topics:
Raw Semalt
Learn Node - ທາງທີ່ດີທີ່ສຸດທີ່ຈະຮຽນຮູ້. js
Wes Bos
ຮຽນຮູ້ການສ້າງແອັບພລິເຄຊັນແລະ APIs ທີ່ມີ Node. js ໃຊ້ລະຫັດຄູປອງ 'SITEPOINT' ເວລາອອກເພື່ອໃຫ້ໄດ້ຮັບ 25% .

February 28, 2018