python脚本以window计划任务执行时不显示界面

本文介绍windows10环境下配置python脚本定时自动执行,最近碰到这么一个问题,我写了一个python脚本需要填写验证码,我人工运行该脚本工作正常,但是配置成windows计划定时执行,却在实际运行中发现,首先是不会弹出黑框命令行,也没有selenium的浏览器运行效果,从windows任务管理器进去可以看到python.exe进程也一直卡在那没有退出,翻阅脚本运行log文件发现它是有在运行的,但就是填写验证码老是失败。我打开了那个验证码截图的保存目录观测到,在任务管理器启动的python脚本时(后台运行),截取的验证码图片全部发生了位置偏离且截图大小也偏离的情况。
	网上找了很多办法,包括把.py 程序放到一个.bat脚本里头去 python **.py  也还是不能令脚本浏览器在前台运转。终于偶然在  [添加链接描述](http://www.juguw.net/article-3133.html)  看到了这个魔鬼细节,把python 挪回前台执行了。现予以转载记录,方便自己查阅。

在这里插入图片描述

经过多次反复试验,终于找到了原因,现将相关的配置整理出来。

创建一个Python脚本,输入相应的代码,示例如下:
在这里插入图片描述

打开windows的任务计划,创建任务,相关的流程这里就不细述,有两点需要注意:

1、“编辑操作”时,如下设置操作

在这里插入图片描述

2、“常规”-“安全选项”,要设置成“只在用户登录时执行”,如下图:
属性窗口2
在这里插入图片描述

如果设置成“不管用户是否登录都要运行”,它就会以隐藏界面的方式执行。(selenium在执行部分截图命令时,会因为没有界面而出现抓取元素时失真(即图片没有加载,且原来需要的那个元素长宽坐标都会发生偏离。这一点在填写验证码时影响较大))
如下两图是selenium 使用截图保存验证码方式抓取保存下来的同一个元素,左边那个是python程序后台运行时抓到的元素,右边是前台执行效果
在这里插入图片描述

最终效果如下图:
在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要实现这个功能,你可以使用 Python 的 tkinter 模块。以下是一个简单的示例代码: ```python import tkinter as tk from tkinter import filedialog from PIL import ImageTk, Image # 创建窗口 root = tk.Tk() # 定义拖拽事件 def on_drop(event): # 获取文件路径 filepath = event.data.strip() # 加载图片 img = Image.open(filepath) # 显示图片 img = img.resize((400, 400)) img_tk = ImageTk.PhotoImage(img) label.config(image=img_tk) label.image = img_tk # 创建标签 label = tk.Label(root) label.pack() # 绑定拖拽事件 root.bind("<Drop>", on_drop) # 进入主循环 root.mainloop() ``` 在这个示例代码中,我们创建了一个窗口,并在窗口中创建了一个标签用于显示图片。然后,我们定义了一个 on_drop 函数用于处理拖拽事件。在该函数中,我们获取文件路径并加载图片,然后将图片显示在标签中。 最后,我们将拖拽事件与 on_drop 函数绑定,然后进入主循环以显示窗口。 ### 回答2: Python脚本可以通过使用tkinter模块来实现拖拽图片到窗口显示图片,并获取图片的路径。 首先,我们需要导入tkinter模块,并创建一个窗口对象。然后,在窗口中创建一个标签,用于显示图片。接下来,我们需要定义一个函数,用于处理拖拽操作,并获取图片的路径。 在这个函数中,我们可以使用tkinter模块中的filedialog模块来弹文件选择对话框,让用户选择图片文件。然后,我们可以使用PIL库(Python Imaging Library)来打开图片文件,并将其显示在标签中。 以下是一个示例代码: ```python from tkinter import Tk, Label from tkinter import filedialog from PIL import Image, ImageTk def drag_and_drop(event): file_path = filedialog.askopenfilename(filetypes=[('Image Files', ('*.jpg', '*.png', '*.gif'))]) image = Image.open(file_path) image = image.resize((300, 300)) # 调整图片尺寸 photo = ImageTk.PhotoImage(image) label.config(image=photo) label.image = photo # 创建窗口对象 root = Tk() # 创建标签 label = Label(root) label.pack() # 绑定拖拽事件 root.bind('<B1-Motion>', drag_and_drop) # 运行窗口 root.mainloop() ``` 在这个示例代码中,我们首先导入了Tk和Label类以及filedialog和ImageTk模块。然后,我们定义了drag_and_drop函数,用于处理拖拽操作。函数中使用了filedialog.askopenfilename()方法来弹文件选择对话框,并返回用户选择的图片文件路径。然后,我们使用PIL库的Image.open()方法来打开图片文件,并使用ImageTk模块的PhotoImage()方法来创建一个图片对象。最后,我们使用config()方法将这个图片对象赋值给标签的image属性,并将标签显示窗口中。 在窗口中,当用户拖拽图片文件,会调用drag_and_drop函数,并显示选择的图片。用户也可以通过点击窗口中的图片,选择其他图片文件进行显示。最终,我们可以通过label.image对象的filename属性来获取图片的文件路径。 ### 回答3: 使用Python编写脚本,实现拖拽图片到窗口显示图片并获取其路径的功能可以借助Python的第三方库`PyQt5`来完成。 首先,需要安装`PyQt5`库。可以通过命令行运行`pip install PyQt5`来安装。 接下来,我们可以编写一个简单的图形界面窗口,使用`QLabel`来显示图片预览。并通过`QDropEvent`来实现拖拽图片文件到窗口的功能。代码示例如下: ```python import sys from PyQt5.QtWidgets import QApplication, QLabel, QWidget, QVBoxLayout from PyQt5.QtCore import Qt, QMimeData from PyQt5.QtGui import QPixmap class ImageWindow(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle('拖拽图片并显示') self.layout = QVBoxLayout() self.label = QLabel(self) self.label.setAlignment(Qt.AlignCenter) self.layout.addWidget(self.label) self.setAcceptDrops(True) self.setLayout(self.layout) self.setGeometry(200, 200, 300, 300) def dragEnterEvent(self, event): if event.mimeData().hasUrls(): event.acceptProposedAction() else: event.ignore() def dropEvent(self, event): for url in event.mimeData().urls(): file_path = str(url.toLocalFile()) self.displayImage(file_path) def displayImage(self, file_path): pixmap = QPixmap(file_path) self.label.setPixmap(pixmap.scaled(200, 200, Qt.KeepAspectRatio)) if __name__ == '__main__': app = QApplication(sys.argv) window = ImageWindow() window.show() sys.exit(app.exec_()) ``` 运行以上代码后,将会弹一个图形窗口。将图片文件拖拽到该窗口中,窗口显示拖拽的图片,并将图片的路径打印来。 希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值