脚本获取屏幕截图时出现错误,变量未定义

2024-03-29 14:23:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到一个错误,当我运行我的脚本,应该采取的图像截图,然后将它们转换成pdf文件。你知道吗

import argparse
import os
import tempfile

import autopy
import img2pdf


def screenshot(top_left, right_bottom, next_page, total_page):
    rect_size = (right_bottom[1153] - top_left[373], right_bottom[1167] - top_left[170])
    images = []
    temp_dir = tempfile.mkdtemp()
    for i in range(total_page):
        page_num = "{}".format(i).zfill(len(str(total_page)))
        file_name = os.path.join(temp_dir, 'page-{}.png'.format(page_num))
        images.append(file_name)

        autopy.mouse.move(*next_page)
        autopy.mouse.click(delay=1)
        autopy.bitmap.capture_screen((top_left, rect_size)).save(file_name)

    return images


def image2pdf(images):
    with open("images.pdf", "wb") as f:
        f.write(img2pdf.convert(images))


if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='Take screenshots.')
    parser.add_argument('top_left', type=str)
    parser.add_argument('right_bottom', type=str)
    parser.add_argument('next_button', type=str)
    parser.add_argument('total_page', type=int)

    args = parser.parse_args()

    top_left = tuple(map(lambda x: int(x), args.top_left.split(',')))
    right_bottom = tuple(map(lambda x: int(x), args.right_bottom.split(',')))
    next_button = tuple(map(lambda x: int(x), args.next_button.split(',')))
    total_page = args.total_page

    print("Take screenshot at {} {} and next at {} with {} pages".format(
        top_left, right_bottom, next_button, total_page
    ))

    images = screenshot(top_left, right_bottom, next_button, total_page)
    image2pdf(images)

    print("Done, saved.")

这应该采取一个屏幕截图,然后进入下一页,继续采取他们所有,然后将所有的图像转换成一个单一的pdf文件。你知道吗

这就是我犯的错误

usage: app.py [-h] top_left right_bottom next_button total_page
app.py: error: the following arguments are required: top_left, right_bottom, next_button, total_page

Tags: nameimportrightparsertoppageargsbutton
1条回答
网友
1楼 · 发布于 2024-03-29 14:23:04

下面的代码有效。请看下面我如何运行它。你知道吗

python code.py 12,34 34,67 12,99 12

import argparse

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='Take screenshots.')
    parser.add_argument('top_left', type=str)
    parser.add_argument('right_bottom', type=str)
    parser.add_argument('next_button', type=str)
    parser.add_argument('total_page', type=int)

    args = parser.parse_args()
    top_left = tuple(map(lambda x: int(x), args.top_left.split(',')))
    right_bottom = tuple(map(lambda x: int(x), args.right_bottom.split(',')))
    next_button = tuple(map(lambda x: int(x), args.next_button.split(',')))
    total_page = args.total_page

    print("Take screenshot at {} {} and next at {} with {} pages".format(
        top_left, right_bottom, next_button, total_page
    ))

    print(args)

输出

Take screenshot at (12, 34) (34, 67) and next at (12, 99) with 12 pages
Namespace(next_button='12,99', right_bottom='34,67', top_left='12,34', total_page=12)

相关问题 更多 >