selenium登录网页时,会时不时出现异常弹窗的解决方案

方案一:加个异常判断,出现了就重新登录

以下是一个简单的伪代码示例,展示了如何加入异常判断并重新登录:

def login():

# 登录操作

if login_success:

return True

else:

return False

def check_usbkey_matching():

# 检查当前用户与USBKEY是否匹配

if usbkey_matching:

return True

else:

return False

# 主程序

def main():

while True:

if login():

if check_usbkey_matching():

# 执行其他操作

break

else:

print("检测到当前用户与USBKEY不匹配,请重新验证")

login() # 重新登录

else:

print("登录失败,请重新登录")

在上述示例中,使用了`login()`函数进行登录操作,并根据返回值判断登录是否成功。然后,使用`check_usbkey_matching()`函数检查当前用户与USBKEY是否匹配,并根据返回值判断是否需要重新登录。 如果检测到当前用户与USBKEY不匹配,就会输出相应的提示信息,并调用`login()`函数重新进行登录操作。这样可以在出现异常时重新登录,以确保操作的正确性。 请注意,以上只是一个简单的示例,实际应用中可能会根据具体情况做出一些调整和改进。

方案二:加个进程随时监测一下

在 `handle_exception` 函数中添加以下代码来使用 `subprocess` 调用登录脚本:

import subprocess

def handle_exception(exception):

# 处理异常情况的逻辑代码,例如重新登录、重启程序等

# 使用subprocess调用登录脚本或执行登录相关的命令

subprocess.run(["python", "login_script.py"])

在这个示例中,`subprocess.run()` 函数用于执行 `login_script.py` 脚本文件。您可以根据实际需要调整参数,以符合您要调用的程序或执行的命令。 请注意,在使用 `subprocess` 调用其他程序或执行命令时,需要确保所调用的程序或命令存在并且可执行。同时,请注意在处理异常情况时,避免陷入无限循环或产生其他问题。根据具体需求,可能需要进一步调整和优化代码。

方案三:使用多进程随时监控

希望在后台随时监测USBKEY匹配情况并重新登录,可以使用多线程或多进程来实现。 以下是一个使用多线程的示例代码:

import threading

def login():

# 登录操作

if login_success:

return True

else:

return False

def check_usbkey_matching():

while True:

# 检查当前用户与USBKEY是否匹配

if usbkey_matching:

break

else:

print("检测到当前用户与USBKEY不匹配,请重新验证")

login() # 重新登录

# 主程序

def main():

login_thread = threading.Thread(target=check_usbkey_matching)

login_thread.start()

# 执行其他操作

while True:

# 进行其他操作的代码

在上述示例中,我们创建了一个名为`login_thread`的线程,并将其设为后台线程。该线程通过调用`check_usbkey_matching()`函数来监测USBKEY匹配情况。如果检测到不匹配情况,就会输出相应的提示信息,并调用`login()`函数重新进行登录操作。 主程序中的其他操作可以在`while`循环中进行,这样即可同时进行USBKEY匹配监测和其他操作。 请注意,以上示例中的代码仅为演示多线程监测USBKEY匹配的一种方式,实际应用中可能需要根据具体情况进行一些修改和优化。另外,多线程编程需要注意线程安全和资源管理等问题。

方案四:使用第三方库控制窗口操作

要实现监测异常弹窗并重新登录,可以使用第三方库如`pywinauto`来自动化控制窗口操作。以下是一个使用多进程的示例代码:

import time

import multiprocessing

from pywinauto import Application

def login():

# 登录操作

if login_success:

return True

else:

return False

def monitor_exceptions():

while True:

try:

# 使用pywinauto检测异常弹窗

app = Application().connect(title_re="异常弹窗标题")

dlg = app.top_window()

# 如果检测到异常弹窗,则重新登录

if dlg.exists():

print("检测到异常弹窗,请重新登录")

login() # 重新登录操作

except Exception as e:

# 出现异常时的处理逻辑

print(f"出现异常: {e}")

time.sleep(1) # 延时一定时间后再次检测

# 主程序

def main():

monitor_process = multiprocessing.Process(target=monitor_exceptions)

monitor_process.start()

# 执行其他操作

while True:

# 进行其他操作的代码

在上述示例中,我们创建了一个名为`monitor_process`的进程,并将其启动。该进程通过使用`pywinauto`库来监测异常弹窗是否存在。如果检测到异常弹窗,则输出相应的提示信息,并调用`login()`函数重新进行登录操作。 主程序中的其他操作可以在`while`循环中进行,这样即可同时进行异常弹窗监测和其他操作。 

推荐阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: