`

第5讲:LR mobile HTTP/HTML协议实战

阅读更多

下面我们来看一下手动关联后的脚本情况:

最好不要用自动关联,虽然LR11.5已经准确了不少,但还是会出现截取不准确的情况。

Action()
{
char  DistrictName[15]={NULL},
        CityCode[20]={NULL},
        ProvinceCode[20]={NULL},
        DistrictCode[20]={NULL};
int     DistrictSequence=0;
web_add_cookie("JSESSIONID=6B75C5017659AA3BFB2C89746A16D20F; DOMAIN=m.weathercn.com");
type url,the default city code is shanghai, you can parameterize it
这里默认定位是上海,可通过后面的关联将省代码获取到,然后进行参数化避免每次打开都是上海
web_url("m.weathercn.com", 
		"URL=http://m.weathercn.com/?cid=01012601", 
		"Resource=0", 
		"RecContentType=text/html", 
		"Referer=", 
		"Snapshot=t1.inf", 
		"Mode=HTTP", 
		LAST);

   	
/*select province*/
lr_start_transaction("Defaultpage");     
web_url("Province",                                                 
		"URL=http://m.weathercn.com/province.jsp", 
		"Resource=0", 
		"RecContentType=text/html", 
		"Referer=http://m.weathercn.com/?cid=01012601", 
		"Snapshot=t2.inf", 
		"Mode=HTTP", 
		LAST);
  lr_end_transaction("Defaultpage",LR_AUTO);
   
   
lr_paramarr_len("ProvincesCode"); /*'输出数组长度'*/
/*save random procince code as a parameter*/
 sprintf(ProvinceCode,"%s",lr_paramarr_random("ProvincesCode"));
/*根据数组内容来随机获取并保存为变量*/
 lr_save_string(lr_eval_string(ProvinceCode),"ProvinceCode");
/*将变量保存为参数,这一步是必需的,否则将无法参数化*/
lr_output_message("%s",lr_eval_string("{ProvinceCode}"));
	
	
	
/*obtain city code,web_reg_save_param can function well here, but not suggest
ed */
	web_reg_save_param(
	"CitiesCode",
	"LB=did=",
	"RB=&pid=",
	"ORD=all",
	LAST);
	
/*select city */
lr_start_transaction("SelectCity");
web_url("City", 
		"URL=http://m.weathercn.com/dis.do?pid={ProvinceCode}",   
                /* the default value is 0101114*/
		"Resource=0", 
		"RecContentType=text/html", 
		"Referer=http://m.weathercn.com/province.jsp", 
		"Snapshot=t3.inf", 
		"Mode=HTTP", 
		LAST);
lr_end_transaction("SelectCity",LR_AUTO);
	
	
/* save city code as a parameter*/
sprintf(CityCode,"%s",lr_paramarr_random("CitiesCode"));
lr_save_string(lr_eval_string(CityCode),"CityCode");
lr_output_message("%s",lr_eval_string("{CityCode}"));
	
/*obtain district code*/
web_reg_save_param(
	"DistrictsCode",
	"LB=cid=",
	"RB=&pid",
	"ORD=all",
	LAST);
	
	
/*obtain district name for text check.*/
web_reg_save_param_regexp(
	"paramName=DistrictsName",
	"RegExp=class=\"c\">(.{4,8})</a>\r\n",  
        /*match Chinese character use ([\u4e00-\u9fa5]{4,6}).. because chinese 
        character display inproper here */
	"Ordinal=all",
	LAST);
	

.
.
.
.
.
.
.
'中间太长了我就不贴了,操作都是类似的。下面通过是将具体的省、市、区保存为参数来进行参数化'	

	
/* generate random number to acquire a district name corresponding with district code*/
srand(time(NULL));
DistrictSequence=(rand()%(lr_paramarr_len("DistrictsCode")))+1;
/*save district name and district code as a parameter*/
lr_output_message("%d",DistrictSequence);
sprintf(DistrictName,"{DistrictsName_%d}",DistrictSequence);
lr_save_string(lr_eval_string(DistrictName),"DistrictName");
sprintf(DistrictCode,"{DistrictsCode_%d}",DistrictSequence);
lr_save_string(lr_eval_string(DistrictCode),"DistrictCode");
lr_output_message("%s",lr_eval_string("{DistrictName}"));
lr_output_message("%s",lr_eval_string("{DistrictCode}"));
	
	
/*text check*/
/*设置文本检查点,下好从上面保存为参数的DistrictName中获取*/
web_reg_find("Search=Body",
	        "Text={DistrictName}",
	         LAST);
/*weather report*/
lr_start_transaction("ReportPage");
web_url("WeatherReport", 
		"URL=http://m.weathercn.com/index.do?cid={DistrictCode}&pid={ProvinceCode}", /* default cid=0101141012  pid=0101114*/
		"Resource=0", 
		"RecContentType=text/html", 
		"Referer=http://m.weathercn.com/cout.do?did={CityCode}&pid={ProvinceCode}", 
		"Snapshot=t5.inf", 
		"Mode=HTTP", 
		LAST);
lr_end_transaction("ReportPage",LR_AUTO);
    
    
/*以下内容没有进行参数化,以下内容主要是一些像显示天气状态的图片内容,之前看到过一篇文件说关于web_concurrent_start只是提交的数据有区别,所以没有必要进行参数化'  */ 
/* you can parameterize the following value */
web_concurrent_start(NULL);

web_url("Day02.png", 
		"URL=http://m.weathercn.com/fh30/Day02.png", 
		"Resource=1", 
		"RecContentType=image/png", 
		"Referer=http://m.weathercn.com/index.do?cid=0101141012&pid=010114", 
		LAST);

web_url("Day00.png", 
		"URL=http://m.weathercn.com/fh100/Day00.png", 
		"Resource=1", 
		"RecContentType=image/png", 
		"Referer=http://m.weathercn.com/index.do?cid=0101141012&pid=010114", 
		LAST);

web_url("Night02.png", 
		"URL=http://m.weathercn.com/fh30/Night02.png", 
		"Resource=1", 
		"RecContentType=image/png", 
		"Referer=http://m.weathercn.com/index.do?cid=0101141012&pid=
                         010114", 
		LAST);

web_concurrent_end(NULL);

return 0;
}

/*这里有一点疑问,之前看自动关联LR生成的关联中写的为RegExp=pid=(.*?)\ \\" class,一直
没有弄明白,这里为什么会多出一个\\而仍然可以关联成功
关联以获取到所有的省代码,LR在C语言中并不推荐使用web_reg_save_param_ex函数,这里用其
实也是可以通过的下面我们就来简单的看一个服务器返回的内容来如何进行参数化。*/
<ul id="more">
    <li><a href="dis.do?pid=010101" class="c">??</a>|<a href="dis.do?pid=010126" class="c">??</a>|<a href="dis.do?pid=010129" class="c">??</a></li>
    <li><a href="dis.do?pid=010104" class="c">??</a>|<a href="dis.do?pid=010116" class="c">??</a>|<a href="dis.do?pid=010113" class="c">???</a></li>
    <li><a href="dis.do?pid=010119" class="c">??</a>|<a href="dis.do?pid=010120" class="c">???</a>|<a href="dis.do?pid=010132" class="c">??</a></li>
    <li><a href="dis.do?pid=010121" class="c">??</a>|<a href="dis.do?pid=010122" class="c">??</a>|<a href="dis.do?pid=010106" class="c">??</a></li>
    <li><a href="dis.do?pid=010125" class="c">??</a>|<a href="dis.do?pid=010130" class="c">??</a>|<a href="dis.do?pid=010127" class="c">??</a></li>
    <li><a href="dis.do?pid=010109" class="c">??</a>|<a href="dis.do?pid=010133" class="c">??</a>|<a href="dis.do?pid=010124" class="c">??</a></li>
    <li><a href="dis.do?pid=010111" class="c">??</a>|<a href="dis.do?pid=010123" class="c">??</a>|<a href="dis.do?pid=010112" class="c">??</a></li>
    <li><a href="dis.do?pid=010102" class="c">??</a>|<a href="dis.do?pid=010117" class="c">??</a>|<a href="dis.do?pid=010114" class="c">??</a></li>
    <li><a href="dis.do?pid=010115" class="c">??</a>|<a href="dis.do?pid=010118" class="c">??</a>|<a href="dis.do?pid=010134" class="c">??</a></li>
    <li><a href="dis.do?pid=010105" class="c">??</a>|<a href="dis.do?pid=010128" class="c">??</a>|<a href="dis.do?pid=010108" class="c">??</a></li>
    <li><a href="dis.do?pid=010110" class="c">??</a>|<a href="dis.do?pid=010107" class="c">??</a>|<a href="dis.do?pid=010131" class="c">??</a></li>
    <li><a href="dis.do?pid=010103" class="c">??</a></li>

 因为当时区域没有修改,导致中间有些问号,其实中间部分主要是一些地方区的中文名称。

可以看出都还是比较有规律的。可用的几个函数都在以上列出,其中LR11.5中最新加的一个函数regexp最大的特点是可以用正则表达式,但我还是习惯用web_reg_save_param_ex ,因为LB/IC  和RB/IC可以来根据边界匹配,二者在实际中运用可能还是会有差别,可能会出现有些情况只能用其中一种才能解决的问题,之前在做上面的时候就曾遇到过用正则表达式匹配出的值会多一些。像上面返回中有还有一行

<div align="center"><a href="#" class="c">?????????</a></div>

 

如果用正则表达式就很难区分以上标签中的内容与实际要参数化的内容了。当然这里还是可以的,因为中文长度不一致,可能通过正则表达式限制长度解决,但如果长度也与要获取的参数相同又该怎处理呢?

因为获取上面的参数可以用如下关联函数解决

	web_reg_save_param_regexp(
	"paramName=DistrictsName",
	"RegExp=class=\"c\">(.{4,8})</a>\r\n",   /*match Chinese character use ([\u4e00-\u9fa5]{4,6}).. because chinese character display inproper here */
	"Ordinal=all",
	LAST);
/* '这里通过限制长度还是能够正确获取的'*/
1
1
分享到:
评论

相关推荐

    基于springboot的大学生社团管理系统

    开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 ...修改后启动教学:https://cloud.189.cn/t/RRFrQ3emmMRj (访问码:lr37)

    基于springboot的民宿管理系统

    开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 ...修改后启动教学:https://cloud.189.cn/t/RRFrQ3emmMRj (访问码:lr37)

    基于springboot的汽车租赁管理系统全套

    开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 ...修改后启动教学:https://cloud.189.cn/t/RRFrQ3emmMRj (访问码:lr37)

    基于springboot的自习室预定管理系统

    开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 ...修改后启动教学:https://cloud.189.cn/t/RRFrQ3emmMRj (访问码:lr37)

    基于springcloud的房产销售平台

    开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 ...修改后启动教学:https://cloud.189.cn/t/RRFrQ3emmMRj (访问码:lr37)

    基于springboot的线上教学平台(程序+万字论文+答辩PPT)

    开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 ...修改后启动教学:https://cloud.189.cn/t/RRFrQ3emmMRj (访问码:lr37)

    基于springboot+vue的电子商城可视化管理系统

    开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 ...修改后启动教学:https://cloud.189.cn/t/RRFrQ3emmMRj (访问码:lr37)

    基于springboot+vue的民宿预定可视化管理系统

    开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 ...修改后启动教学:https://cloud.189.cn/t/RRFrQ3emmMRj (访问码:lr37)

    基于springboot+vue的协同过滤算法旅游推荐可视化

    开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 ...修改后启动教学:https://cloud.189.cn/t/RRFrQ3emmMRj (访问码:lr37)

    AutoSQL_v1.3.rar

    将查询结果以Excel、CSV或HTML格式写入网络或本地驱动器通过邮件发送结果。只有在有结果的时候才这样做,这样做才有条件 使用模板、占位符和其他选项,您可以完全定制SQL查询的自动化和调度。其中最有趣的一些: ...

    LR1805 友顺UTC 电子元器件芯片.pdf

    LR1805 友顺UTC 电子元器件芯片知识点总结 本文档讲解了 LR1805 友顺UTC 电子元器件芯片的特性、应用和技术参数。LR1805 是一款快速超低pressure线性稳压器,适用于低压微处理器应用。该芯片具有低 quiescent 当前...

    编译原理:LR分析程序

    5. **算法实现**:理解SLR、LALR或LR(k)算法的细节是必要的,包括如何构造分析表,如何处理冲突,以及如何通过这些表驱动解析过程。 6. **C/C++编程**:要阅读和理解"LR.C"源码,需要熟悉C语言的基本语法和编程技巧...

    icdar2015.txt

    链接: https://pan.baidu.com/s/1j5r9eSiPS6xiskE1LZl8zQ 提取码: ejqd ,如果没有积分的同学,可以通过链接下载,上传资源不易,希望大家共同学习

    Athentech Perfectly Clear Complete for Mac(ps/lr磨皮滤镜插件) V3.9.0.1699

    Athentech Perfectly Clear Complete最新版可以独立运行,也可以作为ps/lr插件运行,兼容ps2019、lr2019,直接打开RAW和传统照片,请放心使用!安装使用教程:https://mac.orsoon.com/Mac/157863.html 遇到安装包...

    vc学习资料网址大全

    3. **VC++学习资源**:[ftp://210.25.133.20/cd1/bookshelf/vc/vc6lr.zip](ftp://210.25.133.20/cd1/bookshelf/vc/vc6lr.zip) - 提供了VC++的学习资源包,包括教程和实例代码,非常适合初学者入门。 4. **VC++...

    EXTjs 简单布局实例

    Ext 漂亮界面设计 //实例菜单树形 menuTree:new Ext.tree.TreePanel({ title:'功能菜单', ...margins:'0 0 5 5', loader:new Ext.tree.TreeLoader({ dataUrl:'extExampleTree.json', requestMethod: 'GET' }),

    基于 Unet++ 实现的自然场景中水体图像的语义分割python源码【包含数据集、完整代码】

    框架为pytorch实现 数据集:水体分割(2类别,约2k张数据和标注图像) 代码介绍: 训练过程提供了多种优化器选择(Adam、SGD、...其他分割网络实战:https://blog.csdn.net/qq_44886601/category_12102735.html

    基于pytorch+python实现的 Unet++ 对人眼虹膜图像的语义分割python源码【包含数据集、完整代码】

    框架为pytorch实现 数据集:人眼虹膜分割(2类别,约30k张数据和标注图像) 代码介绍: 训练过程提供了多种优化器选择(Adam、SGD、...其他分割网络实战:https://blog.csdn.net/qq_44886601/category_12102735.html

    基于 Unet++ 实现的自动驾驶道路上车道线图像的语义分割python源码【包含数据集、完整代码】

    框架为pytorch实现 数据集:马路车道线分割(2类别,约6k张数据和标注图像) 代码介绍: 训练过程提供了多种优化器选择(Adam、SGD、...其他分割网络实战:https://blog.csdn.net/qq_44886601/category_12102735.html

    httppost相关工具

    http://www.cnblogs.com/zyl910/archive/2012/09/19/TestHttpPost.html 3.lr_post.txt: 录制的loadrunner http post上传文件到服务器的示例; 4. getjpg.vbs: 读出一个图片文件,将其内容转换为loadrunner httppost...

Global site tag (gtag.js) - Google Analytics