Hướng dẫn python autofill web form - biểu mẫu web tự động điền python

Python rất tuyệt và là một ngôn ngữ lập trình dễ học có thể giúp bạn tự động hóa các tác vụ thường xuyên 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 một tình huống mà bạn 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? Nếu vậy, Python có thể giúp bạn tự động hóa hầu hết các nhiệm vụ tẻ nhạt này. Tham gia cùng tôi trên hành trình này để tìm hiểu làm thế nào một tập lệnh Python đơn giản có thể tự động hóa 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 & NBSP;

Trước khi chúng tôi bắt đầu, đây là tập lệnh Python đã hoàn thành, cũng như biểu mẫu web mà tôi tham khảo.completed Python script, as well as the web form I’ll reference.

Cách trích xuất dữ liệu từ PDF với Python

Ba loại định dạng PDF & NBSP;

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

Có ba cách dữ liệu có thể được lưu trữ trong PDF. & nbsp; Cách phổ biến nhất là có 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.Text-based PDF.

Trong trường hợp này, PDF không có gì khác hơn là một tài liệu không có cấu trúc (không có bố cục cụ thể, tức là một tài liệu hướng dẫn) hoặc tài liệu bán cấu trúc (phù hợp với 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 Bản thân 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ụ.

Hướng dẫn python autofill web form - biểu mẫu web tự động điền python

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

Một loại tệp PDF phổ biến khác là cái được gọi là PDF dựa trên hình ảnh. Đây là những tệp PDF được quét theo nghĩa đen được sao chép các tài liệu giấy. Văn bản có thể nhìn thấy và có thể đọc được cho 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 (OCR).Image-based PDFs. These are PDFs that are literally scanned copied of paper documents. The text that is visible and readable to the human eye is really part of the image and can only be extracted by using Optical Character Recognition (OCR).

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ác động cơ OCR chuyên dụng là bắt buộc, điều này cũng không luôn luôn đảm bảo rằng văn bản được trích xuất là hoàn toàn có thể đọc được, vì kết quả phụ thuộc vào chất lượng của hình ảnh nhúng được quét. & nbsp;

Bên cạnh đó, có thể hình ảnh được quét trong PDF không theo đúng hướng, điều này làm cho 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ề một tài liệu như vậy, chỉ đơn giản là một hình ảnh được quét với định hướng sai, được nhúng trong PDF.

Hướng dẫn python autofill web form - biểu mẫu web tự động điền python

Định dạng hình thức PDF

Cuối cùng, có một loại tệp PDF thứ ba mà cả hai hoặc cá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ộ. Những loại tài liệu này được gọi là các hình thức PDF.PDF Forms.

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

Chạy tập lệnh điền vào mẫu Python

Trước khi chúng tôi bắt đầu, hãy để Lừa 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 nộp đơn.

Hướng dẫn python autofill web form - biểu mẫu web tự động điền python

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

Hướng dẫn python autofill web form - biểu mẫu web tự động điền python

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

Hướng dẫn python autofill web form - biểu mẫu web tự động điền python

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

Hướng dẫn python autofill web form - biểu mẫu web tự động điền python

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

Hướng dẫn python autofill web form - biểu mẫu web tự động điền python

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 điền tự động, với cùng một dữ liệu có trong tài liệu biểu mẫu PDF.

Hướng dẫn python autofill web form - biểu mẫu web tự động điền python

Chúng ta 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 tài liệu trên biểu mẫu PDF không.

Hướng dẫn python autofill web form - biểu mẫu web tự động điền python

Tạo pdf từ đầu

Một trong những điểm đau 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ản và PDF dựa trên hình ảnh) là thông tin có trong bản thân PDF không được tổ chức.Text-based PDFs and Image-based PDFs) is that the information contained within the PDF itself is not organized.

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

Tất cả văn bản đó sẽ không có gì hơn là các từ trong các dòng hoặc câu nếu chúng ta không thể đưa ra bất kỳ ý nghĩa nào cho nó. Hiểu cách tìm tổng số lượng hóa đơn trong các dòng văn bản chứa nhiều số không phải là một kỳ công dễ dàng và một quy 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ì mọi người gửi các bản sao được quét các tài liệu giấy của họ hoặc bất kỳ phiên bản PDF nào của các thư việc làm được quét của họ khi đăng ký thế chấp, tại sao họ không điền vào dữ liệu cho bạn, bằng cách sử dụng biểu mẫu PDF?

Để hiểu ý nghĩa của điều này thực sự có nghĩa là, hãy xem tài liệu biểu mẫu PDF sau đây.

Hướng dẫn python autofill web form - biểu mẫu web tự động điền python

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

Vì vậy, thay vì có người nộp đơn gửi thông tin của họ dưới dạng các 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ác biểu mẫu PDF, đã tiết kiệm 90% hoặc nhiều hơn thời gian cần thiết để thu thập dữ liệu để nộp đơn cho khoản vay thế chấp.

Tạo một tài liệu biểu mẫu 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.video describes the steps involved.

Về bản chất, có biểu mẫu PDF là một cách tuyệt vời để ứng viên gửi qua 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à tùy 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à dữ liệu được tổ chức và cấu trúc độc đáo. Đây là lý do tại sao các hình thức 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 tập lệnh JavaScript sau đó có thể được thực thi trong tab Bảng điều khiển của các công cụ nhà phát triển trình duyệt để 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, hãy để một cái nhìn về sơ đồ sau.

Hướng dẫn python autofill web form - biểu mẫu web tự động điền python

Vì vậy, về bản chất, tài liệu biểu mẫu PDF được đặt 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 đó, với mỗi trường, giá trị của trường được trích xuất và tập lệnh JavaScript được tạo, 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ác công cụ nhà phát triển 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 đúng, 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 đây là trường hợp, nó là một thực tiễn được đề xuất (khi tạo tài liệu biểu mẫu PDF) để đặt cho mỗi tên trường, cùng tên được tìm thấy trên thẻ ID của trường trực tuyến tương ứng.id tag of the corresponding online field.

Vì vậy, trước khi tạo tài liệu biểu mẫu PDF, bạn phải kiểm tra với 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. & nbsp;id tag of the HTML element that corresponds to the field.  

Hướng dẫn python autofill web form - biểu mẫu web tự động điền python

Những giá trị ID tương tự được lấy 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).id values retrieved for each field is what you will use to name each of the PDF form fields, for the PDF document that you will create (for your users to fill in later).

Vì vậy, bây giờ chúng tôi đã xem xét cách quá trình tự động hóa trích xuất dữ liệu hoạt động, điều quan trọng là phải nhớ rằng để đạt được nó, có những bước cần thiết liên quan:

1. Kiểm tra (các) mẫu trực tuyến nào bạn muốn tự động hóa. Nhận thẻ ID của từng trường mà bạn muốn tự động điền bằng cách sử dụng tập lệnh JavaScript mà tập lệnh Python sẽ tạo, bằng cách kiểm tra phần tử HTML của từng trường tương ứng của biểu mẫu trực tuyến.Get the id tag of each field that you want to automatically fill in using the JavaScript script that the Python script is going to generate, by Inspecting the HTML element of each corresponding field of the online form(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 (để tham khảo của bạn) các thẻ ID được thu thập vào tệp văn bản (.txt) và đặt tên này một tên, tức là các trường.txt. Tệp này chỉ dành cho mục đích tham khảo và won won được thao tác bởi tập lệnh Python. Bạn sẽ cần các tên trường này khi bạn tạo và thiết kế biểu mẫu PDF của mình bằng Adobe Acrobat hoặc PDFelement.id tags gathered to a text (.txt) file and give this file a name, i.e. fields.txt. This file is only for reference purposes and won’t be manipulated by the Python script. You will need these field names when you create and design your PDF form using Adobe Acrobat or 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 với bạn sẽ sử dụng cho tập lệnh Python của mình.id tags of each of these fields and add them to a .ini (text) file. Save this file with the same name as you will use for your Python script.

Hướng dẫn python autofill web form - biểu mẫu web tự động điền python

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 cùng tên với bạn sẽ sử dụng cho tập lệnh Python và nối thêm hậu tố _ext vào nó, trước khi thêm tiện ích mở rộng .ini.id tags of each of these fields and add them to another .ini (text) file. Save this file with the same name as you will use for the Python script and append the _ext suffix to it, before adding the .ini extension.

Hướng dẫn python autofill web form - biểu mẫu web tự động điền python

Khi các bước này đã được thực hiện, chúng tôi đã sẵn sàng để viết kịch bản Python của chúng tôi.

Viết kịch bản Python

Kịch bản Python là trái tim và linh hồn của toàn bộ quá trình. Nó là nơi mà phép thuật xảy ra. Nó lấy một tài liệu biểu mẫu PDF, đọc nội dung của nó, xác định từng trường với giá trị tương ứng của nó và tạo 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 bạn.

Nếu bạn cần thủ công để nhập các dữ liệu khác nhau vào cùng một biểu mẫu trực tuyến nhiều lần một ngày, 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 cố vấn tài chính, người phải nhập dữ liệu cho vay thế chấp vào cùng một mẫu trực tuyến, cho các ứng viên khác nhau, đôi khi lên tới 30 lần một ngày.

Tôi là một cố vấn tài chính giúp mọi người sắp 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, cho mỗi người nộp đơn, là một quá trình tẻ nhạt, dễ bị lỗi và tốn thời gian, mất nhiều giờ để hoàn thành. & nbsp; nếu tôi học Python, tôi có thể viết một tập lệnh để tự động hóa các biểu mẫu trực tuyến không? - Mike ”

Hãy tưởng tượng nhập thủ công dữ liệu cho một biểu mẫu mà ít nhất 20 trường, cho mỗi người. Sau đó tưởng tượng làm điều đó 30 lần một ngày. Đó là 600 cánh đồ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? Kịch bản về cơ bản 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 trường nào bao gồm menu có thể chọn thả xuống có thể chứa nhiều phản hồi có thể. Đây là một sự khác biệt quan trọng khi tạo mã JavaScript. Tệp có thể bị bỏ trống nếu không có trường có thể lựa 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 các trường nào là các trường Button hoặc hộp kiểm radio. Đây là một sự khác biệt quan trọng khác khi tạo mã JavaScript. Tệp có thể bị bỏ trống nếu không có & nbsp; Buttons hoặc các trường kiểm tra radio.

Vì vậy, hãy để Lôi nhìn vào kịch bản Python hoàn chỉnh và sau đó chia nó thành những khối nhỏ hơn, để hiểu nó tốt hơn. Tất cả các mã được viết bằng phiên bản Python 3.6 trở lên. Bạn có thể tải xuống Python từ trang web chính thức.official site.

import os
import sys
from collections import OrderedDict
from PyPDF2 import PdfFileReader

def _getFields(obj, tree=None, retval=None, fileobj=None):
    fieldAttributes = {'/FT': 'Field Type', '/Parent': 'Parent', '/T': 'Field Name', 
    '/TU': 'Alternate Field Name', '/TM': 'Mapping Name', '/Ff': 'Field Flags', 
    '/V': 'Value', '/DV': 'Default Value'}
    if retval is None:
        retval = OrderedDict()
        catalog = obj.trailer["/Root"]
        if "/AcroForm" in catalog:
            tree = catalog["/AcroForm"]
        else:
            return None
    if tree is None:
        return retval

    obj._checkKids(tree, retval, fileobj)
    for attr in fieldAttributes:
        if attr in tree:
            obj._buildField(tree, retval, fileobj, fieldAttributes)
            break

    if "/Fields" in tree:
        fields = tree["/Fields"]
        for f in fields:
            field = f.getObject()
            obj._buildField(field, retval, fileobj, fieldAttributes)

    return retval

def get_form_fields(infile):
    infile = PdfFileReader(open(infile, 'rb'))
    fields = _getFields(infile)
    return OrderedDict((k, v.get('/V', '')) for k, v in 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 = []
    with open(fname, 'r') as fh:  
        for l in fh:
            lst.append(l.rstrip(os.linesep))
    return lst

def createBrowserScript(fl, fl_ext, items, pdf_file_name):
    if pdf_file_name and len(fl) > 0:
        of = os.path.splitext(pdf_file_name)[0] + '.txt'
        all_lines = []
        for k, v in items.items():
            print(k + ' -> ' + v)
            if (v in ['/Yes', '/On']):
                all_lines.append("document.getElementById('" + k + "').checked = true;\n");
            elif (v in ['/0'] and k in 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 in [''] and k in fl_ext):
                all_lines.append("document.getElementById('" + k + "').checked = false;\n");
            elif (k in fl):
                selectListOption(all_lines, k, v)
            else:
                all_lines.append("document.getElementById('" + k + "').value = '" + v + "';\n");
        outF = open(of, 'w')
        outF.writelines(all_lines)
        outF.close()

def execute(args):
    try: 
        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)
        else:
            files = [f for f in os.listdir('.') if os.path.isfile(f) and f.endswith('.pdf')]
            for f in files:
                items = get_form_fields(f)
                createBrowserScript(fl, fl_ext, items, f)
    except BaseException as msg:
        print('An error occurred... :( ' + str(msg))

if __name__ == '__main__':
    from pprint import pprint
    execute(sys.argv)

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

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

import os
import sys
from collections import OrderedDict
from PyPDF2 import PdfFileReader

Mỗi thư viện là tiêu chuẩn, ngoại trừ thư viện PYPDF2. & nbsp;

Thư viện PYPDF2 được yêu cầu để có thể đọc các tài liệu biểu mẫu PDF. Thư viện này có thể được cài đặt bằng lệnh sau:PyPDF2 library is required to be able to read PDF form documents. This library can be installed using the following command:

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ó chức năng _GetFields. Mục tiêu của hàm này là đọc các trường trong bất kỳ tài liệu biểu mẫu PDF nào bằng cách kiểm tra cây trường tài liệu. Điều này đạt được bằng cách sử dụng mã sau._getFields function. The objective of this function is to read the fields within any PDF form document by inspecting the document’s field tree. This is achieved by using the following code.

def _getFields(obj, tree=None, retval=None, fileobj=None):
    fieldAttributes = {'/FT': 'Field Type', '/Parent': 'Parent', '/T': 'Field Name', 
    '/TU': 'Alternate Field Name', '/TM': 'Mapping Name', '/Ff': 'Field Flags', 
    '/V': 'Value', '/DV': 'Default Value'}
    if retval is None:
        retval = OrderedDict()
        catalog = obj.trailer["/Root"]
        if "/AcroForm" in catalog:
            tree = catalog["/AcroForm"]
        else:
            return None
    if tree is None:
        return retval

    obj._checkKids(tree, retval, fileobj)
    for attr in fieldAttributes:
        if attr in tree:
            obj._buildField(tree, retval, fileobj, fieldAttributes)
            break

    if "/Fields" in tree:
        fields = tree["/Fields"]
        for f in fields:
            field = f.getObject()
            obj._buildField(field, retval, fileobj, fieldAttributes)

    return retval

Về bản chất, những gì mã này làm là nhìn vào 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), 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ể./Root) and then loop through the fields found under the fields tree (/Fields), get the field object value by inspecting the field through specific field attributes.

Các thuộc tính trường được sử dụng nội bộ bởi các tài liệu biểu mẫu PDF để 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 tôi có chức năng GET_FORM_FIELDS.get_form_fields function.

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

Hàm này chỉ cần đọc tài liệu biểu mẫu 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 đọc, dưới dạng từ điển được đặt hàng._getFields function, and it returns all the fields values (/V) contained within the PDF form file read, as an ordered dictionary.

Tiếp theo, chúng tôi có chức năng selectListoption.selectListOption function.

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 + '");')

Chức năng này chỉ đơn giản là tạo chức năng JavaScript có khả năng chọn vào 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ụ phát triển trình duyệt và thực hiện), tùy chọn thả xuống chính xác cho trường biểu mẫu trực tuyến, tương ứng với Giá trị chứa trong trường biểu mẫu PDF tương đương.

Tiếp theo chúng ta có chức năng Readlist.readList function.

def readList(fname):
    lst = []
    with open(fname, 'r') as fh:  
        for l in fh:
            lst.append(l.rstrip(os.linesep))
    return lst

Chức năng này chỉ đơn giản được sử dụng để đọc các tệp .ini mà chúng ta có thể có, cho các trường kiểm tra có thể chọn, có thể lựa chọn.

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

def createBrowserScript(fl, fl_ext, items, pdf_file_name):
    if pdf_file_name and len(fl) > 0:
        of = os.path.splitext(pdf_file_name)[0] + '.txt'
        all_lines = []
        for k, v in items.items():
            print(k + ' -> ' + v)
            if (v in ['/Yes', '/On']):
                all_lines.append("document.getElementById('" + k + "').checked = true;\n");
            elif (v in ['/0'] and k in 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 in [''] and k in fl_ext):
                all_lines.append("document.getElementById('" + k + "').checked = false;\n");
            elif (k in fl):
                selectListOption(all_lines, k, v)
            else:
                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ẽ 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, radio -Button hoặc hộp kiểm.

Hàm lưu tập lệnh JavaScript vào cùng một thư mục mà tập lệnh Python chạy từ (và cả các tệp .ini được đặt). 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 tập lệnh JavaScript kết quả sẽ được gọi là Form_1.txt. Lưu ý rằng phần mở rộng .txt được ưa thích, thay vì tiện ích mở rộng .js.form_1.pdf, then the resultant JavaScript script file will be called form_1.txt. Notice that a .txt extension is prefered, instead of a .js extension.

Điều này là để mã JavaScript được tạo có thể được mở với trình chỉnh sửa văn bản và dễ dàng được sao chép vào bảng tạm, sau đó được dán trong cửa sổ bảng điều khiển công cụ dành cho nhà phát triển trình duyệt, 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 hiện chức năng.execute the function.

def execute(args):
    try: 
        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)
        else:
            files = [f for f in os.listdir('.') if os.path.isfile(f) and f.endswith('.pdf')]
            for f in files:
                items = get_form_fields(f)
                createBrowserScript(fl, fl_ext, items, f)
    except BaseException as msg:
        print('An error occurred... :( ' + str(msg))

Hàm này, như tên gọi của nó, về cơ bản thực hiện phần còn lại của các hàm tập lệnh 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 tập lệnh JavaScript tương ứng (với tiện ích mở rộng. Cùng một thư mục trong đó tập lệnh Python cư trú, nó sẽ tạo một tệp tập lệnh JavaScript tương ứng (với phần mở rộng .txt).

Vì vậy, hoặc bạn có thể thực thi tập lệnh Python bằng cách chuyển tên tài liệu biểu mẫu 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 đọc từ thư mục nó được chứa, tên của mỗi Tài liệu biểu mẫu PDF và tạo tệp tập lệnh JavaScript (.txt) tương ứng.

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

Mỗi tệp script JavaScript (.txt) kết quả có thể được mở bằng trình chỉnh sửa văn bản, mã của nó được sao chép và sau đó bạn có thể 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 bạn muốn điền vào, sau đó dán mã JavaScript được sao chép vào các công cụ nhà phát triển Bảng điều khiển và nhấn Enter để thực thi nó.

Sau đó, bạn nên tự động xem các trường của biểu mẫu trực tuyến chứa đầ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 với trình soạn thảo văn bản, sao chép mã vào bảng tạm, điều hướng đến biểu mẫu trực tuyến tương ứng, mở các công cụ nhà phát triển và dán mã được sao chép trên bảng điều khiển, nhấn ENTER để thực thi nó. Voila, các trường biểu mẫu trực tuyến nên được tự động điền. Thật tuyệt làm sao!

Sự kết luận

Chúng tôi đã hoàn thành một cái gì đó 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 biểu mẫu trực tuyến tương đương bằng cách sử dụng tập lệnh Python tương đối nhỏ và không biến chứng.

Kỹ thuật tương tự ở đây được mô tả, và tập lệnh Python chính xác giống nhau có thể được sử dụng để loại bỏ 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ụ trong thế giới thực cụ thể này. Kịch bản Python và các quy trình đủ chung để làm việc cho bất kỳ PDF và các tài liệu biểu mẫu trực tuyến. & nbsp;

Điều quan trọng là tạo điều kiện thuận lợi cho quy 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 như 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 chính xác có thể là một trình tiết kiệm thời gian lớn cho các nhiệm vụ nhập dữ liệu trực tuyến chuyên sâu và tốn thời gian.

Một lần nữa, bạn có thể tải xuống tập lệnh Python đã hoàn thành, cũng như biểu mẫu web chúng tôi đã sử dụng thử tất cả cho riêng mình! & nbsp;completed Python script, as well as the the web form we used an try it all for yourself!  

Hy vọ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 bạn, tiết kiệm thời gian quý giá và có một số niềm vui trên đường đi. Cảm ơn bạn đọc và cho đến lần sau.

Được viết bởi Chris Castiglione và dựa trên một dự án của Ed Freitas.