wenmo8 发布的文章

1.简介

在自动化测试领域,元素定位是非常重要的一环。正确定位页面元素是测试用例能否成功执行的关键因素之一。playwright是一种自动化测试工具,它提供了丰富的元素定位方法,可以满足不同场景下的定位需求。前边宏哥已经通过不少的篇幅将playwright的元素定位的一些常用的基本方法和高级技巧基本介绍的差不多了,但是在Web端的UI自动化的测试中,我们通常需要使用一些方法来操作浏览器,用来模拟人工操作浏览器。今天就跟随宏哥学习了解一下。这一篇宏哥主要是介绍一下,在自动化测试的时候,我们常见的一些浏览器操作有哪些,宏哥将会一一介绍和讲解。

2.层级

在介绍浏览器的相关操作之前,宏哥先介绍一下层级,宏哥理解的其实就是操作层级,不对的话,欢迎批评指正。在Playwright中,测试层级为:

Broswer->Context->Page

以上层级和在Python中介绍的一模一样,因为都是playwright,换汤不换药,这里只不过是将Python语言变成了Java语言。

3.浏览器操作

宏哥首先介绍一下浏览器常用的基本操作,然后再通过具体实例给小伙伴或者童鞋们演示一下。既然是浏览器的操作,那首先得将浏览器启动(打开)才能操作,但是要打开或者启动浏览器需要安装浏览器驱动,因此首先介绍一下playwright如何安装浏览器驱动。

3.1安装浏览器驱动

默认安装三大浏览器驱动webkit、chromium、firefox ,这里不需要我们考虑驱动的版本和浏览器的版本是否匹配,这个就比selenium方便多了。这里宏哥就不赘述了,可以看宏哥前边的文章自行安装即可!当然代码中也会自动检测是否存在驱动,不存在就会自动安装,但取决于网路问题,经常会失败。一般都可以自动安装成功,如果不成功,你可以自己查找资料手动安装。宏哥前边介绍的就是代码自动检测,然后自动安装,宏哥推荐这种方法。如果实在不成功,你可以多尝试几遍。

3.2启动浏览器

浏览器是通过
BrowserType.launch()
创建的。使用浏览器创建公共主页的示例:

import com.microsoft.playwright.*;public classExample {public static voidmain(String[] args) {try (Playwright playwright =Playwright.create()) {
BrowserType firefox
=playwright.firefox()
Browser browser
=firefox.launch();
Page page
=browser.newPage();
page.navigate(
'https://example.com');
browser.close();
}
}
}

3.3相关方法

3.3.1browserType

获取浏览器所属的浏览器类型(chromium、firefox 或 webkit)。

//Usage
Browser.browserType();//Returns
BrowserType
3.3.2close

如果此浏览器是使用 BrowserType.launch() 获取的,则关闭浏览器及其所有页面(如果已打开)。

如果此浏览器已连接,将清除属于此浏览器的所有已创建上下文,并断开与浏览器服务器的连接。

敲黑板!!!注意:这类似于强制退出浏览器。因此,在调用 Browser.close()
之前,您应该在之前使用 Browser.newContext() 显式创建的任何 BrowserContext 上调用 BrowserContext.close()。

//Usage
Browser.close();
Browser.close(options);
//Arguments options Browser.CloseOptions (optional)
setReason String (optional) Added in: v1.
40#

The reason to be reported to the operations interrupted by the browser closure.
//Returns void
3.3.3
contexts

返回所有打开的浏览器上下文的数组。在新创建的浏览器中,这将返回零个浏览器上下文。

//Usage
Browser browser=pw.webkit().launch();
System.out.println(browser.contexts().size());
//prints "0" BrowserContext context =browser.newContext();
System.out.println(browser.contexts().size());
//prints "1"//Returns List<BrowserContext>

3.4查看浏览器UI

要查看浏览器UI,在启动浏览器时传递 headless=false 标志。

Playwright playwright = Playwright.create();
Browser browser 
= playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(false));
Page page 
= browser.newPage();

3.5减慢执行速度

可以使用 slowMo 来减慢执行速度。在调试工具部分了解更多信息。

Playwright playwright = Playwright.create();
Browser browser 
= playwright.chromium().launch(new BrowserType.LaunchOptions().setSlowMo(50));
Page page 
= browser.newPage();

3.6访问跳转页面

page.navigate("http://playwright.dev");

3.7刷新、前进和后退

Page.reload()
Page.goBack()
Page.goForward()

3.8设置浏览器窗口大小

窗口包含在设备中,但您可以使用 Page.setViewportSize() 在某些测试中覆盖它。

//Create context with given viewport
BrowserContext context = browser.newContext(newBrowser.NewContextOptions()
.setViewportSize(
1280, 1024));//Resize viewport for individual page page.setViewportSize(1600, 1200);//Emulate high-DPI BrowserContext context = browser.newContext(newBrowser.NewContextOptions()
.setViewportSize(
2560, 1440)
.setDeviceScaleFactor(
2);

3.9配置浏览器

在不同的浏览器上运行测试。

3.9.1特定浏览器运行
import com.microsoft.playwright.*;public classExample {public static voidmain(String[] args) {try (Playwright playwright =Playwright.create()) {//Launch chromium, firefox or webkit.
      Browser browser =playwright.chromium().launch();
Page page
=browser.newPage();//... }
}
}
3.9.2多个浏览器运行
import com.microsoft.playwright.*;public classExample {public static voidmain(String[] args) {try (Playwright playwright =Playwright.create()) {
Browser browser
= null;
String browserName
= System.getenv("BROWSER");if (browserName.equals("chromium")) {
browser
=playwright.chromium().launch();
}
else if (browserName.equals("firefox")) {
browser
=playwright.firefox().launch();
}
else if (browserName.equals("webkit")) {
browser
=playwright.webkit().launch();
}
Page page
=browser.newPage();//... }
}
}

4.项目实战

以度娘为例,首先启动浏览器,然后再设置浏览器的大小。查询“北京宏哥”后,刷新页面执行回退到百度首页,然后有执行前进进入到搜索“北京宏哥”页面,最后退出浏览器。

4.1代码设计

4.2参考代码

packagecom.bjhg.playwright;importcom.microsoft.playwright.Browser;importcom.microsoft.playwright.BrowserContext;importcom.microsoft.playwright.BrowserType;importcom.microsoft.playwright.Locator;importcom.microsoft.playwright.Page;importcom.microsoft.playwright.Playwright;/***@author北京-宏哥
*
* @公众号:北京宏哥(微信搜索,关注宏哥,提前解锁更多测试干货)
*
* 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-9- 浏览器的相关操作 (详细教程)
*
* 2024年8月16日
*/ public classTest_Search {public static voidmain(String[] args) {try (Playwright playwright =Playwright.create()) {//1.使用chromium浏览器,# 浏览器配置,设置以GUI模式启动Chrome浏览器(要查看浏览器UI,在启动浏览器时传递 headless=false 标志。您还可以使用 slowMo 来减慢执行速度。 Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(false).setSlowMo(500));//2.设置浏览器窗口大小 BrowserContext context = browser.newContext(new Browser.NewContextOptions().setViewportSize(1280, 1024));//创建page Page page =context.newPage();//3.浏览器打开百度 page.navigate("https://www.baidu.com/");//判断title是不是 百度一下,你就知道 try{
String baidu_title
= "百度一下,你就知道";assert baidu_title ==page.title();
System.out.println(
"Test Pass");

}
catch(Exception e){
e.printStackTrace();
}
//使用xpath属性定位百度首页输入框 ,并输入搜索内容:北京-宏哥 page.locator("//*[@id='kw']").type("北京-宏哥");//使用路径与属性结合定位“百度一下”按钮,并点击 。 page.locator("//span/input[@id='su']").click();//5.刷新页面 page.reload();//6.浏览器后退 page.goBack();//7.浏览器前进 page.goForward();//关闭page page.close();//关闭browser browser.close();
}
}

}

4.3运行代码

1.运行代码,右键Run'Test',就可以看到控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作(先访问后搜索宏哥,然后刷新,后退到百度首页,然后再前进搜素宏哥的页面)。如下图所示:

5.小结

好了,关于浏览器的相关操作非常简单,时间不早了今天就分享到这里,感谢你耐心地阅读!

Weak Session IDs(弱会话)

Weak Session IDs(弱会话ID)
漏洞是一种安全漏洞,涉及在 web 应用程序中使用不安全或容易被猜测的会话标识符(Session IDs)。会话ID是服务器用来识别用户会话的唯一标识符,通常在用户登录后生成并传递。弱会话ID有可能被攻击者预测、窃取或伪造,从而获取未经授权的访问权限

感兴趣的师傅可看看我的个人公众号:
泷羽Sec-track
,不定期分享渗透测试常用工具

low

点击按钮并抓包

这里可以看到
dvwaSession=某个数字

再一次抓包,这里变成了2,所以应该是每次刷新增加1

在浏览器找到cookie,并删除数据

这里在浏览器访问http://127.0.0.1/DVWA/vulnerabilities/weak_id/

抓包修改
cookie
即可成功登录

源码审计

只设置了
cookie值每次+1

<?php

$html = ""; // 初始化一个空字符串变量$html

if ($_SERVER['REQUEST_METHOD'] == "POST") { // 检查HTTP请求方法是否为POST
    if (!isset($_SESSION['last_session_id'])) { // 如果$_SESSION['last_session_id']没有被设置
        $_SESSION['last_session_id'] = 0; // 将$_SESSION['last_session_id']初始化为0
    }
    $_SESSION['last_session_id']++; // 递增$_SESSION['last_session_id']
    $cookie_value = $_SESSION['last_session_id']; // 赋值$cookie_value为当前的$_SESSION['last_session_id']
    setcookie("dvwaSession", $cookie_value); // 设置一个cookie,名称为"dvwaSession",值为$cookie_value
}
?>

medium

这里步骤和low一样,就不多描述了,看看不同点

这里添加了
时间戳
,可以在这个网站生成时间戳https://tool.lu/timestamp/,发包时需要添加时间戳修改

源码审计

设置了时间戳,并将其赋值给
$cookie_value

<?php

$html = ""; // 初始化一个空字符串变量$html

if ($_SERVER['REQUEST_METHOD'] == "POST") { // 检查HTTP请求方法是否为POST
    $cookie_value = time(); // 获取当前的时间戳,并将其赋值给$cookie_value
    setcookie("dvwaSession", $cookie_value); // 设置一个cookie,名称为"dvwaSession",值为当前时间戳
}
?>

high

这里步骤也和之前一样,不再重复了,看看不同点,提交后出现了一个参数,
dvwasession

是md5加密,找个网站解密,是7

说明这个和low一样,只不过是数字进行了md5加密

源码审计

如果
last_session_id_high
变量不存在,初始化它为
0
,并且+1,还设置了md5加密算法,设置cookie的有效期为当前时间加上1小时(3600秒),并且设置了请求域

<?php

$html = ""; // 初始化一个空字符串变量$html

if ($_SERVER['REQUEST_METHOD'] == "POST") { // 检查HTTP请求方法是否为POST
    if (!isset($_SESSION['last_session_id_high'])) { // 检查会话变量'last_session_id_high'是否存在
        $_SESSION['last_session_id_high'] = 0; // 如果不存在,初始化该变量为0
    }
    $_SESSION['last_session_id_high']++; // 将会话变量'last_session_id_high'自增1
    $cookie_value = md5($_SESSION['last_session_id_high']); // 计算自增后的值的MD5哈希,作为cookie值
    setcookie(
        "dvwaSession", 
        $cookie_value, 
        time() + 3600, // 设置cookie的有效期为当前时间加上1小时(3600秒)
        "/vulnerabilities/weak_id/", // 限定cookie在此路径下可用
        $_SERVER['HTTP_HOST'], // 设置cookie的可用域为当前请求的主机
        false, // 设置cookie无需通过HTTPS传输
        false  // 设置cookie在HTTP头中可见,而不仅限于脚本访问
    );
}
?>

impossible

源码审计

生成一个更安全的随机会话ID,保证了
cookie
的安全性

<?php

$html = ""; // 初始化一个空字符串变量$html

if ($_SERVER['REQUEST_METHOD'] == "POST") { // 检查HTTP请求方法是否为POST
    $cookie_value = sha1(mt_rand() . time() . "Impossible"); // 生成一个随机的cookie值
    setcookie(
        "dvwaSession", 
        $cookie_value, 
        time() + 3600, // 设置cookie的有效期为当前时间加上1小时(3600秒)
        "/vulnerabilities/weak_id/", // 限定cookie在此路径下可用
        $_SERVER['HTTP_HOST'], // 设置cookie的可用域为当前请求的主机
        true, // 设置cookie仅通过HTTPS传输
        true  // 设置cookie只能通过HTTP协议访问(不能被JavaScript访问,以提高安全性)
    );
}
?>

大家好,我是汤师爷~

概念模型设计是促销系统开发的关键环节,我们需要基于之前的功能分析,将复杂的促销业务拆解成清晰的领域概念,这些概念之间的关系界定和边界划分,将直接决定系统的可维护性和扩展性。

促销系统核心概念模型

通过对促销业务的分析,我们可以抽象出促销系统的关键概念模型。

1、促销活动模型

促销活动模型对活动的各个要素和规则进行抽象,包含活动名称、描述、时间、类型和状态等基本属性。

2、优惠券活动模型

优惠券活动是一种特定的促销活动类型,通过发放优惠券吸引消费者购买商品并提升品牌忠诚度。该模型包含活动名称、时间、发放数量限制和券总量等属性。

3、活动叠加互斥规则

该规则定义了促销活动之间的组合关系,某些优惠不能与其他优惠同时使用(互斥),而某些优惠可以与其他活动一起使用(叠加)。

4、优惠模型

优惠模型是对商家提供给消费者的福利的抽象,可以是折扣、固定金额减免等。一般来说,消费者必须满足特定行为才能享受到。

1)为何抽象出一个“优惠”模型

优惠规则通常是促销活动的一部分,为啥不能合并到活动模型中,需要抽象出一个“优惠”模型?主要有以下考量因素:

  • 业务关注点不同:虽然优惠规则通常是促销活动的一部分,但促销活动本质上是对客户的一种行动号召,并承诺客户满足特定行为,就能给予优惠。促销活动主要关注如何吸引消费者参与,可能包含推广、营销策划和销售目标制定。而优惠是客户实际享受的具体折扣、返利、积分累积或其他福利。
  • 灵活性和扩展性:将优惠作为一个独立模型,可以更灵活地扩展促销系统。例如,新增一个促销活动”会员专享优惠“,只需基于现有的优惠模型,设置会员专享的优惠门槛和优惠内容即可,不影响现有的优惠处理逻辑。此外,优惠不仅可以来源于促销活动,还可以来源于其他场景,例如会员等级成长所带来的优惠。
  • 简化会计和财务处理:从会计和财务角度看,不同促销活动的处理方式可能完全不一样,将优惠模型独立出来,也是为了简化会计和财务处理,针对不同的优惠模式、优惠级别,进行标准化的处理。

2)优惠级别

优惠级别分为商品级、订单级、权益级,这些级别定义了优惠价值如何被分配和应用。

  • 商品级:优惠价值应用于符合优惠门槛的单个商品或多个商品。例如,买一送一场景,优惠金额减免会直接应用于这些买赠的商品上。
  • 订单级:优惠价值应用于整个订单,通常是基于订单总价来计算,同时之前应用的商品级价格也会跟着减少。
  • 权益级:优惠价值应用于一个权益账户,通常只适用于延迟赠送的奖励。例如,消费者因为下单支付而获得积分,这些积分累积在账户中,可以在未来用作折扣或兑换商品。

3)优惠模式

优惠模式分为立享、抵扣、返还模式。

  • 立享:在交易过程中立即兑换优惠价值,如满减、满折、满赠等。
  • 抵扣:之前积累的优惠价值,在后续交易订单的最终支付金额上提供抵扣,如使用优惠券、余额、红包、积分等。
  • 返还:基于订单的实付金额或特定策略提供返利,可在未来购买时使用,如满返积分、满返优惠券等。

5、优惠内容

详细说明优惠的具体内容,优惠内容可分为:价格替代、折扣、固定金额减免、运费减免、积分/优惠券返还及其他奖励。

6、优惠门槛

消费者享受优惠需要达到的条件,门槛类型包括商品相关(特定商品、品牌、分类)、购买数量、金额、销售渠道、客户相关(特定客户账户、会员等级)、特定支付方式等。

7、优惠券模板

用于创建具体优惠券的基本属性和规则,模板定义了优惠券的基本属性,如名称、有效期、使用门槛、可用次数限制等。

8、客户优惠券实例

客户优惠券实例是客户领券后,根据优惠券模板生成的具体优惠券实体。

9、客户权益账户

记录和管理客户在商家下的积分、红包等权益的账户,通常用于追踪顾客的购买历史、积分累计和兑换等。

基于上述核心概念模型,下面将讲解促销计价的处理逻辑。

活动叠加互斥规则

活动叠加互斥规则用于控制多个促销活动是否可以同时生效。针对同一商品或订单,系统需要判断是否允许多种优惠叠加。若只允许一种优惠生效,称为互斥;若允许多个优惠同时生效,则为叠加。以下是常见的叠加互斥规则:

1、单品级组内互斥

单品级组内互斥规定同一商品只能享受一种优惠。比如某商品同时参与"一口价"和"限时折扣"两种促销,活动生效时,只能选择其中一种,这样可以防止单个商品优惠力度过大,避免商家利润受损。

2、订单级组内可以共享

订单级组内共享是指允许多个基于订单总额的活动同时生效,如"满减"、"满折"、"满赠"等订单维度的促销活动。

举例来说,消费者下单金额为120元,同时满足"满100减10"和"满100赠5元券"的条件。在订单级允许共享的情况下,这两个优惠可以同时享受。

如果商家希望控制优惠力度,也可以将"满减"和"满赠"设置为互斥,但这会降低促销的灵活性。

3、配送费组内互斥

配送费组内互斥是指限制配送费促销活动只能生效一种,以防止配送费优惠过度。例如"配送费减5元"和"配送费减半"这类优惠只能二选一,不能叠加使用,这样可以避免商家承担过高的运费成本。

活动命中规则

活动命中规则决定当商品或订单同时满足多个活动条件时,应该使用哪个活动。

"叠加互斥规则"解决了"是否可以叠加"的问题,而"命中规则"则解决了"不能叠加时选哪个"的问题,它帮助系统选择最适合且最有利于商家的活动方案。

活动命中规则并无统一标准,需要根据具体业务场景来制定。运营团队通常会从优惠力度、活动优先级和活动有效期等方面来确定活动的优先顺序。

1、按优惠金额优先

当系统以"优惠金额最大化"为导向时,会根据促销活动的实际让利金额来确定优先级。例如,某商品原价10元,可享受7折或限时特价5元两种优惠。因为7折优惠3元,而特价优惠5元,系统会选择限时特价方案。

2、按活动优先级排列

部分商家会通过后台配置活动优先级,系统按优先级从高到低依次判断。例如,新品推广活动的权重高于常规促销,系统会优先采用新品活动。

3、按时间先后

按时间先后的活动命中规则主要考虑两个因素:

  • 活动创建时间:系统优先选择较早创建的活动,确保原有活动得到充分利用。
  • 活动结束时间:系统优先考虑即将到期的活动,以充分利用活动资源,避免名额或预算浪费。

例如,当商品同时满足两个活动条件时,若其中一个活动将在24小时内结束,另一个还有一周有效期,系统会优先使用即将结束的活动,确保临期活动能被及时使用。

优惠计算顺序

优惠计算顺序决定了多个活动在同一订单中的计算先后顺序。这个顺序直接影响最终订单价格。例如,先计算折扣再计算满减,与先计算满减再计算折扣,最终结果可能会有显著差异。

优惠计算的常见顺序如下:

  1. 先计算单品优惠,这会直接改变商品的结算价格。
  2. 然后计算订单级优惠,因为需要根据商品的最终单价来判断是否达到优惠门槛。
  3. 最后处理返还类优惠,比如"支付后返积分"需要用户完成支付才能触发。

部分商家可能会根据运营需求灵活调整这个顺序以提高转化率。无论采用何种顺序,关键是要确保计算逻辑清晰、避免歧义,并保证结果可以准确复现。

优惠分摊

优惠分摊是指将活动优惠金额按比例分配到各个享受优惠的商品上,从而在数据统计或退款时能准确计算出每件商品获得的实际优惠金额。

常见分摊公式:商品优惠金额 = 总优惠金额 ×(商品金额 / 参与优惠的商品价格总和)

1、分摊要点

首先要确定参与分摊的商品范围,未参与优惠的商品不应参与分摊。

将优惠按商品金额从小到大依次分摊,并将最大金额商品作为最后一件,以确保优惠金额能完全分配完毕。

对于舍入和尾差,当分摊金额出现小数时,需要明确四舍五入的规则,并将尾差加到最后一件商品上,确保分摊总额与实际优惠金额相符。

2、分摊示例

假设用户购买A、B、C三件商品,单价分别为20元、30元、40元,总价90元。参加"满80减20"活动,总优惠20元。

A商品分摊金额:20 / 90 × 20 = 4.44元

B商品分摊金额:30 / 90 × 20 = 6.67元

C商品分摊金额:40 / 90 × 20 = 8.89元

为确保数据准确,最终分摊总额必须等于20元。如遇四舍五入误差,可将尾差计入C商品或最大金额商品中。

本文已收录于,我的技术网站:
tangshiye.cn
里面有,AI 编程、算法 Leetcode 详解、面试八股文、BAT面试真题、简历模版、架构设计,等经验分享。

今天给大家推荐一个
双语对照的 PDF 翻译工具
的开源项目:PDFMathTranslate 。

项目介绍:

基于 AI 完整保留排版的 PDF 文档全文双语翻译,支持 Google/DeepL/Ollama/OpenAI 等服务,提供 CLI/GUI/Docker 。

项目亮点:

  • 基于 AI 布局分析和 PDF 指令流分析实现对文档排版的完整保留 ;
  • 保留行内/行间公式和图表样式,对 Latex 文献进行特殊优化;
  • 保留文档可索引目录结构 ;
  • 支持 Google、DeepL 和 OpenAI 等多种翻译服务 。

预览效果:

快速开始

1、确保服务器安装的 Python 版本大于 3.8 且小于 3.12 ;

2、安装此程序 ;

pip install pdf2zh

3、打开 GUI 界面 , 访问:
http://localhost:7860/

pdf2zh -i

4、上传文件并翻译

如上图,我们上传一个英文版 PDF ,上传完成后,在预览区域会显示 PDF 的内容。

接下来,选择翻译服务 Google、Bing、zhipu、Tentcent 等和翻译方向(英文转中文),

最后点击翻译按钮即可。

当然,我们也可以使用 命令行直接翻译:

pdf2zh raft.pdf

基本原理

核心流程:

1、上传文件后,通过 AI 模型 DocLayout-YOLO-DocStructBench-onnx 解析文档格式 ;

2、调用翻译服务 Google 、智普、Bing、DeepL、OpenAI 等开放平台的服务 ;

3、将数据流整合在一起并输出到目标 PDF 。


参考资料:

https://huggingface.co/wybxc/DocLayout-YOLO-DocStructBench-onnx

我们与大语言模型交互时,往往给出的提示过于简略,而大语言模型还没有达到能够准确猜测你意图的程度,这个时候大模型并不能立即反馈出令人满意的答复,此时,我们需要做的是对大语言模型进行迭代式提示,这个迭代可以反复推进,直至大语言模型给出了令人满意的答案。
比如,某款智能灯箱产品需要一篇营销文案,而当前我们已经获得了该智能灯箱的产品介绍,下面我们看看如何让大语言模型利用这灯箱的产品介绍生成我们需要营销文案。
提示词:
以下是一个产品的相关技术信息,请根据这些信息生成一份产品的营销文案。
```
IUBIOT灯箱安全监控产品:
采用物联网技术, 针对灯箱( 如大型招牌、广告灯箱、发光字等设施) 的运行安全进行实时监管, 防止灯箱因电气原因导致的起火等安全事故。
1.采集与监测灯箱的工作状态,实时故障报警。
2.过载、短路自动切断电源,保护灯箱安全。
3.通过手机远程对灯箱的开关时间、亮度进行调节控制。
4.可选配温湿度监测、线温监测、位移监测、烟雾感应报警等功能。
5.通过实时运行参数,对故障进行初步定位。

产品特征:
本方案通过各类传感器采集灯箱环境及工作参数,并通过无线方式将数据传递至智能灯箱管理云平台,灯箱管理维护人员可通过PC浏览器或手机APP实时查阅灯箱的状态及相关统计的可视化数据。灯箱发生异常时,手机APP可以实时收到对应的异常消息或警报,无论灯箱管理维护人员在何地,均可及时获知灯箱状态。灯箱管理维护人员可通过PC上浏览器或者手机上的APP对智能灯箱执行远程操控,随时随地控制灯箱,实现远程维护及管控。

应用场景:
机场:吊装航显、落地航显、侧装标识、壁装标识、综合引导、龙门架。
地铁:12封灯箱、4封灯箱、6封灯箱、通道灯箱、长廊灯箱、月台灯箱。
门店:门头灯箱、发光字、货架灯箱。
商场:户外标识、立体灯箱、悬挂灯箱、贴墙灯箱、展架灯箱、综合引导。
路边:路名牌、引导牌、公交站牌、广告灯箱、墙体灯箱。
产品组成:
产品采用模块化设计, 根据实际需求灵活搭配, 快速组装, 即时实施, 作业时间短, 迅速投入使用。
硬件:智能物联灯箱控制器(必选),调光控制器、温湿度传感器、烟雾传感器、位移传感器、线温传感器(可选)。
软件:web管理端,监控、管理整个平台;手机端,方便实施人员定位、检修设备。

智能物联灯箱控制器 RL-GW-01S:
RL-GW-01S 是一款适用于灯箱的智能物联控制器,可以采集和监测单个灯箱的相关工作参数和状态。
远程对灯箱进行控制,并把相关的数据信息通过4G无线模块上传到云端后台服务器,并接收服务器的控制指令。
220V供电,最大可控负载6kW,配合RL-DIM-01调光控制器可实现调光节能效果。
还可灵活适配温湿度传感器、位移传感器、烟雾传感器、线温传感器来增加监测和报警功能。

调光控制器 RL-DIM-01:
RL-DIM-01 是一款需通过RS485或者Zigbee连接到智能物联灯箱控制器使用的调光控制器,可以实现调光节能效果。
单模块可供功率200W,可控电压12V或者24V。
```
大语言模型对上述提示词的回复一般较长,文新大模型3.5给出的回复如下:
IUBIOT灯箱安全监控产品——点亮安全,智护光明
在现代城市的每个角落,灯箱都是不可或缺的风景线。但灯箱的运行安全问题,却常常被忽视。IUBIOT灯箱安全监控产品,用科技守护光明,为您的灯箱安全保驾护航。
产品特色
1.实时监控:无论是大型招牌、广告灯箱还是发光字,我们的产品都能实时采集其工作状态,确保一切正常运行。
2.智能报警:一旦出现异常,系统会立即进行故障报警,并通过手机APP推送消息,确保您在第一时间得知。
3.智能切断电源:过载或短路时,系统会自动切断电源,防止火灾等安全事故的发生。
4.远程控制:通过手机APP,您可以随时随地调节灯箱的开关时间、亮度,让管理更加便捷。
5.多功能监测:除了基本的工作状态监测,您还可以选配温湿度监测、位移监测等功能,全方位保障灯箱安全。
应用场景广泛
机场:确保航显灯箱的安全与准确运行。
地铁:为各类灯箱提供稳定的运行保障。
商场与门店:守护您的品牌标识,确保安全无虞。
快速部署,智能管理
模块化设计:根据实际需求,选择合适的模块,快速组装、实施。
智能硬件与软件:智能物联灯箱控制器与调光控制器完美配合,实现高效管理。
选择IUBIOT,选择专业与信赖。让科技与安全,点亮每一个美好的夜晚。
上面这段回复作为营销方案显然太长了,估计没有几个人有耐心看完,所以此时,我们可以要求模型压缩文案的长度,通常在对话中直接补充新的要求就可以了。

可以看到,模型迅速对我们的要求进行了响应,将原来洋洋洒洒的文案改写到仅有48字(IUBIOT视为一个字)。这段文字简洁地说明了智能灯箱产品的主要功能与特色,最终用户可以通过这段文字快速了解这款产品。但是我们假设在现实世界中,智能灯箱通常需要通过系统整包集成商销售,最终用户很少直接采购,那上面这段文字就不太适宜了。所以我们需要继续迭代提示,我们告诉模型文案面向的真正的读者,以及系统整包集成商关注的重点,再进行一次迭代。

新生成的文案技术的味道多了一些,但是显然还不够,面向系统整包集成商介绍产品时,一定要列出产品的具体信息,以及这些产品本身的介绍,否则集成商无从采购。因此我们需要向模型提出新的要求,为了便于我们使用,甚至可以要求模型直接以特定格式(比如准备在网页上介绍产品,其格式应为HTML)返回结果。
在对话框中继续输入以下提示,再进行一次迭代:
面向系统整包集成商还需要列出具体的产品。请用一个表格,提供具体产品的信息。表格应该有两列。第一列包括产品的名称,第二列包括产品的简要说明。给表格命名为“产品列表”。表格线宽度为1磅。将所有内容格式化为可用于网站的HTML格式。将描述放在

元素中。
模型这次的响应严格遵循提示中的要求,它给出一段整洁漂亮的HTML代码,其截图如下:

将上述代码存为HTML文件,使用浏览器打开后,一个合乎要求的产品列表直接跃入眼帘。

至此,我们已经获得了面向系统整包集成商的营销文案,看起来这个文案似乎不错。当然,一名专业的营销人员或许还会有更多的要求或想法需要模型去完成,那他/她可以继续迭代,直至得到满意的答案为止。