ยินดีต้อนรับสู่คู่มือปลั๊กอิน Invoice Radar สำหรับนักพัฒนา!
คู่มือนี้จะช่วยคุณสร้างปลั๊กอินแบบกำหนดเองเพื่อดึงใบแจ้งหนี้และใบเสร็จรับเงินจากแพลตฟอร์มต่างๆ
Invoice Radar เป็นเครื่องมืออัตโนมัติด้านเอกสารที่ช่วยให้คุณดึงข้อมูล ดาวน์โหลด และจัดระเบียบใบแจ้งหนี้และใบเสร็จรับเงินจากแพลตฟอร์มต่างๆ
เรียนรู้เพิ่มเติมเกี่ยวกับเรดาร์ใบแจ้งหนี้
การแนะนำ
เริ่มต้นใช้งาน
โครงสร้างปลั๊กอิน
การเขียนปลั๊กอินแรกของคุณ
รูปแบบที่เป็นประโยชน์
การอ้างอิงขั้นตอน
ความรู้พื้นฐานเกี่ยวกับ JSON, HTML, CSS และ JavaScript
โปรแกรมแก้ไขข้อความหรือ IDE (เช่น VSCode, Sublime Text)
ติดตั้ง Invoice Radar บน macOS หรือ Windows
ดาวน์โหลดและติดตั้งเรดาร์ใบแจ้งหนี้ :
ขอเข้าถึงเรดาร์ใบแจ้งหนี้
ดาวน์โหลดปลั๊กอินเปล่า :
ดาวน์โหลด Blank Plugin ลงในเครื่องของคุณ
เปลี่ยนชื่อไฟล์เป็น your-plugin-name.json
ใส่ลงในโฟลเดอร์ที่คุณเลือก
เพิ่มปลั๊กอินไปยัง Invoice Radar :
เปิดเรดาร์ใบแจ้งหนี้
ไปที่การตั้งค่าและเลือกแท็บ 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": { "selector": "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
ในขั้นตอนนี้ได้
{ "action": "คลิก", "selector": "#button-inside-iframe", "iframe": true},
ด้วยการตั้งค่า iframe
เป็น true
Invoice Radar จะค้นหาองค์ประกอบ แรกบนหน้าและดำเนินการขั้นตอนภายในนั้น
คุณยังสามารถใช้สตริงที่มีอยู่ภายในแอตทริบิวต์ src
ของ iframe เพื่อกำหนดเป้าหมาย iframe ที่ต้องการได้
{ "action": "คลิก", "selector": "#button-inside-iframe", "iframe": "iframe.example.com"},