Cách tự động điền vào biểu mẫu web bằng Python

0
3442

Python là một ngôn ngữ lập trình tuyệt vời và dễ học có thể giúp bạn tự động hóa các tác vụ hàng ngày và làm cho cuộc sống của bạn dễ dàng hơn.

Bạn đã bao giờ gặp phải trường hợp cần điền vào một số biểu mẫu trực tuyến và làm điều này nhiều lần mỗi ngày chưa? Nếu vậy, Python có thể giúp bạn tự động hóa hầu hết các tác vụ tẻ nhạt này. Hãy tham gia cùng tôi trong hành trình này để tìm hiểu cách một tập lệnh Python đơn giản có thể tự động hóa việc nhập dữ liệu trực tuyến.

Có, bạn có thể sử dụng Python để tự động điền vào biểu mẫu trực tuyến.

Tải xuống Dự án đã hoàn thành 

Trước khi chúng ta bắt đầu, đây là tập lệnh Python hoàn chỉnh , cũng như biểu mẫu web mà tôi sẽ tham khảo.

Cách trích xuất dữ liệu từ PDF bằng Python

Ba loại định dạng PDF 

1. Ví dụ về PDF dựa trên văn bản

Có ba cách dữ liệu có thể được lưu trữ trong PDF. Cách phổ biến nhất là sử dụng dữ liệu dưới dạng văn bản trong tệp PDF, được gọi là PDF dựa trên văn bản .

Trong trường hợp này, PDF chỉ là tài liệu không có cấu trúc (không có bố cục cụ thể, tức là thủ công) hoặc tài liệu bán cấu trúc (tuân theo bố cục, tức là hóa đơn) trong đó dữ liệu chỉ đơn giản là văn bản nằm bên trong chính tệp PDF, có thể nhìn thấy bằng mắt người và có thể đọc được. Dưới đây là một ví dụ.

Định dạng PDF dựa trên hình ảnh

Một loại tệp PDF phổ biến khác được gọi là PDF dựa trên hình ảnh . Đây là những tệp PDF được quét theo đúng nghĩa đen của tài liệu giấy. Văn bản có thể nhìn thấy và đọc được bằng mắt người thực sự là một phần của hình ảnh và chỉ có thể được trích xuất bằng cách sử dụng Nhận dạng ký tự quang học (OCR).

Việc trích xuất thông tin văn bản có trong các tệp PDF này khó hơn vì cần có các công cụ OCR chuyên dụng, điều này cũng không phải lúc nào cũng đảm bảo rằng văn bản được trích xuất có thể đọc được hoàn toàn, vì kết quả phụ thuộc vào chất lượng của hình ảnh nhúng đã được quét.  

Bên cạnh đó, có thể hình ảnh được quét trong PDF không đúng hướng, điều này khiến quá trình trích xuất bất kỳ dữ liệu nào trở nên khó khăn hơn. Dưới đây là một ví dụ về tài liệu như vậy, đơn giản là một hình ảnh được quét sai hướng, được nhúng trong một tệp PDF.

Định dạng biểu mẫu PDF

Cuối cùng, có một loại tệp PDF thứ ba không phải loại này hay loại khác. Thông tin có trong loại tệp PDF này là dữ liệu được lưu trong các trường PDF nội bộ. Loại tài liệu này được gọi là Biểu mẫu PDF .

Có thể dễ dàng tạo các biểu mẫu PDF bằng phần mềm chuyên dụng như Adobe Acrobat hoặc PDFelement .

Chạy Tập lệnh điền biểu mẫu Python

Trước khi bắt đầu, chúng ta hãy xem một ví dụ về phần mềm cho vay thế chấp trực tuyến mà chúng tôi sẽ thực hiện. Đây là cách thư mục của tôi trông: Nó chứa tập lệnh Python, các tệp .ini và tài liệu biểu mẫu PDF với dữ liệu của người đăng ký.

Đây là cách biểu mẫu trực tuyến đơn xin thế chấp trực tuyến (trống) trông như thế nào.

Nếu tôi thực thi tập lệnh Python (.py), tôi thấy rằng tệp .txt có cùng tên với tệp biểu mẫu PDF được tạo trong thư mục chứa tập lệnh Python.

Tiếp theo, hãy mở tệp mã JavaScript (.txt) đã tạo và sao chép tất cả mã có trong nó.

Bây giờ, quay lại biểu mẫu trực tuyến trên trình duyệt, hãy mở Công cụ dành cho nhà phát triển, sau đó đi tới tab Bảng điều khiển và dán mã đã sao chép vào.

Với mã đã được dán, chỉ cần nhấn enter (với tiêu điểm bên trong tab Bảng điều khiển). Sau đó, biểu mẫu trực tuyến sẽ được tự động điền, với cùng dữ liệu có trong tài liệu biểu mẫu PDF.

Chúng tôi có thể kiểm tra xem dữ liệu được điền vào biểu mẫu trực tuyến có thực sự giống với dữ liệu trên tài liệu biểu mẫu PDF hay không.

Tạo PDF từ Scratch

Một trong những điểm khó khăn liên quan đến hai loại tài liệu PDF đầu tiên được mô tả ( PDF dựa trên văn bảnPDF dựa trên hình ảnh ) là thông tin có trong bản thân PDF không được sắp xếp.

Điều này có nghĩa là ngay cả khi chúng tôi có thể trích xuất văn bản bằng cách đọc các dòng PDF theo chương trình hoặc bằng cách thực hiện thao tác OCR trên hình ảnh được nhúng trong tệp PDF có chứa văn bản, chúng tôi vẫn cần hiểu về văn bản được trích xuất kết quả đó.

Tất cả văn bản đó sẽ chỉ là những từ trong dòng hoặc câu nếu chúng ta không thể cung cấp bất kỳ ý nghĩa nào cho nó. Hiểu cách tìm tổng số tiền trên hóa đơn trong các dòng văn bản có chứa nhiều số không phải là một kỳ công dễ dàng và quá trình như vậy đòi hỏi một mức độ thông minh thuật toán nhất định.

Vì vậy, bước đầu tiên để tự động hóa quá trình thu thập dữ liệu là thay đổi cách mọi người gửi thông tin của họ.

Thay vì yêu cầu mọi người gửi bản scan tài liệu giấy của họ hoặc bất kỳ phiên bản PDF nào của thư xin việc được scan khi đăng ký thế chấp, tại sao họ không điền dữ liệu cho bạn bằng cách sử dụng biểu mẫu PDF?

Để hiểu điều này thực sự có ý nghĩa gì, hãy xem tài liệu dạng PDF sau đây.

Tài liệu này là một tệp PDF, giống như bất kỳ tệp PDF nào khác, với một sự khác biệt nhỏ nhưng quan trọng. Nó chứa các hộp văn bản có thể chỉnh sửa (trường) nơi dữ liệu có thể được nhập vào. Trong ví dụ cụ thể này, đây là một biểu mẫu PDF giới thiệu khách hàng mới có thể được gửi qua email, sau khi được người đăng ký điền thủ công.

Vì vậy, thay vì yêu cầu người nộp đơn gửi thông tin của họ dưới dạng tài liệu được quét, hãy để họ điền vào tất cả các thông tin cần thiết bằng cách sử dụng biểu mẫu PDF, điều này đã giúp tiết kiệm 90% hoặc hơn thời gian cần thiết để thu thập dữ liệu cho việc đăng ký khoản vay thế chấp.

Tạo tài liệu dạng PDF là một quá trình rất đơn giản và video này mô tả các bước liên quan.

Về bản chất, có một biểu mẫu PDF là một cách tuyệt vời để người nộp đơn gửi thông tin dễ dàng hơn để trích xuất và xử lý. Đối với người bạn cố vấn tài chính của tôi, đây là lựa chọn mà tôi đã đề xuất.

Tự động hóa quy trình trích xuất dữ liệu PDF

Đối với kịch bản trong thế giới thực của chúng tôi, chúng tôi đã đạt được một cột mốc quan trọng, đó là có dữ liệu được tổ chức và cấu trúc độc đáo. Đây là lý do tại sao biểu mẫu PDF là một cách tuyệt vời để thu thập dữ liệu.

Bước tiếp theo là viết một số mã Python, có thể trích xuất dữ liệu có trong tài liệu biểu mẫu PDF và tạo một tập lệnh JavaScript sau đó có thể được thực thi trong tab Bảng điều khiển của trình duyệt Công cụ dành cho nhà phát triển để tự động điền vào biểu mẫu trực tuyến. Để hiểu rõ hơn về toàn bộ quá trình, chúng ta hãy xem sơ đồ sau.

Vì vậy, về bản chất, tài liệu dạng PDF được đưa qua tập lệnh Python và tập lệnh này đọc nội dung của tài liệu và kiểm tra từng trường. Sau đó, đối với mỗi trường, giá trị của trường được trích xuất và một tập lệnh JavaScript được tạo, có chứa tên của trường trực tuyến (web) tương đương.

Tập lệnh JavaScript này có thể được thực thi (trên biểu mẫu trực tuyến mà chúng tôi muốn tự động điền vào) với dữ liệu được trích xuất từ ​​tài liệu biểu mẫu PDF, bằng cách mở Công cụ dành cho nhà phát triển của trình duyệt và sau đó chạy tập lệnh JavaScript bằng tab Bảng điều khiển.

Tập lệnh JavaScript sẽ tự động điền vào giá trị của các trường của biểu mẫu trực tuyến. Để tất cả điều này hoạt động bình thường, điều cần thiết là mỗi trường trong tài liệu biểu mẫu PDF tương ứng với một trường trong biểu mẫu trực tuyến.

Để đảm bảo rằng trường hợp này xảy ra, bạn nên thực hiện (khi tạo tài liệu biểu mẫu PDF) là đặt tên cho từng trường, tên giống như được tìm thấy trên thẻ id của trường trực tuyến tương ứng.

Vì vậy, trước khi tạo tài liệu dạng PDF, bạn phải kiểm tra bằng trình duyệt tên của từng trường trực tuyến. Điều này được thực hiện bằng cách truy xuất giá trị của thẻ id của phần tử HTML tương ứng với trường.  

Các giá trị id tương tự được truy xuất cho mỗi trường là những gì bạn sẽ sử dụng để đặt tên cho từng trường biểu mẫu PDF, cho tài liệu PDF mà bạn sẽ tạo (để người dùng của bạn điền vào sau này).

Vì vậy, bây giờ chúng ta đã xem xét cách thức hoạt động của quy trình Tự động trích xuất dữ liệu, điều quan trọng cần lưu ý là để đạt được nó, cần có các bước thiết yếu liên quan:

1. Kiểm tra (các) biểu mẫu trực tuyến nào bạn muốn tự động hóa. Nhận các id thẻ của từng lĩnh vực mà bạn muốn tự động điền vào bằng cách sử dụng kịch bản JavaScript mà kịch bản Python sẽ tạo ra, bằng cách kiểm tra các yếu tố HTML của từng lĩnh vực tương ứng của mẫu đơn trực tuyến (s).

2. Mở Notepad hoặc bất kỳ trình soạn thảo văn bản nào khác và lưu (để bạn tham khảo) các thẻ id đó được tập hợp vào tệp văn bản (.txt) và đặt tên cho tệp này, tức là fields.txt . Tệp này chỉ dành cho mục đích tham khảo và sẽ không bị thao tác bởi tập lệnh Python. Bạn sẽ cần những tên trường này khi tạo và thiết kế biểu mẫu PDF của mình bằng Adobe Acrobat hoặc PDFelement.

3. Nếu biểu mẫu trực tuyến của bạn có các trường là các trường có thể chọn (với menu thả xuống) thì hãy lấy thẻ id của từng trường này và thêm chúng vào tệp .ini (văn bản). Lưu tệp này với cùng tên mà bạn sẽ sử dụng cho tập lệnh Python của mình.

4. Nếu biểu mẫu trực tuyến của bạn có các trường có thể được kiểm tra, tức là các nút radio và các trường hộp kiểm, thì hãy lấy thẻ id của từng trường này và thêm chúng vào tệp .ini (văn bản) khác. Lưu tệp này với tên giống như bạn sẽ sử dụng cho tập lệnh Python và thêm hậu tố _ext vào nó, trước khi thêm phần mở rộng .ini.

Khi các bước này đã được thực hiện xong, chúng tôi đã sẵn sàng để viết tập lệnh Python của mình.

Viết tập lệnh Python

Tập lệnh Python là trái tim và linh hồn của toàn bộ quá trình. Đó là nơi điều kỳ diệu xảy ra. Nó lấy một tài liệu dạng PDF, đọc nội dung của nó, xác định từng trường với giá trị tương ứng và tạo một tập lệnh JavaScript mà sau đó bạn có thể sử dụng trên trình duyệt để tự động điền vào biểu mẫu trực tuyến của mình.

Nếu bạn cần nhập các dữ liệu khác nhau vào cùng một biểu mẫu trực tuyến theo cách thủ công nhiều lần trong ngày, thì việc có tập lệnh này có thể là một công cụ tiết kiệm thời gian vô giá.

Đưa bạn tôi làm cố vấn tài chính, người phải nhập dữ liệu khoản vay thế chấp vào cùng một biểu mẫu trực tuyến, cho những người nộp đơn khác nhau, đôi khi lên đến 30 lần một ngày.

“Tôi là cố vấn tài chính giúp mọi người thu xếp các khoản vay thế chấp. Quá trình nhập tất cả dữ liệu này theo cách thủ công, đối với mỗi người nộp đơn, là một quá trình tẻ nhạt, dễ xảy ra lỗi và tốn thời gian, mất nhiều giờ để hoàn thành. Nếu tôi học Python, tôi có thể viết một script để tự động điền vào các biểu mẫu trực tuyến không? – Mike ”

Hãy tưởng tượng việc nhập dữ liệu theo cách thủ công cho một biểu mẫu có ít nhất 20 trường cho mỗi người. Sau đó, hãy tưởng tượng làm điều đó 30 lần một ngày. Đó là 600 trường mỗi ngày cần được nhập thủ công. Không phải là một công việc mà tôi sẽ hào hứng làm.

Vậy ở cấp độ cao, tập lệnh Python hoạt động như thế nào? Về cơ bản, script thực hiện ba điều:

  1. Nó xác định tất cả các trường tồn tại trong tài liệu biểu mẫu PDF.
  2. Bằng cách kiểm tra tệp .ini có cùng tên với tập lệnh Python, nó có thể xác định các trường nào bao gồm menu thả xuống có thể chọn có thể chứa nhiều phản hồi có thể có. Đây là một điểm khác biệt quan trọng khi tạo mã JavaScript. Tệp có thể để trống nếu không có trường có thể chọn.
  3. Bằng cách kiểm tra tệp _ext.ini có cùng tên với tập lệnh Python, nó có thể xác định trường nào là trường nút radio hoặc trường hộp kiểm. Đây là một điểm khác biệt quan trọng khác khi tạo mã JavaScript. Tệp có thể để trống nếu không có nút radio hoặc trường hộp kiểm.

Vì vậy, chúng ta hãy xem toàn bộ tập lệnh Python và sau đó chia nó thành các phần nhỏ hơn để hiểu rõ hơn. Tất cả mã được viết bằng Python phiên bản 3.6 hoặc cao hơn. Bạn có thể tải xuống Python từ trang web chính thức .

nhập hệ điều hành
nhập hệ thống
từ bộ sưu tập nhập OrderedDict
từ PyPDF2 nhập PdfFileReader
def _getFields (obj, tree = None, retval = None, fileobj = None):
fieldAttributes = {'/ FT': 'Loại trường', '/ Parent': 'Parent', '/ T': 'Tên trường',
'/ TU': 'Tên trường thay thế', '/ TM': 'Tên ánh xạ', '/ Ff': 'Cờ trường',
'/ V': 'Giá trị', '/ DV': 'Giá trị mặc định'}
nếu kiểm tra lại là Không có:
retval = OrderedDict ()
catalog = obj.trailer ["/ Root"]
if "/ AcroForm" trong danh mục:
tree = catalog ["/ AcroForm"]
khác:
trả lại Không có
nếu cây là Không:
phản hồi trở lại
obj._checkKids (cây, retval, fileobj)
cho phần đính kèm trong trường
    nếu attr trong cây:
        obj._buildField (cây, retval, fileobj, fieldAttributes)
        phá vỡ

if "/ Fields" trong cây:
    fields = tree ["/ Fields"]
    cho f trong các trường:
        field = f.getObject ()
        obj._buildField (field, retval, fileobj, fieldAttributes)

phản hồi trở lại
def get_form_fields (infile):
infile = PdfFileReader (open (infile, 'rb'))
fields = _getFields (infile)
return OrderedDict ((k, v.get ('/ V', '')) cho k, v trong fields.items ())
def selectListOption (all_lines, k, v):
all_lines.append ('function setSelectedIndex (s, v) {')
all_lines.append ('for (var i = 0; i <s.options.length; i ++) {')
all_lines.append ('if (s.options [i] .text == v) {')
all_lines.append ('s.options [i] .selected = true;')
all_lines.append ('return;')
all_lines.append ('}')
all_lines.append ('}')
all_lines.append ('}')
all_lines.append ('setSelectedIndex (document.getElementById ("' + k + '"), "' + v + '");')
def readList (fname):
lst = []
với open (fname, 'r') là fh:
cho tôi trong fh:
lst.append (l.rstrip (os.linesep))
trở lại lst
def createBrowserScript (fl, fl_ext, items, pdf_file_name):
nếu pdf_file_name và len (fl)> 0:
of = os.path.splitext (pdf_file_name) [0] + '.txt'
all_lines = []
cho k, v trong items.items ():
print (k + '->' + v)
if (v in ['/ Yes', '/ On']):
all_lines.append ("document.getElementById ('" + k + "') .checked = true; \ n");
elif (v trong ['/ 0'] và k trong fl_ext):
all_lines.append ("document.getElementById ('" + k + "') .checked = true; \ n");
elif (v in ['/ No', '/ Off', '']):
all_lines.append ("document.getElementById ('" + k + "') .checked = false; \ n");
elif (v trong [''] và k trong fl_ext):
all_lines.append ("document.getElementById ('" + k + "') .checked = false; \ n");
elif (k tính bằng fl):
selectListOption (all_lines, k, v)
khác:
all_lines.append ("document.getElementById ('" + k + "') .value = '" + v + "'; \ n");
outF = open (of, 'w')
outF.writelines (all_lines)
outF.close ()
def thi hành (args):
thử:
fl = readList ('myview.ini')
fl_ext = readList ('myview_ext.ini')
if len (args) == 2:
pdf_file_name = args [1]
items = get_form_fields (pdf_file_name)
createBrowserScript (fl, fl_ext, items, pdf_file_name)
khác:
files = [f for f in os.listdir ('.') if os.path.isfile (f) and f.endswith ('. pdf')]
cho f trong các tệp:
items = get_form_fields (f)
createBrowserScript (fl, fl_ext, items, f)
ngoại trừ BaseException dưới dạng msg:
print ('Đã xảy ra lỗi … :(' + str (msg))
if name == 'main':
từ pprint nhập pprint
thực thi (sys.argv)

Nhập thư viện Python của chúng tôi

Vì vậy, chúng ta hãy bắt đầu ngay từ đầu. Để mọi thứ xảy ra, chúng ta sẽ cần sử dụng một số thư viện Python.

nhập hệ điều hành 
nhập hệ thống
từ bộ sưu tập nhập OrderedDict
từ PyPDF2 nhập PdfFileReader

Mọi thư viện đều là tiêu chuẩn, ngoại trừ thư viện PyPDF2.  

Các PyPDF2 thư viện là cần thiết để có thể đọc các tài liệu dạng PDF. Thư viện này có thể được cài đặt bằng lệnh sau:

pip cài đặt PyPDF2

Hướng dẫn từng bước để đọc các trường PDF

Tiếp theo chúng ta có hàm _getFields . Mục tiêu của chức năng này là đọc các trường trong bất kỳ tài liệu dạng PDF nào bằng cách kiểm tra cây trường của tài liệu. Điều này đạt được bằng cách sử dụng đoạn mã sau.

def _getFields (obj, tree = None, retval = None, fileobj = None):
fieldAttributes = {'/ FT': 'Loại trường', '/ Parent': 'Parent', '/ T': 'Tên trường',
'/ TU': 'Tên trường thay thế', '/ TM': 'Tên ánh xạ', '/ Ff': 'Cờ trường',
'/ V': 'Giá trị', '/ DV': 'Giá trị mặc định'}
nếu kiểm tra lại là Không có:
retval = OrderedDict ()
catalog = obj.trailer ["/ Root"]
if "/ AcroForm" trong danh mục:
tree = catalog ["/ AcroForm"]
khác:
trả lại Không có
nếu cây là Không:
phản hồi trở lại
obj._checkKids (cây, retval, fileobj)
cho phần đính kèm trong trường
    nếu attr trong cây:
        obj._buildField (cây, retval, fileobj, fieldAttributes)
        phá vỡ

if "/ Fields" trong cây:
    fields = tree ["/ Fields"]
    cho f trong các trường:
        field = f.getObject ()
        obj._buildField (field, retval, fileobj, fieldAttributes)

phản hồi trở lại

Về bản chất, mã này làm là xem nút gốc của tài liệu ( / Root ) và sau đó lặp qua các trường được tìm thấy dưới cây trường ( / Fields ), lấy giá trị đối tượng trường bằng cách kiểm tra trường thông qua các thuộc tính trường cụ thể.

Thuộc tính trường được tài liệu biểu mẫu PDF sử dụng nội bộ để mô tả cách cấu trúc các trường. Bằng cách sử dụng các thuộc tính trường, có thể xác định tên trường, giá trị trường và bất kỳ cờ hoặc giá trị mặc định nào mà trường có thể có.

Tiếp theo, chúng ta có hàm get_form_fields .

def get_form_fields (infile):
infile = PdfFileReader (open (infile, 'rb'))
fields = _getFields (infile)
return OrderedDict ((k, v.get ('/ V', '')) cho k, v trong fields.items ())

Hàm này chỉ đơn giản là đọc tài liệu dạng PDF và sau đó gọi hàm _getFields và nó trả về tất cả các giá trị trường ( / V ) có trong tệp biểu mẫu PDF đã đọc, dưới dạng một từ điển có thứ tự.

Tiếp theo, chúng ta có chức năng selectListOption .

def selectListOption (all_lines, k, v):
all_lines.append ('function setSelectedIndex (s, v) {')
all_lines.append ('for (var i = 0; i <s.options.length; i ++) {')
all_lines.append ('if (s.options [i] .text == v) {')
all_lines.append ('s.options [i] .selected = true;')
all_lines.append ('return;')
all_lines.append ('}')
all_lines.append ('}')
all_lines.append ('}')
all_lines.append ('setSelectedIndex (document.getElementById ("' + k + '"), "' + v + '");')

Hàm này chỉ đơn giản là tạo một hàm JavaScript có khả năng chọn trong thời gian chạy (khi tập lệnh JavaScript được sao chép vào cửa sổ Bảng điều khiển của các công cụ dành cho nhà phát triển trình duyệt và được thực thi), tùy chọn thả xuống chính xác dành cho trường biểu mẫu trực tuyến, tương ứng với giá trị có trong trường biểu mẫu PDF tương đương.

Tiếp theo chúng ta có hàm readList .

def readList (fname):
lst = []
với open (fname, 'r') là fh:
cho tôi trong fh:
lst.append (l.rstrip (os.linesep))
trở lại lst

Chức năng này chỉ được sử dụng để đọc các tệp .ini mà chúng ta có thể có, cho các trường nút radio và hộp kiểm có thể chọn.

Tiếp theo chúng ta có chức năng createBrowserScript .

def createBrowserScript (fl, fl_ext, items, pdf_file_name):
nếu pdf_file_name và len (fl)> 0:
of = os.path.splitext (pdf_file_name) [0] + '.txt'
all_lines = []
cho k, v trong items.items ():
print (k + '->' + v)
if (v in ['/ Yes', '/ On']):
all_lines.append ("document.getElementById ('" + k + "') .checked = true; \ n");
elif (v trong ['/ 0'] và k trong fl_ext):
all_lines.append ("document.getElementById ('" + k + "') .checked = true; \ n");
elif (v in ['/ No', '/ Off', '']):
all_lines.append ("document.getElementById ('" + k + "') .checked = false; \ n");
elif (v trong [''] và k trong fl_ext):
all_lines.append ("document.getElementById ('" + k + "') .checked = false; \ n");
elif (k tính bằng fl):
selectListOption (all_lines, k, v)
khác:
all_lines.append ("document.getElementById ('" + k + "') .value = '" + v + "'; \ n");
outF = open (of, 'w')
outF.writelines (all_lines)
outF.close ()

Hàm này là phần chính của tập lệnh Python. Nó chịu trách nhiệm tạo tập lệnh JavaScript sẽ được thực thi trên trình duyệt.

Về cơ bản, nó đi qua tất cả các trường biểu mẫu PDF và tạo cho mỗi mã JavaScript tương ứng mà khi được thực thi, sẽ có thể tự động điền vào giá trị của trường trực tuyến tương ứng, tùy thuộc vào trường đó có phải là trường thông thường, trường có thể chọn hay không. -nút hoặc hộp kiểm.

Hàm lưu tập lệnh JavaScript vào cùng thư mục mà tập lệnh Python chạy từ đó (và cũng là nơi chứa các tệp .ini). Tập lệnh JavaScript này được lưu cùng tên với tên của tài liệu biểu mẫu PDF đầu vào được cung cấp cho tập lệnh Python.

Vì vậy, nếu tệp biểu mẫu PDF đầu vào được gọi là form_1.pdf , thì tệp kịch bản JavaScript kết quả sẽ được gọi là form_1.txt . Lưu ý rằng phần mở rộng .txt được ưu tiên hơn thay vì phần mở rộng .js.

Điều này để mã JavaScript được tạo có thể được mở bằng trình soạn thảo văn bản và dễ dàng sao chép vào Bảng tạm, sau đó được dán vào cửa sổ Bảng điều khiển dành cho nhà phát triển của trình duyệt để được thực thi, bằng cách nhấn enter.

Chức năng Thực thi Cuối cùng đã sẵn sàng!

Cuối cùng, chúng ta phải thực thi hàm.

def thi hành (args):
thử:
fl = readList ('myview.ini')
fl_ext = readList ('myview_ext.ini')
if len (args) == 2:
pdf_file_name = args [1]
items = get_form_fields (pdf_file_name)
createBrowserScript (fl, fl_ext, items, pdf_file_name)
khác:
files = [f for f in os.listdir ('.') if os.path.isfile (f) and f.endswith ('. pdf')]
cho f trong các tệp:
items = get_form_fields (f)
createBrowserScript (fl, fl_ext, items, f)
ngoại trừ BaseException dưới dạng msg:
print ('Đã xảy ra lỗi … :(' + str (msg))

Hàm này, như tên gọi của nó, về cơ bản thực thi phần còn lại của các hàm script Python đã được mô tả.

Nó bắt đầu bằng cách đọc các tệp .ini và sau đó nó có thể tạo tệp kịch bản JavaScript tương ứng (với phần mở rộng .txt) cho tên của tệp biểu mẫu PDF được chuyển đến tập lệnh Python hoặc cho mỗi tài liệu biểu mẫu PDF được tìm thấy trong cùng một thư mục chứa tập lệnh Python, nó sẽ tạo tệp tập lệnh JavaScript tương ứng (với phần mở rộng .txt).

Vì vậy, bạn có thể thực thi tập lệnh Python bằng cách chuyển tên tài liệu dạng PDF làm tham số cho nó hoặc bạn không chuyển bất kỳ tham số nào cho tập lệnh Python và tập lệnh sẽ đọc từ thư mục chứa nó, tên của mỗi Tài liệu dạng PDF và tạo tệp JavaScript script (.txt) tương ứng.

Nếu chúng ta có một thư mục chứa hai tài liệu dạng PDF và trong đó có cả tập lệnh Python và tệp .ini của chúng ta, thì sau khi thực thi tập lệnh Python mà không có bất kỳ tham số nào, chúng ta có thể mong đợi hai tệp .txt kết quả, một tệp cho mỗi tài liệu dạng PDF.

Mỗi tệp tập lệnh JavaScript (.txt) kết quả có thể được mở bằng trình soạn thảo văn bản, mã của nó được sao chép và sau đó bạn chỉ cần điều hướng trên trình duyệt của mình đến biểu mẫu trực tuyến mà bạn muốn điền vào, sau đó dán mã JavaScript đã sao chép vào Công cụ dành cho nhà phát triển Bảng điều khiển và nhấn enter để thực thi nó.

Sau đó, bạn sẽ tự động thấy các trường của biểu mẫu trực tuyến được điền đầy đủ các giá trị giống như các giá trị của tài liệu biểu mẫu PDF.

Bạn có thể mở tệp .txt kết quả khác bằng trình soạn thảo văn bản, sao chép mã vào khay nhớ tạm, điều hướng đến biểu mẫu trực tuyến tương ứng, mở Công cụ dành cho nhà phát triển và dán mã đã sao chép vào Bảng điều khiển, nhấn enter để thực thi. Vậy thì, các trường biểu mẫu trực tuyến sẽ được tự động điền. Thật tuyệt làm sao!

Phần kết luận

Chúng tôi đã hoàn thành một điều thực sự tuyệt vời, đó là cách trích xuất dữ liệu có trong bất kỳ tài liệu biểu mẫu PDF nào và tự động điền vào một biểu mẫu trực tuyến tương đương bằng cách sử dụng một tập lệnh Python tương đối nhỏ và không phức tạp.

Kỹ thuật tương tự được mô tả ở đây và tập lệnh Python chính xác có thể được sử dụng để loại bỏ việc nhập dữ liệu thủ công cho bất kỳ biểu mẫu trực tuyến nào, không chỉ ví dụ cụ thể trong thế giới thực này. Tập lệnh và quy trình Python đủ chung để hoạt động cho bất kỳ tài liệu PDF và biểu mẫu trực tuyến nào.  

Điều quan trọng là tạo thuận lợi cho quá trình thu thập dữ liệu bằng cách tạo các tài liệu biểu mẫu PDF có cùng tên trường với các trường có trên biểu mẫu trực tuyến mà bạn muốn tự động nhập dữ liệu thu được.

Nhìn chung, kỹ thuật tương đối đơn giản này nếu được áp dụng đúng cách có thể tiết kiệm thời gian rất lớn cho các tác vụ nhập dữ liệu trực tuyến tốn nhiều thời gian và thủ công.

Một lần nữa, bạn có thể tải xuống tập lệnh Python hoàn chỉnh , cũng như biểu mẫu web mà chúng tôi đã sử dụng để thử tất cả cho chính bạn!  

Hy vọng rằng bạn cũng có thể áp dụng kỹ thuật và kịch bản này trong công việc hàng ngày của mình, tiết kiệm thời gian quý báu và vui vẻ trên đường đi. Cảm ơn bạn đã đọc và cho đến lần sau.

Tham khảo khóa học Lập trình Python cho người mới