Java 如何在不中断用户会话的情况下以静默方式登录多个web应用程序
我们需要登录到20-30个不同的web应用程序,并输入凭据以保持用户全天处于活动状态。这需要在用户机器的后台进行,而不会中断用户。我们在这里使用什么技术来实现这一点 我们曾考虑过使用RPA,但这是一种侵入性行为,会导致用户中断。当RPA运行时,用户将被禁止使用其计算机 我们希望这段自动代码能够一次登录到多个web应用程序,或者在一天中以并行线程(无偏好)的方式按计划登录到多个web应用程序,或者用户可以启动它。此自动化解决方案需要能够保存用户凭据,并使用户不必输入其凭据Java 如何在不中断用户会话的情况下以静默方式登录多个web应用程序,java,c#,vbscript,Java,C#,Vbscript,我们需要登录到20-30个不同的web应用程序,并输入凭据以保持用户全天处于活动状态。这需要在用户机器的后台进行,而不会中断用户。我们在这里使用什么技术来实现这一点 我们曾考虑过使用RPA,但这是一种侵入性行为,会导致用户中断。当RPA运行时,用户将被禁止使用其计算机 我们希望这段自动代码能够一次登录到多个web应用程序,或者在一天中以并行线程(无偏好)的方式按计划登录到多个web应用程序,或者用户可以启动它。此自动化解决方案需要能够保存用户凭据,并使用户不必输入其凭据 我们可以使用C#、vbs
我们可以使用C#、vbscript、java或任何其他软件开发工具来完成这类工作吗?当然这是可能的。您可能会面临的最大问题是,不同的网站可能使用不同的身份验证机制,但大多数可能是通用的 这里是一个简单的Python单线程示例,但是可以使用任何语言,也可以实现并发
import requests
import re
# Put the configuration for each website in a structure like this
websites = [
{
'url': 'https://example.com/login',
'form': {'username': 'myusername', 'password': 'password123'}
'csrf_token': {'regex': '<input type="hidden" name="csrf_token" value="(.*)">', 'post': 'csrf_token'},
'check': 'Welcome, myusername!',
},
{
'url': 'https://example2.com/login.php',
'form': {'username': 'myotheruser', 'password': 'qwertyuiop'}
'csrf_token': {'regex': '<input type="hidden" name="_token" value="(.*)">', 'post': '_token'},
'check': 'My Account',
},
... more websites
]
for website in websites:
# Use sessions so cookies are preserved
session = requests.Session()
# If the website requires CSRF tokens, we need to fetch the login page first to extract the token
if website.get('csrf_token'):
r = session.get(website['url'])
csrf_token = re.search(website['csrf_token']['regex'], r.text).group(1)
# Update post params with CSRF token value
website['form'][website['csrf_token']['post']] = csrf_token
r = session.post(website['url'], data=website['form'])
# Check if login worked
if website['check'] in r.text:
print("Successfully logged in to:", website['url'])
else:
print("Failed to log in to:", website['url'])
导入请求
进口稀土
#将每个网站的配置放在如下结构中
网站=[
{
“url”:”https://example.com/login',
'form':{'username':'myusername','password':'password123'}
'csrf_-token':{'regex':'','post':'csrf_-token'},
“检查”:“欢迎光临,我的用户名!”,
},
{
“url”:”https://example2.com/login.php',
'form':{'username':'myotheruser','password':'qwertyuiop'}
'csrf_-token':{'regex':''post':'u-token'},
“支票”:“我的账户”,
},
…更多网站
]
对于网站中的网站:
#使用会话以保留cookie
会话=请求。会话()
#如果网站需要CSRF令牌,我们需要首先获取登录页面以提取令牌
如果网站.get('csrf_令牌'):
r=session.get(网站['url'])
csrf_token=re.search(网站['csrf_token']['regex'],r.text)。组(1)
#使用CSRF令牌值更新post参数
网站['form'][网站['csrf_代币]['post']]=csrf_代币
r=session.post(网站['url'],数据=网站['form'])
#检查登录是否有效
如果r.text中的网站['check']:
打印(“已成功登录:”,网站['url'])
其他:
打印(“登录到:,网站['url']失败”)
注意,这个例子对CSRF令牌做了一些天真的假设,也没有实现错误处理。希望这能给你一个想法。考虑问一下你考虑过硒吗?@RaceYouAnytime-我从未使用过硒,我很想知道更多关于它的信息以及如何实施解决方案。你知道这有多划算吗?@DavidBrossard:这可能是离题的:要么被视为与安全无关(即离题),要么被视为试图以会话超时的形式绕过现有的安全措施(也离题)对我来说,这项要求还不完全清楚:如果这项要求必须防止会话超时,以便用户可以随时继续而无需再次登录,那么它可能必须在用户浏览器中运行,以访问cookie、本地存储、,具有相同的浏览器指纹等。它可能还需要适应特定的web应用程序。巨大的响应@multithr3at3d!非常感谢你。我会试试这个,让你知道它是怎么回事。