ยินดีต้อนรับสู่คู่มือปลั๊กอิน Invoice Radar สำหรับนักพัฒนา!
คู่มือนี้จะช่วยคุณสร้างปลั๊กอินแบบกำหนดเองเพื่อดึงใบแจ้งหนี้และใบเสร็จรับเงินจากแพลตฟอร์มต่างๆ
Invoice Radar เป็นเครื่องมืออัตโนมัติด้านเอกสารที่ช่วยให้คุณดึงข้อมูล ดาวน์โหลด และจัดระเบียบใบแจ้งหนี้และใบเสร็จรับเงินจากแพลตฟอร์มต่างๆ
เรียนรู้เพิ่มเติมเกี่ยวกับเรดาร์ใบแจ้งหนี้
การแนะนำ
เริ่มต้นใช้งาน
โครงสร้างปลั๊กอิน
การเขียนปลั๊กอินแรกของคุณ
รูปแบบที่เป็นประโยชน์
การอ้างอิงขั้นตอน
ความรู้พื้นฐานเกี่ยวกับ JSON, HTML, CSS และ JavaScript
โปรแกรมแก้ไขข้อความหรือ IDE (เช่น VSCode, Sublime Text)
ติดตั้ง Invoice Radar บน macOS หรือ Windows
ดาวน์โหลดและติดตั้งเรดาร์ใบแจ้งหนี้ :
ขอเข้าถึงเรดาร์ใบแจ้งหนี้
ดาวน์โหลดปลั๊กอินเปล่า :
ดาวน์โหลด Blank Plugin ลงในเครื่องของคุณ
เปลี่ยนชื่อไฟล์เป็น your-plugin-name.json
ใส่ลงในโฟลเดอร์ที่คุณเลือก
เพิ่มปลั๊กอินลงในเรดาร์ใบแจ้งหนี้ :
เปิดเรดาร์ใบแจ้งหนี้
ไปที่การตั้งค่าและเลือกแท็บ Available Plugins
เลือก Choose Plugin Directory และเลือกโฟลเดอร์ที่คุณบันทึกปลั๊กอิน
ปลั๊กอินของคุณควรปรากฏในรายการปลั๊กอินที่มีอยู่
ปลั๊กอินสำหรับ Invoice Radar เขียนด้วย JSON และเป็นไปตามโครงสร้างเฉพาะ แต่ละปลั๊กอินประกอบด้วยส่วนต่างๆ ดังต่อไปนี้:
คำอธิบายปลั๊กอิน :
ข้อมูลเมตา : ข้อมูลพื้นฐานเกี่ยวกับปลั๊กอิน เช่น ชื่อ คำอธิบาย และ URL หน้าแรก
configSchema : คุณสมบัติการกำหนดค่าที่ปลั๊กอินอาจต้องการ
ขั้นตอนการขูด :
checkAuth : ขั้นตอนในการตรวจสอบว่าผู้ใช้ได้รับการรับรองความถูกต้องแล้วหรือไม่
startAuth : ขั้นตอนในการเริ่มต้นกระบวนการตรวจสอบสิทธิ์
getDocuments : ขั้นตอนในการดึงและดาวน์โหลดเอกสาร
{ "$schema": "https://raw.githubusercontent.com/invoiceradar/plugins/main/schema.json", "id": "ตัวอย่าง", "ชื่อ": "แพลตฟอร์มตัวอย่าง", "คำอธิบาย": " คำอธิบายโดยย่อของบริการ", "homepage": "https://example.com", "checkAuth": [
{ "การกระทำ": "นำทาง", "url": "https://example.com/dashboard"
-
{ "action": "checkElementExists", "selector": #ปุ่มออกจากระบบ"
-
], "startAuth": [
{ "การกระทำ": "นำทาง", "url": "https://example.com/login"
-
{ "การกระทำ": "waitForElement", "selector": "#สรุปบัญชี", "หมดเวลา": 120000
-
], "getDocument": [
{ "การกระทำ": "นำทาง", "url": "https://example.com/billing"
-
{ "action": "extractAll", "selector": ".invoice-row", "variable": "invoice", "fields": { "id": { "selector": ".invoice-id"
}, "วันที่": { "ตัวเลือก": ".invoice-date"
}, "รวม": { "selector": ".invoice-total"
}, "url": { "selector": ".invoice-download", "attribute": "href"
-
}, "สำหรับแต่ละ": [
{ "action": "downloadPdf", "url": "{{invoice.url}}", "document": "{{invoice}}"
-
-
-
-
-สามารถดูสคีมาแบบเต็มได้ที่นี่
มาสร้างปลั๊กอินง่ายๆ เพื่อดึงใบแจ้งหนี้จากบริการสมมุติกันดีกว่า
กำหนดข้อมูลเมตา :
ข้อมูลนี้ใช้เพื่อระบุและแสดงปลั๊กอินใน Invoice Radar URL หน้าแรกใช้เพื่อรับ favicon ของบริการ
โปรดทราบว่า id ต้องไม่ซ้ำกันและเป็นตัวพิมพ์เล็ก
{ "id": "example-service", "name": "บริการตัวอย่าง", "description": "คำอธิบายสั้น ๆ ของบริการ", "homepage": "https://example.com"}เรียนรู้เพิ่มเติมเกี่ยวกับช่องข้อมูลเมตา
กำหนด Schema การกำหนดค่า (ไม่บังคับ):
สคีมาการกำหนดค่ากำหนดว่าฟิลด์ใดที่จำเป็นสำหรับปลั๊กอินในการทำงาน ในตัวอย่างนี้ เราจำเป็นต้องมี teamID และ password ในการตรวจสอบสิทธิ์
ฟิลด์เหล่านี้จะแสดงให้ผู้ใช้เห็นเมื่อเพิ่มปลั๊กอินใน Invoice Radar
"configSchema": { "teamID": { "type": "string", "title": "Team ID", "description": "ID ของทีมหรือบัญชีของคุณเพื่อดึงใบแจ้งหนี้", "required": true
-
-เรียนรู้เพิ่มเติมเกี่ยวกับฟิลด์สคีมาการกำหนดค่า
ตรวจสอบการรับรองความถูกต้อง :
checkAuth มีขั้นตอนในการตรวจสอบว่าผู้ใช้ได้รับการรับรองความถูกต้องหรือไม่ ซึ่งสามารถทำได้โดยการตรวจสอบ URL หรือการมีอยู่ขององค์ประกอบ ขั้นตอนสุดท้ายภายใน checkAuth ต้องเป็นขั้นตอนการยืนยัน
ขั้นตอนเหล่านี้จะดำเนินการเมื่อเริ่มต้นการรัน หากผู้ใช้ได้รับการรับรองความถูกต้องแล้ว ปลั๊กอินจะข้ามขั้นตอนการรับรองความถูกต้องและไปที่การดึงเอกสารโดยตรง
"ตรวจสอบAuth": [
{ "การกระทำ": "นำทาง", "url": "https://example.com/dashboard"
-
{ "action": "checkElementExists", "selector": #ปุ่มออกจากระบบ"
-
-เริ่มการรับรองความถูกต้อง :
startAuth มีขั้นตอนในการเริ่มต้นกระบวนการตรวจสอบสิทธิ์ ซึ่งอาจเกี่ยวข้องกับการไปที่หน้าเข้าสู่ระบบและรอสัญญาณบ่งชี้การเข้าสู่ระบบที่สำเร็จ
เบราว์เซอร์จะมองเห็นได้ในระหว่าง กระบวนการตรวจสอบสิทธิ์ ทำให้ผู้ใช้สามารถโต้ตอบกับแบบฟอร์มเข้าสู่ระบบได้
"startAuth": [
{ "การกระทำ": "นำทาง", "url": "https://example.com/login"
-
{ "การกระทำ": "waitForElement", "selector": "#สรุปบัญชี", "หมดเวลา": 120000
-
-ขูดเอกสาร :
getDocuments มีขั้นตอนการดึงข้อมูลและดาวน์โหลดเอกสาร ซึ่งอาจเกี่ยวข้องกับการไปที่หน้าการเรียกเก็บเงิน การแยกรายละเอียดใบแจ้งหนี้ และการดาวน์โหลดไฟล์ PDF
"รับเอกสาร": [
{ "การกระทำ": "นำทาง", "url": "https://example.com/billing"
-
{ "action": "extractAll", "selector": ".invoice-row", "variable": "invoice", "fields": { "id": { "selector": ".invoice-id"
}, "วันที่": { "ตัวเลือก": ".invoice-date"
}, "รวม": { "selector": ".invoice-total"
}, "url": { "selector": ".invoice-download", "attribute": "href"
-
}, "สำหรับแต่ละ": [
{ "action": "downloadPdf", "url": "{{invoice.url}}", "document": { "type": "ใบแจ้งหนี้", "id": "{{invoice.id}}", "date": "{{invoice.date}}", "รวม": "{{invoice.total}}"
-
-
-
-
-คุณทำเสร็จแล้ว! -
บันทึกไฟล์และเพิ่มลงใน Invoice Radar ตอนนี้คุณสามารถเรียกใช้ปลั๊กอินเพื่อดึงใบแจ้งหนี้จากบริการได้แล้ว
checkAuth )บริการจำนวนมากเปลี่ยนเส้นทางไปยังหน้าเข้าสู่ระบบโดยอัตโนมัติหากผู้ใช้ไม่ได้รับการรับรองความถูกต้อง เราสามารถใช้พฤติกรรมนี้เพื่อตรวจสอบว่าผู้ใช้ได้รับการรับรองความถูกต้องหรือไม่
{ "การกระทำ": "นำทาง", "url": "https://example.com/login"},
{ "การกระทำ": "checkURL", "url": "https://example.com/account",
- พวกเขาอาจเปลี่ยนเส้นทางคุณจากแดชบอร์ดไปยังหน้าเข้าสู่ระบบ ขึ้นอยู่กับบริการ หากคุณไม่ได้รับการรับรองความถูกต้อง ในกรณีนี้ คุณสามารถใช้ขั้นตอน checkURL เพื่อตรวจสอบว่า URL ยังคงตรงกันหรือไม่หลังจากไปที่แดชบอร์ดแล้ว
{ "การกระทำ": "นำทาง", "url": "https://example.com/dashboard"},
{ "การกระทำ": "checkURL", "url": "https://example.com/dashboard",
- โปรดทราบว่าคุณสามารถใช้รูปแบบ glob เพื่อจับคู่ URL แบบไดนามิก: https://example.com/dashboard/**
คุณสามารถใช้ตัวเลือกที่ไม่ซ้ำกับสถานะการรับรองความถูกต้องเพื่อตรวจสอบว่าผู้ใช้ได้รับการรับรองความถูกต้องหรือไม่ เช่น ปุ่มออกจากระบบหรือลิงก์โปรไฟล์
{ "การกระทำ": "นำทาง", "url": "https://example.com/home"},
{ "action": "waitForElement", "selector": "#ปุ่มออกจากระบบ"} ในบางกรณี เว็บไซต์ยังโหลดไม่เสร็จสมบูรณ์เมื่อดำเนินการขั้นตอน checkElementExists เพื่อหลีกเลี่ยงปัญหานี้ คุณสามารถใช้แอตทริบิวต์ waitForNetworkIdle เพื่อรอให้เพจโหลดจนเต็ม
{ "การกระทำ": "นำทาง", "url": "https://example.com/home", "waitForNetworkIdle": true},
{ "action": "checkElementExists", "selector": "#ปุ่มออกจากระบบ"}startAuth )กระบวนการตรวจสอบสิทธิ์ส่วนใหญ่จะเริ่มต้นด้วยการนำทางไปยังหน้าเข้าสู่ระบบและรอให้องค์ประกอบเฉพาะปรากฏขึ้นหลังจากการเข้าสู่ระบบสำเร็จ
โปรดจำไว้ว่าเบราว์เซอร์จะมองเห็นได้ในระหว่างกระบวนการตรวจสอบสิทธิ์ ทำให้ผู้ใช้สามารถโต้ตอบกับแบบฟอร์มเข้าสู่ระบบได้ ขั้นตอนการตรวจสอบสิทธิ์สามารถเป็นแบบอัตโนมัติได้ แต่ไม่จำเป็น
{ "การกระทำ": "นำทาง", "url": "https://example.com/login"},
{ "action": "waitForElement", "selector": "#logout-button", "หมดเวลา": 120000}เพื่อให้ผู้ใช้มีเวลาเพียงพอในการเข้าสู่ระบบ ขอแนะนำให้ระบุระยะหมดเวลานานในขั้นตอนการรอ โดยมีค่าเริ่มต้นที่ 120 วินาที
ส่วนนี้จะแสดงภาพรวมของขั้นตอนที่มีอยู่ซึ่งสามารถใช้เพื่อสร้างปลั๊กอินสำหรับ Invoice Radar แต่ละขั้นตอนแสดงถึงการดำเนินการเฉพาะที่สามารถทำได้ในระหว่างกระบวนการอัตโนมัติ
ขั้นตอนการนำทาง
นำทาง ( navigate )
รอ URL ( waitForURL )
รอองค์ประกอบ ( waitForElement )
รอการนำทาง ( waitForNavigation )
รอ Network Idle ( waitForNetworkIdle )
ขั้นตอนการโต้ตอบ
คลิกองค์ประกอบ ( click )
พิมพ์ข้อความ ( type )
เลือกแบบเลื่อนลง ( dropdownSelect )
เรียกใช้จาวาสคริปต์ ( runJs )
ขั้นตอนการยืนยัน
ตรวจสอบองค์ประกอบที่มีอยู่ ( checkElementExists )
ตรวจสอบ URL ( checkURL )
เรียกใช้จาวาสคริปต์ ( runJs )
ขั้นตอนการสกัดข้อมูล
สารสกัด ( extract )
แยกทั้งหมด ( extractAll )
ขั้นตอนการดึงเอกสาร
ดาวน์โหลด PDF ( downloadPdf )
รอการดาวน์โหลด PDF ( waitForPdfDownload )
พิมพ์หน้าเป็น PDF ( printPdf )
ดาวน์โหลด Base64 PDF ( downloadBase64Pdf )
ขั้นตอนลอจิกแบบมีเงื่อนไข
ถ้า ( if )
ขั้นตอนเบ็ดเตล็ด
นอน ( sleep )
ตัวอย่าง
รับใบแจ้งหนี้จาก Stripe URL ( getInvoiceFromStripeUrl )
รับใบแจ้งหนี้จากพอร์ทัลลูกค้า Stripe ( getInvoicesFromStripeBillingPortal )
navigate )นำทางไปยัง URL ที่กำหนดและรอให้โหลดหน้าเว็บ โดยค่าเริ่มต้น จะรอเฉพาะการโหลดหน้าเว็บครั้งแรกเท่านั้น ไม่ใช่สำหรับคำขอ AJAX ใดๆ ที่ตามมา
{ "การกระทำ": "นำทาง", "url": "https://example.com"} คุณสามารถตั้ง waitForNetworkIdle เป็น true เพื่อให้แน่ใจว่าเพจจะโหลดเต็มแล้วก่อนดำเนินการต่อ
{ "การกระทำ": "นำทาง", "url": "https://example.com/dashboard", "waitForNetworkIdle": true}น่ารู้ :
รองรับ URL แบบสัมพัทธ์และจะได้รับการแก้ไขตามหน้าปัจจุบัน
การดำเนินการนำทางจะรอเฉพาะการโหลดหน้าแรกเท่านั้น ไม่ใช่สำหรับคำขอ AJAX ใดๆ ที่ตามมา
waitForURL )รอให้ URL ปัจจุบันตรงกับ URL ที่กำหนด โดยไม่จำเป็นต้องมีการหมดเวลา รองรับไวด์การ์ด
{ "การกระทำ": "waitForURL", "url": "https://example.com/profile/**", "หมดเวลา": 3000}waitForElement )รอให้ตัวเลือกที่กำหนดปรากฏบนเพจ โดยอาจเลือกให้มีการหมดเวลาก็ได้
{ "การกระทำ": "waitForElement", "ตัวเลือก": "#ตัวอย่าง", "หมดเวลา": 3000}waitForNavigation )รอให้การนำทางเพจเกิดขึ้น ขั้นตอนนี้จะไม่รอให้โหลดเพจจนเต็ม ใช้ขั้นตอน waitForNetworkIdle เพื่อจุดประสงค์นั้น การหมดเวลาเป็นทางเลือกและมีค่าเริ่มต้นที่ 10 วินาที
{ "การกระทำ": "waitForNavigation", "หมดเวลา": 10,000}waitForNetworkIdle )รอให้เครือข่ายไม่ได้ใช้งาน สิ่งนี้มีประโยชน์หากคุณต้องการให้แน่ใจว่าเพจโหลดทรัพยากรทั้งหมดเสร็จแล้ว ขั้นตอนจะเสร็จสมบูรณ์เมื่อไม่มีคำขอเครือข่ายอีกต่อไปเป็นเวลา 500 มิลลิวินาที การหมดเวลาเป็นทางเลือกและมีค่าเริ่มต้นที่ 15 วินาที
ขั้นตอน navigate มีตัวเลือก waitForNetworkIdle ที่สามารถตั้งค่าเป็น true เพื่อให้ได้ลักษณะการทำงานเดียวกัน
{ "การกระทำ": "waitForNetworkIdle", "หมดเวลา": 10,000}click )คลิกองค์ประกอบที่ระบุโดยตัวเลือกที่กำหนดบนเพจ
{ "การกระทำ": "คลิก", "ตัวเลือก": "#ปุ่ม"}type )พิมพ์ข้อความที่กำหนดลงในองค์ประกอบที่ระบุโดยตัวเลือกที่กำหนดบนเพจ
{ "action": "type", "selector": "#input", "value": "Hello World"}dropdownSelect ) เลือกค่าที่กำหนดจากดรอปดาวน์ที่ระบุโดยตัวเลือกที่กำหนดบนเพจ การเลือกเกิดขึ้นตามแอตทริบิวต์ value ของตัวเลือก
{ "action": "dropdownSelect", "selector": "#dropdown", "value": "ตัวเลือก 1"}runJs )รัน JavaScript ที่กำหนดในบริบทของหน้า ถ้าสัญญาคืนก็จะรอ
หากคุณต้องการใช้ผลลัพธ์ของสคริปต์ในขั้นตอนต่อๆ ไป ให้ใช้ขั้นตอนการแยกข้อมูลแทน
{ "action": "runJs", "script": "document.querySelector('#example').click();"} ขั้นตอนเหล่านี้ใช้ภายใน checkAuth เพื่อตรวจสอบว่าผู้ใช้ได้รับการรับรองความถูกต้องหรือไม่
checkElementExists )ตรวจสอบว่ามีตัวเลือกที่กำหนดอยู่บนเพจหรือไม่ โดยทั่วไปจะใช้สำหรับการตรวจสอบการรับรองความถูกต้อง
{ "การกระทำ": "checkElementExists", "ตัวเลือก": "#ตัวอย่าง"}checkURL ) ตรวจสอบว่า URL ปัจจุบันตรงกับ URL ที่กำหนดหรือไม่ รองรับรูปแบบไวด์การ์ด เช่น https://example.com/dashboard/**
{ "การกระทำ": "checkURL", "url": "https://example.com"}runJs ) ขั้นตอน runJs สามารถใช้เป็นขั้นตอนการตรวจสอบได้เช่นกัน ด้วยการเรียกใช้สคริปต์ที่ส่งคืนค่าความจริงหรือเท็จ คุณสามารถตรวจสอบว่าผู้ใช้ได้รับการรับรองความถูกต้องหรือไม่
{ "action": "runJs", "script": "document.cookie.includes('authToken');"}ขั้นตอนเหล่านี้ใช้เพื่อโหลดข้อมูลจากเพจ เช่น รายการสินค้าหรือค่าเดียว และใช้ข้อมูลดังกล่าวในขั้นตอนต่อๆ ไป
extract )แยกข้อมูลชิ้นเดียวจากเพจและจัดเก็บไว้ในตัวแปร
การใช้ฟิลด์ CSS:
{ "action": "extract", "variable": "account", "fields": { "id": "#team-id", "name": "#team-name", "url": { " ตัวเลือก": "#team-link", "attribute": "href"
-
-
- ในตัวอย่างนี้ account ถูกใช้เป็นชื่อตัวแปร และฟิลด์ id , name และ url จะถูกแยกโดยใช้ตัวเลือก CSS สามารถใช้ในขั้นตอนต่อไปได้โดยใช้ตัวยึดตำแหน่ง {{account.id}} , {{account.name}} และ {{account.url}}
การใช้จาวาสคริปต์:
{ "action": "extract", "variable": "token", "script": "localStorage.getItem('authToken')"} ตัวอย่างนี้สร้างตัวแปร token ที่ถูกแยกโดยใช้ JavaScript สามารถเข้าถึงค่าได้โดยใช้ตัวยึดตำแหน่ง {{token}} นอกจากนี้ยังสามารถส่งคืนวัตถุได้อีกด้วย
extractAll )แยกรายการข้อมูลจากเพจ และรันขั้นตอนที่กำหนดสำหรับแต่ละรายการ โดยทั่วไปจะใช้เพื่อวนซ้ำรายการใบแจ้งหนี้และดาวน์โหลด
สำหรับแต่ละองค์ประกอบที่ตรงกับ selector ฟิลด์ต่างๆ จะถูกแยกและจัดเก็บไว้ใน variable ที่มีอยู่ใน forEach ขั้นตอน
น่ารู้ :
ตัวเลือกแต่ละตัวภายในวัตถุ fields จะถูกกำหนดขอบเขตไปยังองค์ประกอบที่ตรงกันโดยอัตโนมัติ
ฟิลด์ variable เป็นทางเลือก หากไม่ได้ระบุไว้ ข้อมูลที่แยกออกมาจะถูกจัดเก็บไว้ใน item ตัวแปรเริ่มต้น
ดัชนีปัจจุบันสามารถเข้าถึงได้โดยใช้ตัวยึดตำแหน่ง {{index}} เริ่มต้นที่ 0 และเพิ่มขึ้นสำหรับแต่ละรายการ
ด้วยฟิลด์ CSS:
{ "action": "extractAll", "selector": ".invoice-list .invoice-item", "variable": "invoice", "fields": { "id": "td.invoice-id", " date": "td.invoice-date", "total": "td.invoice-total", "url": { "ตัวเลือก": "a.invoice-link", "attribute": "href"
-
}, "สำหรับแต่ละ": [
{ "action": "นำทาง", "url": "{{invoice.url}}"
-
{ "action": "downloadPdf", "ใบแจ้งหนี้": "{{ใบแจ้งหนี้}}"
-
-
-ด้วยจาวาสคริปต์:
เมื่อใช้ JavaScript ผลลัพธ์ควรเป็นอาร์เรย์ของวัตถุหรือค่า หากผลลัพธ์คือคำมั่นสัญญาก็จะรอคอย
{ "action": "extractAll", "script": "Array.from(document.querySelectorAll('#year-selector option')).map(option => option.value);", "variable": "ปี "," สำหรับแต่ละอัน": [
{ "action": "dropdownSelect", "selector": #year-selector", "value": "{{year}}"
-
-
-การแบ่งหน้า
การสนับสนุนการทดลอง ยังไม่มีการจัดทำเป็นเอกสาร
ขั้นตอนเหล่านี้ใช้เพื่อดาวน์โหลดเอกสารและประมวลผลใน Invoice Radar ทุกขั้นตอนจำเป็นต้องส่งออบเจ็กต์ document เป็นอาร์กิวเมนต์ ซึ่งประกอบด้วยข้อมูลเมตาของเอกสาร
อาร์กิวเมนต์ document มีฟิลด์ต่อไปนี้:
ที่จำเป็น
id : ID เอกสารที่ไม่ซ้ำกัน
เช่น INV-123 หรือ 123456
date : วันที่ในใบแจ้งหนี้เป็นสตริง
เช่น 2022-01-01 หรือ 01/01/2022 หรือ January 1, 2022
ที่แนะนำ
total : จำนวนเงินรวมของใบแจ้งหนี้รวมถึงสกุลเงิน
เช่น $100.00 หรือ €100.00 หรือ 100 EUR หรือ 100,00€
ตัวแยกวิเคราะห์ในตัวจะพยายามแยกจำนวนเงินและสกุลเงินออกจากสตริง
ไม่จำเป็น
type : ประเภทของเอกสาร (ไม่บังคับ ค่าเริ่มต้นเป็น auto )
สามารถตั้งค่าเป็น auto , invoice , receipt , refund หรือ other
metadata : ข้อมูลเมตาเพิ่มเติมสำหรับเอกสาร (ไม่บังคับ)
เช่น { "orderNumber": "12345" }
คุณสามารถส่งแต่ละฟิลด์แยกกันหรือส่งทั้งออบเจ็กต์ได้หากมีฟิลด์ที่จำเป็นทั้งหมด
เช่นการใช้ช่องแยก:
"document": { "id": "{{item.invoiceId}}", "date": "{{item.date}}", "total": "{{item.amount}} {{item.currency }}", "type": "ใบแจ้งหนี้"}เช่น หากออบเจ็กต์มีช่องที่ต้องกรอกทั้งหมด คุณสามารถส่งผ่านโดยตรงได้:
"เอกสาร": "{{item}}"downloadPdf )ดาวน์โหลดไฟล์ PDF จาก URL ที่กำหนด
{ "action": "downloadPdf", "url": "https://example.com/invoice.pdf", "document": { "id": "{{item.invoiceId}}", "date": "{{item.date}}", "รวม": "{{item.total}}"
-
-waitForPdfDownload )รอดาวน์โหลดไฟล์ PDF การหมดเวลามีค่าเริ่มต้นอยู่ที่ 15 วินาที
{ "action": "waitForPdfDownload", "หมดเวลา": 10,000, "document": { "id": "{{item.invoiceId}}", "date": "{{item.date}}", "total ": "{{item.total}}"
-
-printPdf )พิมพ์หน้าปัจจุบันเป็นไฟล์ PDF
{ "action": "printPdf", "document": { "id": "{{item.invoiceId}}", "date": "{{item.date}}", "total": "{{item" .ทั้งหมด}}"
-
-downloadBase64Pdf )ดาวน์โหลดไฟล์ PDF จากสตริงที่เข้ารหัส base64
{ "action": "downloadBase64Pdf", "base64": "{{item.base64String}}", "document": { "id": "{{item.invoiceId}}", "date": "{{item" .date}}", "รวม": "{{item.total}}"
-
-if ) รันขั้นตอนที่กำหนดหากเงื่อนไขเป็นจริง หากเงื่อนไขเป็นเท็จ ขั้นตอน else จะถูกดำเนินการ
{ "action": "if", "script": "'{{invoice.url}}'.includes('pdf')", "แล้ว": [
{ "การกระทำ": "คลิก", "ตัวเลือก": "#ตัวอย่าง"
-
], "อื่น": [
{ "การกระทำ": "นำทาง", "url": "https://example.com/fallback"
-
-
-sleep )รอตามระยะเวลาที่กำหนดในหน่วยมิลลิวินาที โดยทั่วไปไม่แนะนำสิ่งนี้ ในกรณีส่วนใหญ่ ควรใช้ขั้นตอน waitForElement, waitForURL หรือ waitForNetworkIdle
{ "การกระทำ": "สลีป", "ระยะเวลา": 1,000}ตัวอย่างคือชุดขั้นตอนที่สร้างไว้ล่วงหน้าซึ่งทำให้งานทั่วไปง่ายขึ้น ขั้นตอนสำหรับตัวอย่างข้อมูลเฉพาะจะมองเห็นได้ในเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์
ขณะนี้ยังไม่สามารถสร้างตัวอย่างข้อมูลที่กำหนดเองได้ หากคุณมีงานทั่วไปที่คุณคิดว่าจะเป็นประโยชน์ในฐานะตัวอย่างข้อมูล โปรดสร้างปัญหาบน GitHub
getInvoiceFromStripeUrl )แยกใบแจ้งหนี้ออกจาก URL ใบแจ้งหนี้ Stripe
{ "การกระทำ": "runSnippet", "ตัวอย่าง": "getInvoiceFromStripeUrl", "args": { "url": "https://invoice.stripe.com/i/inv_123"
-
-getInvoicesFromStripeBillingPortal )แยกใบแจ้งหนี้ที่มีอยู่จากพอร์ทัลการเรียกเก็บเงิน Stripe
{ "action": "runSnippet", "snippet": "getInvoicesFromStripeBillingPortal", "args": { "url": "https://stripe-portal.example.com/billing"
-
- บางครั้ง คุณอาจต้องเรียกใช้คำขอดึงข้อมูลภายในขั้นตอนเพื่อดึงข้อมูลจาก API เมื่อต้องการทำเช่นนี้ คุณสามารถใช้การดำเนินการ extractAll
{ "action": "extractAll", "variable": "invoice", "script": "fetch('https://example.com/api/invoices').then(res => res.json()) " "สำหรับแต่ละ": [
{ "action": "downloadPdf", "url": "{{invoice.url}}", "document": { "id": "{{invoice.id}}", "date": "{{ใบแจ้งหนี้ .date}}", "รวม": "{{invoice.total}}"
-
-
-
-สิ่งนี้จะเรียกใช้คำขอดึงข้อมูลและส่งคืนผลลัพธ์เป็นอ็อบเจ็กต์ JavaScript
<iframe/> ในบางสถานการณ์ คุณอาจต้องเรียกใช้ขั้นตอนภายในองค์ประกอบ <iframe/> เมื่อต้องการทำเช่นนี้ คุณสามารถใช้แอตทริบิวต์ iframe ในขั้นตอนนี้ได้
{ "action": "คลิก", "selector": "#button-inside-iframe", "iframe": true}, ด้วยการตั้งค่า iframe เป็น true Invoice Radar จะค้นหาองค์ประกอบ <iframe/> แรกบนหน้าและดำเนินการขั้นตอนภายในนั้น
คุณยังสามารถใช้สตริงที่มีอยู่ภายในแอตทริบิวต์ src ของ iframe เพื่อกำหนดเป้าหมาย iframe ที่ต้องการได้
{ "action": "คลิก", "selector": "#button-inside-iframe", "iframe": "iframe.example.com"},