者 | Baldwin_KeepMind
出品 | CSDN博客
我的日记 4月23日 晴
你三天没回我的消息,在我孜孜不倦地骚扰下你终于舍得回我了,你说‘nmsl’我想这一定是有什么含义吧!噢!我恍然大悟,原来是尼美舒利颗粒。
她知道我关节炎,让我吃尼美舒利颗粒,她还是关心我的但是又不想显现的那么热情的。
天啊!她好高冷,我好像更喜欢她了呢!
你看,虽然女神经常不理我,但是还是会偷偷地关心我,虽然她不直说,但是我都懂。
唯一的问题就是,我最近很忙,忙到都没有时间去给女神发“早安”了。不可以!“早安”绝对不能断,这是我对女神诚挚的爱,女神虽然不会回复我,但是她肯定都记在心里,不回复我肯定是在考验我!
作为一名无所不能的程序猿,我立刻就想到为什么不用Python爬取情话,然后每天定时发送给她呢?
爬取情话
选取情话资源
首先我们需要去网上找到合适的情话资源,如果懒得自己找,可以用这个:http://www.1juzi.com/new/150542.html
分析网页资源
1. 定位情话资源
鼠标放在我们要爬取的情话上快速按下右键+检查(元素)。
先在就可以看到我们的情话在页面中是什么位置了。
2. 定位标签
在开发者工具中,我们轻松的旧定位到了我们的情话的标签,就是上图红框里的内容。
3. 分析请求方式
在刚才的界面(不要退出开发者模式)下刷新:
在Network栏目下找到我们请求的那个资源,在他的Headers中找到这个资源请求的方式,这里是GET。
使用urllib库获取资源
1、安装urllib库
这一步是怕你服务器里没有urllib2库,等会儿会造成麻烦才添加上的,如果你没有添加该库,请百度添加方法。
2、请求资源网站
代码:
import urllib.request
url="http://www.1juzi.com/new/150542.html"
html=urllib.request.urlopen(url).read
print(html)
结果:
......
<h1>??ììò???D??é?°</h1>
<div class="content"><div class="news"><script type="text/javascript">news1;</script></div>
<p>1?¢????·????òD?à?×???òaμ?????£?ó?D?à′?ì??μ???×??£</p>
<p>2?¢°?ê?ì¤??oì3?í?′?????£?°?ê?ò?éúò?êàú¤ú¤????£?°???£??ò2??êàíóé?£</p>
<p>3?¢×§??è??3£?óè??ò?êà?à°é£?óμ??è??3£??¤??ò?êà??°2?£</p>
<p>4?¢o??1ê?ò°D?£??ò?¤?±á?ò?±2×óμ?????£?′óó??????aê?£?2?????íá2??àD??£</p>
<p>5?¢?òoóà′??á???£??ò2?μ¢?ó??£??1?áóD±eè?μ¢?ó??£????ò2??êD?£??1ê??òà′μ¢?ó??°é?£</p>
<p>6?¢??μ???μ???ò??ì?ò?í2??a?ù′?£?óDμ???ê?μ?D?ì?£?ê?????±?á??ò£?ò??°?ò′ó2??á?a?ùμ??£?ùè?óDò???è??üè??òD??ê?é??μ???±????íê????£</p>
<p>7?¢???òμ??é?é?÷à?è¥?′o£2?òa?′à′??òa??à′?£</p>
<p>8?¢??ò?ìì???a??D?ì?£???ò??ì??±????D?ˉ£???ò??????a??μ£D??£óD??μ??D????o??£</p>
<p>9?¢2??ò?ùìy?é?è£?μ±?ò??è?£?òò?a??àá?12?×??£</p>
......
小问号,你是否有很多朋友?
我们爬下来的都是乱码,发给女神一堆乱码,女神可能还会以为是我们给她发的暗语,说不定还要花时间去寻找解密方法,想想都累,不能这个样子!
其实出现乱码的原因主要网页的编码方式和我们爬取程序的编码方式不一样造成的,只要找到网页的编码方式就好。
3、设置解码类型
有3种方式:
1.从网页Content-Type中获取编码方式
2.第三方库智能识别编码,常用chardet等
3.猜测编码
我们这里其实在请求头的Content-Type里有编码类型,但是为了保险起见,也是为了能应用到更多的资源网站,这里演示以下chardet的用法,猜测编码的使用请自行百度。
chardet获取编码类型
代码:
import urllib.request
import chardet
url="http://www.1juzi.com/new/150542.html"
html=urllib.request.urlopen(url).read
print("html头中的charset:", chardet.detect(html))
结果:
/usr/bin/python3.7 /home/baldwin/PycharmProjects/IAmADog/spider/Spider.py
html头中的charset:{'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'}
Process finished with exit code 0
Get!!!编码方式为GB2312!
设置解码
代码:
import urllib.request
import chardet
url="http://www.1juzi.com/new/150542.html"
html=urllib.request.urlopen(url).read
charset=chardet.detect(html).get("encoding")
htmlText=html.decode(charset,errors='ignore')
print(htmlText)
结果:
......
<h1>每天一句小情话</h1>
<div class="content"><div class="news"><script type="text/javascript">news1;</script></div>
<p>1、将你放进我心里最重要的位置,用心来刻你的名字。</p>
<p>2、爱是踏破红尘望穿秋水;爱是一生一世冥冥轮回;爱你,我不问理由。</p>
<p>3、拽你入怀,予你一世相伴,拥你入怀,护你一世平安。</p>
<p>4、何止是野心,我预谋了一辈子的念想,从遇见你开始,不见黄土不死心。</p>
<p>5、我后来想了想,我不耽误你,还会有别人耽误你,那我不甘心,还是我来耽误你吧。</p>
<p>6、见到你的那一刻我就不知所措,有的只是的心跳,是你改变了我,以前我从不会这样的。假如有一个人能让我心甘情愿地改变那就是你。</p>
<p>7、陪我到可可西里去看海不要未来只要你来。</p>
<p>8、每一天都为你心跳,每一刻都被你感动,每一秒都为你担心。有你的感觉真好。</p>
......
哦吼!搞定!
4、封装代码
刚才我们已经实现了资源的获取,但是这样的代码用起来太不方便了,我们把它封装在方法里:
......
import urllib.request
import chardet
def getHtml(url):
"""
获取网页html文本资源
:param url: 网页链接
:return: 网页文本资源
"""
html=urllib.request.urlopen(url).read
charset=chardet.detect(html).get("encoding")
htmlText=html.decode(charset, errors='ignore')
return htmlText
解析网页资源
解析网页的话,需要第三方插件Beautiful Soup来提取 xml 和 HTML 中的数据。
获取content节点内容
我们想要的资源都在一个class为”content“的div节点下,我们现在先获取这个节点的所有内容。
部分代码:
soup=BeautifulSoup(htmlText,"html.parser")
"获取content节点的内容"
div_node=soup.find('div', class_='content')
print(div_node.get_text)
结果:
/usr/bin/python3.7 /home/baldwin/PycharmProjects/IAmADog/spider/Spider.py
<bound method Tag.get_text of <div class="content"><div class="news"><script type="text/javascript">news1;</script></div>
<p>1、将你放进我心里最重要的位置,用心来刻你的名字。</p>
<p>2、爱是踏破红尘望穿秋水;爱是一生一世冥冥轮回;爱你,我不问理由。</p>
<p>3、拽你入怀,予你一世相伴,拥你入怀,护你一世平安。</p>
<p>4、何止是野心,我预谋了一辈子的念想,从遇见你开始,不见黄土不死心。</p>
<p>5、我后来想了想,我不耽误你,还会有别人耽误你,那我不甘心,还是我来耽误你吧。</p>
......
<u>本文地址:<a href="http://www.1juzi.com/new/150542.html">每天一句小情话</a>http://www.1juzi.com/new/150542.html</u>
<li class="page"><a href="/aiqingyulu/">上一页</a><span class="current">1</span><a href="/new/150543.html">2</a><a href="/new/150541.html">下一页</a></li>
</div>
Process finished with exit code 0
2.4.3. 获取p节点内容
上一步我们已经获取到了我们的主要内容,然后总结可以看出我们想要的文本内容在P节点中,那么现在就来获取它。
部分代码:
soup=BeautifulSoup(htmlText,"html.parser")
"获取div节点的内容"
div_node=soup.find('div', class_='content')
"获取P节点内容"
p_node=div_node.find_all('p')
for content in p_node:
print(content.get_text)
结果:
/usr/bin/python3.7 /home/baldwin/PycharmProjects/IAmADog/spider/Spider.py
1、将你放进我心里最重要的位置,用心来刻你的名字。
2、爱是踏破红尘望穿秋水;爱是一生一世冥冥轮回;爱你,我不问理由。
3、拽你入怀,予你一世相伴,拥你入怀,护你一世平安。
4、何止是野心,我预谋了一辈子的念想,从遇见你开始,不见黄土不死心。
5、我后来想了想,我不耽误你,还会有别人耽误你,那我不甘心,还是我来耽误你吧。
......
69、有时,爱也是种伤害,残忍的人句子大全http://Www.1juzI.coM/,选择伤害别人,善良的人,选择伤害自己。
......
Process finished with exit code 0
4、处理数据
注意一下第69剧,这里面有网站的链接,把这个一起发给女神不就露馅了么,现在得想办法给她删掉。同时情话前面的编号也得删掉。
删除特定标签
我们会查看一下数据就会发现,所有的链接都是在U标签里的,那我们可以直接在获取到div标签内容后就把u标签删掉
"删除特定标签u"
[s.extract() for s in div_node('u')]
删除序号
我们发现,序号与情话之间是用顿号分割的,那么我们可以将每个P标签下的内容用split分割并且取出第二个元素就好了。
部分代码:
"获取P节点内容"
p_node=div_node.find_all('p')
for content in p_node:
"以’、‘分割,并且取出第2个元素"
text=content.get_text.split("、",1)[1]
print(text)
结果:
/usr/bin/python3.7 /home/baldwin/PycharmProjects/IAmADog/spider/Spider.py
将你放进我心里最重要的位置,用心来刻你的名字。
爱是踏破红尘望穿秋水;爱是一生一世冥冥轮回;爱你,我不问理由。
拽你入怀,予你一世相伴,拥你入怀,护你一世平安。
何止是野心,我预谋了一辈子的念想,从遇见你开始,不见黄土不死心。
我后来想了想,我不耽误你,还会有别人耽误你,那我不甘心,还是我来耽误你吧。
......
Process finished with exit code 0
nice啊,到这一步你已经把我们需要的情话都提取出来了!!!
封装数据备用
这样一句一句的也不好处理啊!不如把它放到list里,等下定时任务的时候可以用的时候取出来就好。
部分代码:
sentenceList=list
......
"获取P节点内容"
p_node=div_node.find_all('p')
for content in p_node:
"以’、‘分割,并且取出第2个元素"
text=content.get_text.split("、", 1)[1]
"追加到list尾部"
sentenceList.append(text)
print(sentenceList):
/usr/bin/python3.7 /home/baldwin/PycharmProjects/IAmADog/spider/Spider.py
['将你放进我心里最重要的位置,用心来刻你的名字。', '爱是踏破红尘望穿秋水;爱是一生一世冥冥轮回;爱你,我不问理由。', '拽你入怀,予你一世相伴,拥你入怀,护你一世平安。', '何止是野心,我预谋了一辈子的念想,从遇见你开始,不见黄土不死心。', ......]
Process finished with exit code 0
5、封装(爬虫代码最终)
爬虫是做好了,但是总觉得乖乖的,我等下还得在其他地方用,不如这里以面向对象的思想把爬虫封装一下。
import urllib.request
from bs4 import BeautifulSoup
import chardet
def __getHtml(url):
"""
私有方法:获取网页html文本资源
:param url: 网页链接
:return: 网页文本资源
"""
html=urllib.request.urlopen(url).read
charset=chardet.detect(html).get("encoding")
htmlText=html.decode(charset, errors='ignore')
return htmlText
def __sloveHtml(htmlText):
"""
私有方法:解析HtmlText
:param htmlText: 传入的资源
"""
sentenceList=list
soup=BeautifulSoup(htmlText, "html.parser")
"获取content节点的内容"
div_node=soup.find('div', class_='content')
"删除特定标签u"
[s.extract() for s in div_node('u')]
"获取P节点内容"
p_node=div_node.find_all('p')
for content in p_node:
"以’、‘分割,并且取出第2个元素"
text=content.get_text.split("、", 1)[1]
"追加到list尾部"
sentenceList.append(text)
return sentenceList
def getSentenceList(url):
"""
Spider提供的公用方法,提供情话list
:param url: 获取情话的地址
:return: 情话list
"""
return __sloveHtml(__getHtml(url))
爬虫总结
这一部分主要用到的类库有:BeautifulSoup,urllib,chardet。
主要思想:封装
手机短信发送发送
本来想用微信或者QQ发送来着,但是时隔两年,qqbot、itchat、wxpy等第三方库都失效了,没办法就来用手机短信发送好了。
1. Twilio
Twilio是一个做成开放插件的电话跟踪服务(call-tracking service)
Twilio公司致力于帮助开发者在其应用里融入电话、短信等功能,该公司周二又推出了一项称为Twilio Client的新服务,可帮助开发者整合灵活而低成本的网络电话(VoIP)功能。
VoIP即Skype和谷歌电话等服务使用的技术,要提供VoIP服务通常需要准备相应的基础设备,而Twilio Client免除了开发者的这一麻烦,可让他们便捷地在应用里加入网络电话元素。
安装
安装过程比较简单,直接pip就好:
sudo pip3 install twilio
等待安装完成
Successfully built twilio
Installing collected packages: PyJWT, twilio
Successfully installed PyJWT-1.7.1 twilio-6.38.1
注册并获取三个重要参数
参考文章:https://zhuanlan.zhihu.com/p/67716042
简单代码实现发送短信实验
代码:
from twilio.rest import Client # 导包
account_sid='你的account_sid'
auth_token='你的auth_token'
client=Client(account_sid, auth_token)
message=client.messages.create(
from_='+×××××××××',
body='亲爱的H,以后我每天都会给你发送一条信息哦!!!',
to='你要发送到的手机号(以+86开头)'
)
print(message.sid)
控制台输出:
/usr/bin/python3.7 /home/baldwin/PycharmProjects/IAmADog/qqsend/Send.py
SMfe64f40f2ac24b8ca82121d57147312c
Process finished with exit code 0
手机接收短信:
OK!到这里我们已经简单实现了发送短信的功能,现在要去把这个功能封装一下。
实现发送短信的功能
封装代码:
from twilio.rest import Client # 导包
def sendSMSMsg(content, tel):
"""
向某个手机号发送短信内容
:param content: 短信内容
:param tel: 手机号
"""
account_sid='你的account_sid'
auth_token='你的auth_token'
client=Client(account_sid, auth_token)
client.messages.create(
from_='+18634171608',
body=content,
to=tel
)
print('Send :', content, 'to tel:', tel, 'syccessfully!!!')
if __name__=='__main__':
sendSMSMsg("Hello?" ,"+×××××××××")
测试结果:
/usr/bin/python3.7 /home/baldwin/PycharmProjects/IAmADog/qqsend/Send.py
Send : Hello? to tel: +8618436354553 syccessfully!!!
Process finished with exit code 0
手机接收短信:
发送短信总结
注册twilio
获取三个参数:account_sid,auth_token,TRIAL NUMBER
引入twilio
设置你要发送到的手机号和内容
操作还算是比较简单的,这部分主要用到twilio库。
定时发送短信
这一步算是我们的主程序了,在这一部分里,我们要使用之前的代码先获取情话list,再设置定时任务,每天固定的时间点把短信发到女神手机上。
Python定时任务
Python 中的定时任务框架还挺多的,我们现在的需求是每天早上8点钟执行一个任务,在不到这个时间的时候不发送信息,为了简便理解,我打算直接循环扫描系统当前时间,如果到了我们需要的那个时间点,就发送,不到的时候就一直扫描
代码实现
import time
while True:
# 刷新
time_now=time.strftime("%H:%M:%S", time.localtime)
# 此处设置每天定时的时间
if time_now=="15:29:00":
# 需要执行的动作
print('定时任务执行一次')
time.sleep(2) # 因为以秒定时,所以暂停2秒,使之不会在1秒内执行多次
结果:
/usr/bin/python3.7 /home/baldwin/PycharmProjects/IAmADog/DoWork.py
定时任务执行一次
Traceback (most recent call last):
File "/home/baldwin/PycharmProjects/IAmADog/DoWork.py", line 7, in <module>
time_now=time.strftime("%H:%M:%S", time.localtime)
KeyboardInterrupt
Process finished with exit code 1
我是15:28:00的时候运行程序的,在设置时刻确实是执行了程序。
下面的异常是因为我手动退出了程序,这里不用管他。
具体实现发送情话
我们这里整理一下具体需求:
1.定时间点发送(上面已经实现了)
2.每次发送的时候从list中取出一个句子,下一次取出下一条,不能重复
3.list中的句子发送完毕之后要发短信通知我
取句子
思路:设置一个全局变量index,代表着下一条要发送的句子的下标,每次发送短信后,下标要增加1
发送完毕通知管理员
思路:每次进入任务但是发送短信之前都要比较index的值与list的长度(现在想起来,设计程序的时候用栈来储存数据会更好),如果index已经越界,直接给管理员发短信通知。
实现
from spider import Spider
from send import Send
import time
TIME_TO_DO='08:30:00' # 发送时间点
MSG_SUFFIX='\n来自你的小可爱——Baldwin' # 短信后缀
SOURCE_URL='http://www.1juzi.com/new/150542.html' # 情话资源地址
SEND_TO_TEL='+8618436354553' # 女神的手机号
SEND_TO_ME='舔狗,给女神发的短信已经用光了,快来更新!!!'
MY_TEL='+8618436354553' # 舔狗手机号
index=0 # 下一条短信的下标
sentenceList=Spider.getSentenceList(SOURCE_URL) # 情话列表
while True:
# 刷新
time_now=time.strftime("%H:%M:%S", time.localtime)
# 此处设置每天定时的时间
if time_now==TIME_TO_DO:
# 需要执行的动作
# 判断当前list有没有用光
if index >=len(sentenceList):
# 用光了就短信通知我
Send.sendSMSMsg(SEND_TO_ME, MY_TEL)
# 跳出
break
# 给女神发短信
content=sentenceList[index] + MSG_SUFFIX
Send.sendSMSMsg(content, SEND_TO_TEL)
# 下标加一
index +=1
# 因为以秒定时,所以暂停2秒,使之不会在1秒内执行多次
time.sleep(2)
debug模式下的各项测试:
短信发送测试
在idea debug模式下可以对time_now参数进行设置,把它设置成我们在前面要发送短信的那个时间点,成功进行了短信发送:
管理员通知测试
同样的在debug模式下,设置index的值为len(sentenceList),程序进入通知管理员模块中,这里不再演示。
封装
from spider import Spider
from send import Send
import time
TIME_TO_DO='08:30:00' # 发送时间点
MSG_SUFFIX='\n来自你的小可爱——Baldwin' # 短信后缀
SOURCE_URL='http://www.1juzi.com/new/150542.html' # 情话资源地址
SEND_TO_TEL='+8618436354553' # 女神的手机号
SEND_TO_ME='舔狗,给女神发的短信已经用光了,快来更新!!!'
MY_TEL='+8618436354553' # 舔狗手机号
def doSend:
index=0 # 下一条短信的下标
sentenceList=Spider.getSentenceList(SOURCE_URL) # 情话列表
while True:
# 刷新
time_now=time.strftime("%H:%M:%S", time.localtime)
# 此处设置每天定时的时间
if time_now==TIME_TO_DO:
# 需要执行的动作
# 判断当前list有没有用光
if index >=len(sentenceList):
# 用光了就短信通知我
Send.sendSMSMsg(SEND_TO_ME, MY_TEL)
# 跳出
break
# 给女神发短信
content=sentenceList[index] + MSG_SUFFIX
Send.sendSMSMsg(content, SEND_TO_TEL)
# 下标加一
index +=1
# 因为以秒定时,所以暂停2秒,使之不会在1秒内执行多次
time.sleep(2)
# 主程序入口
if __name__=='__main__':
doSend
小总结
这部分主要用到的模块:time,然后记得要把前两个我们自己做的模块导入进来。
总结
这个程序相对来说还算是比较容易的,只要跟着文章一步步来基本上不互出问题。
最后只要运行我们最后一个模块中主程序入口就好了,你也可以按照自己需求修改配置达到不同的效果。
我现在就去告诉女神去。
嘿嘿!女神秒回的,开心!
项目地址:https://gitee.com/dikeywork/IAmADog
版权声明:本文为CSDN博主「Baldwin_KeepMind」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:
https://blog.csdn.net/shouchenchuan5253/article/details/105753596
今日福利
遇见大咖
由 CSDN 全新专为技术人打造的高端对话栏目《大咖来了》来啦!
CSDN 创始人&董事长、极客帮创投创始合伙人蒋涛携手京东集团技术副总裁、IEEE Fellow、京东人工智能研究院常务副院长、深度学习及语音和语言实验室负责人何晓冬,来也科技 CTO 胡一川,共话中国 AI 应用元年来了,开发者及企业的路径及发展方向!
为产品经理的基本能力要求之一,所有的产品经理都要求会使用Axure画原型。这篇文章,作者就分享了Axure 这款软件的基本知识,供各位参考学习。
Axure是产品经理用来绘制原型的工具,在快速迭代快速发展的当下,原型能验证设计的概念,将现有的需求转化为具体可视方案,让团队成员可以更好的理解需求方案。
这期内容先来熟悉一下Axure的操作界面。
AxureRP文件在页面窗格中,在“页面”窗格中进行管理。
单击“页面”窗格右上方的“添加页面”按钮,添加页面。
在“页面”窗格中双击页面名称,打开画布。
画布是设计原型的地方,可以根据自己的想法设计原型图,也可以根据设备设置页面尺寸。
AxureRP预先安装了基本元件、表单元件、菜单表格、标记元件等,除此之外,还可以创建自己的元件库或添加其他人创建的元件库。
从“元件库”窗格中拖动,也可以使用“插入菜单”中的选项来添加文本,图像和形状,将元件添加到画布。
双击,或者选中元件按Enter,编辑元件文本。
在“样式”窗格中可以改变元件的外观,例如,填充颜色,字体等,当然通过画布顶部样式工具栏也可以实现。
在“交互”窗格中给拖到画布中的元件添加交互。
1.在“页面”窗格中,添加一个新页面,现在应该有两个页面,第1页和第2页。
2.在第1页上,将按钮元件从“元件库”窗格拖到画布上,选中按钮,在“交互”窗格中单击“单击”或“点击”→“打开链接”,在列表中选择第2页,然后单击确定。
3.在浏览器中打开原型,单击按钮会转到第2页。
在页面上动态显示和隐藏元件。
使用样式效果更改将鼠标悬停,单击并进行其他操作时的部件的视觉外观。
单击界面右上方的“共享”、“发布”按钮,并指定名称和密码,将原型分享给开发或其他同学。
在AxureRP界面环境的中心是画布,可以通过排列元件来创建图表,画布周围是工具栏和工具面板,允许自定义图表样式和交互并与其他人分享。
*提示:可以在视图菜单中切换界面的窗格和工具栏。
界面窗格可以被拖放到任何地方,甚至可以变成自由浮动的窗口,或者放在绿松石热区,固定在Axure界面中的新位置。
通过点击:视图→工具栏→自定义主工具栏更改显示在主工具栏中的图标,或右键单击工具栏中的空白区域,在上下文菜单中选择自定义工具栏。
在出现的模式中,选中要包含在主工具栏中的项目,对于极简界面,可以取消选中右下角的显示文本复选框图标隐藏工具栏中的图标标签。
单击右上角的恢复默认值,可以将工具栏恢复成默认设置。
在应用程序首选项中将AxureRP切换为深色用户界面模式,该选项位于顶部菜单中的以下位置之一,具体取决于操作系统:
在画布选项卡的外观下拉菜单中选择暗模式,Mac用户还可以选择“使用系统设置”,让AxureRP与操作系统界面设置匹配。
AxureRP会将文档转换为HTML,CSS,JavaScript和图像文件,统称为“HTML输出”,在浏览器中查看AxureRP原型并与之交互。
在设计原型的时候,需要定期在浏览器中测试进度,单击界面右上角的预览按钮以查看当前在画布上打开的页面。
预览时,浏览器中的原型链接到RP文件,文件更改时,在浏览器中刷新原型查看更改内容。
*预览仅在当前计算机上可见,无法从任何其他设备访问,如果需要在其他设备上查看原型或与其他设备共享原型,需发布到AxureCloud或保存并共享原型HTML输出的本地副本。
预览原型时,可以使用原型播放器的“控制台”面板来测试交互并进行故障排除。
默认情况下,预览原型在操作系统的默认浏览器中打开,并且原型播放器处于默认状态,在发布→预览选项中可以更改设置。
如果与其他同学共享原型,可以通过单击AxureRP界面右上角的分享按钮或通过app,Axure,Cloud的axurecloudweb发布。
发布成功会获得一个已发布原型的链接,可以与其他人共享并在任何具有web浏览器的设备上使用该链接。
Axure官方全部快捷键,以及快捷键对应功能的中英文名称,实际原型设计中,由于快捷键操作便捷性的差异,和每个人使用习惯的不同,应用到的快捷键并不会太多,而且不同人也各不相同,以下快捷键选择性使用。
AxureRP自动保存打开的RP文件的备份副本,恢复文件的早期版本或恢复未保存的更改,可以访问备份文件。
默认情况下,AxureRP每15分钟保存一次备份副本,并将备份文件保存在电脑上30天。
1.转到文件→从备份恢复文件,在打开的对话框中,可以找最近保存的备份文件列表。
2.在对话框左上角,输入1到30之间的值,查看备份天数,默认显示5天。
3.双击列表中的备份文件恢复文件,打开文件之前,系统将提示保存文件。
*提示:建议使用新文件名保存恢复文件,避免要盖最近保存的文件。
一旦恢复并保存了备份文件,可以直接从恢复RP文件继续工作,或者,按照以下步骤更改从备份文件导入原始文件:
默认情况,AxureRP每15分钟保存一次所有打开的RP文件副本。
在文件→备份设置,对话框中输入新的备份间隔值,可以设置为低至5分钟,高至60分钟。
在文件→备份设置,取消选中启用备份复选框,可以禁用备份功能。
*提示:建议不要禁用备份,电脑崩溃或断电,可能会导致文件丢失。
从元件库窗格中拖拽元件可以将元件添加到画布,或者使用界面左上角的插入菜单中的选项绘制多种元件形状。
使用鼠标可以将元件或元件组拖放到适当位置,使用上下左右键将元件在画布上微移,也可以使用顶部工具栏或样式窗格中的X和Y字段选择画布坐标。
当元件拖动到画布上时,会自动捕捉到画布网格、已设置的所有辅助线以及附近的其他元件。
在画布上选择多个元件时,可以更改整个选区的坐标,也可以重新定位选区内的每个元件:
设置顶部工具栏中的X和Y字段,会将选中的元件移到画布上的目标坐标,并且每个元件将保持与目标坐标的相对距离。
*提示:选中元件位于画布上的不同位置时,样式窗格中的X或Y字段将为空白。
在画布上选中元件并拖动手柄,可以调整元件大小,拖动时可以按住SHIFT维持元件的长宽比。
使用顶部工具栏或样式窗格中的W和H字段为元件选择尺寸,在W和H字段之间单击保持长宽比图标,可以维持元件的长宽比。
或者,在其中一个字段中输入新值后按SHIFT+ENTER一次调整多个元件的大小。
在画布上选中多个元件时,选择按比例整体调整整个选区的大小,也可以选择调整单个元件的大小。
顶部工具栏中的W和H字段,可以调整整个选区的大小,设置所选内容本身的宽度和高度,按比例调整所选元件的大小和位置,以适合所选尺寸。
样式窗格中的W和H字段,也可以调整每个元件的大小,例如,将每个元件的宽度设置为150px。
*提示:当选中的元件尺寸不同时,样式窗格中的W和H字段将为空白。
在画布上移动元件时,会出现红色辅助线,显示元件与附近的其他元件之间的距高,这些辅助线还会显示何时边缘对齐或中点对齐。
默认情况下,元件没有命名,在概要窗格和其他显示元件名称的位置,未命名元件在括号中显示元件型标识(矩形)、(图像)等。
如果在没有名称的元件上输入文本,它将显示文本的前几个单词,例如:默认段落元件在概要窗格中显示Loremipsumdolorsi.
在概要窗格中双击元件,可以给元件命名,还可以选中元件,在样式、交互或注释窗格的顶部输入名称。
为方便将多个元件命名、定位和交互,可以将元件设置为一个分组。
选择两个或多个元件,单击顶部工具栏中的组合。
选择一组元件,单击取消分组,拆分一组元件。
当两个或多个元件重叠时,层次顺序较高的元件显示在前面,层次顺序较低的元件显示在后面。
层顺序(或“z-index”)决定在Web浏览器中使用TAB键导航的元件(如:文本字段和下拉列表之类的元件)的TAB顺序,TAB键首先使最后一个元件聚焦,逐渐向前移动。
在概要窗格查看元件的特定深度/z-index位置,默认情况下,元件是从前到后排序的,因此窗格顶部的元件在前面,底部的元件在后面。(可以通过单击概要窗格右上方的排序和过滤器图标来更改排序方向。)
在概要窗格中上下拖动元件,更改元件的深度/z-index位置,顶部工具栏中也有用于实现此功能的按钮,使用顶层按钮将选定的元件移动到图的最前面,然后使用底层按钮将元件移动到最后面,还可以自定义顶部的工具栏,选中上移一层和下移一层按钮,这些按钮可向前/向后移动选中元件,一次一层。
在概要窗格中切换元件或者组名称旁边的箭头,可以折叠或展开元件组(或具有嵌套结构的元件,例如动态面板和中继器)
还可以单击概要窗格右上角的排序和筛选图标,选择折叠/展开全部以同时折叠或展开所有组。
顶部工具栏中的对齐和分布工具可用于自动组织选中的一组元件。
对齐工具可以将两个或多个选定的元件在左侧,中心或右侧水平对齐,或在顶部,中间或底部垂直对齐,新位置基于选择的第一个元件的位置,必须至少选择两个元件才能对齐。
分布工具可以水平或垂直地均匀分布三个或更多选中元件的位置,在分布元件之前,必须至少选择三个元件。
*提示:可以自定义顶部工具栏将这些选项合并到两个图标下,对齐和分布。
被锁定元件,不能在画布上拖动更改大小和位置,此时,用顶部工具栏或样式窗格中的字段才可以改变,这种配置有助于防止被锁定的元件意外移动或调整大小。
右键单击元件,在上下文菜单中的锁定下选择适当的选项,支持锁定或解锁元件,顶部工具栏锁定和解锁图标支持自定义。
*提示:锁定的元件具有红色边框,如果无法拖动或调整特定元件的大小,可以查看元件边框颜色查看元件是否被锁。
用“显示”操作来动态显示窗口,隐藏元件,在Web浏览器中不可见。
选中元件,单击顶部工具栏或样式面板中的隐藏图标,可以隐藏元件,隐藏元件在画布上显示为黄色,还可以在顶部菜单的视图→遮置中切换遮置。
在样式窗格可以自定义元件的外观样式。
用滑块或数字输入字段设置目标元件的整体不透明度,值与填充颜色和文本颜色不透明度值一起叠加显示。
字体设置:通过设置元件的字体,字型,字号和字体颜色来控制元件文本的样式。
行距:调整文本行之间的间距,可以设置特定的像素值,也可以选择自动以使用默认间距。
字符间距:调整元件文本中各个字符之间的间距,可以设置一个特定值(以十分之一像素为单位),也可以选择0以使用默认间距。
其他文本选项:此菜单包括以下格式选项:
文本阴影:向元件文本中的每个字符添加阴影。
对齐:六个对齐选项控制元件文本在其边框内的对齐,可以控制水平对齐和垂直对齐。
颜色:设置元件的填充颜色,元件填充颜色可以是实心的,也可以包括线性或径向渐变。
图像:设置形状元件的填充图像以及图像的对产、缩放和平铺。
颜色:设置线条元件或二维元件轮廓的颜色和不透明度,线条颜色可以是实心的,也可以包括线性渐变或径向渐变。
厚度:设置直线元件或二维元件轮廓的厚度。
模式:设置元件轮廓的模式。
可见性:控制矩形元件的哪些边显示边框
箭头:将箭头添加到行元件或开放形状的一端或两端。
给选中的元件添加外部或内部阴影,可以控制阴影的X和Y偏移,模糊和颜色。对于内部阴影,还可以控制阴影的扩散。
用数字半径字段将矩形元件的角弄圆。(也可以通过选择画布上的元件并拖动左上角的黄色三角形来执行操作。)
这些数字控件确定元件的文本和相应的边框(左,上,右和下)之间的最小间距(以像素为单位)。
元件样式属性可以将单个元件样式应用于多个元件,统一元件样式,如果更改选择元件样式中的属性之一,则更改将应用于使用该样式的所有元件。
选择元件,在样式窗格或样式工具栏的元件样式下拉列表中选择元件样式,可以将元件样式应用于一个或多个元件。
可以通过项目→元件样式管理器,或单击样式窗格或样式工具栏中的元件样式下拉菜单旁边的管理元件样式图标,查看和管理原型中的元件样式。
每个元件的视觉外观由在以下位置设置的样式属性决定,从最低优先级到最高优先级:
1.元件样式管理器对话框顶部的默认样式,样式属性选择将应用于原型中的每个元件。
2.元件已应用的元件样式(例如Box1样式),其样式属性选择将覆盖默认样式中的选择。
3.在样式窗格或样式工具栏上的元件自身上进行的样式属性设置,将覆盖默认样式和元件自己应用的窗口元件样式中的选择。
*提示:当元件的样式属性选择与其元件样式的选择不同时,元件样式名称后的样式窗格和样式工具栏中将带有星号。
在样式窗格中,单击样式名称右侧的更新可以进行快速更新,更新将应用于当前使用元件样式的项目中的所有元件,还将适用于使用元件样式的任何新加元件。
在样式窗格中,单击元件当前应用的元件样式右侧的创建,可以打开元件样式管理器对话框,其中元件的样式更改已添加到新样式中,在对话框的左列中,重命名新的元件样式。在右列中,可以对样式进行其他更改。
单击样式窗格或工具栏中的元件样式下拉菜单旁边的管理元件样式图标打开元件样式管理器,也可以通过项目→元件样式管理器菜单选项访问对话框。
单击对话框顶部的添加,或者,单击复制从现有样式制作新样式,添加新样式。
选中元件,单击删除,删除样式。
使用向上和向下箭头重新组织对话框中的样式。
在左栏中选择元件,编辑元件样式的样式属性。
在右列中,选中样式属性旁边的框,以使该属性覆盖默认样式,在适用的字段中选择该属性。
也可以一次编辑多种样式,在左栏中选择样式时,按住CTRL或CMD,在右栏中进行更改。
复制一个元件的样式并将其粘贴到另一个元件上。
第二个元件将具有第一个元件的所有样式属性,包括已经应用的元件样式。
在主菜单的编辑→格式刷中使用格式刷。
可以选择要复制和粘贴的单个属性,也可以一次粘贴到多个元件上。
此外,格式刷允许复制和粘贴样式效果。
样式效果是基于Web浏览器中的应用于交互动态的元件样式,只要元件处于特定状态(例如,将鼠标悬停或禁用),就会将元件样式从其基本样式更改为其他样式。
AxureRP预装了四个元件库——默认、流程、图标和示例UI模式——也可以安装其他库,甚至创建自己的元件库。
AxureRP元件库以独立的,rplib文件存储在电脑文件系统中。
元件窗格顶部的下拉菜单列出了当前加载到AxureRP中的所有元件库和本地映像文件夹,以及通过AxureCloud获取的任何元件库。
单击下拉列表并在列表中选择元件库,可以切换元件库,或者,选择所有库一次查看所有已加载的元件。
添加本地库文件
单击窗格顶部的添加元件库图标,在出现的文件浏览器中,找到所需的.rplib文件,选择将元件库添加到元件库窗格中,可以将本地储存的元件库添加到元件库中。
每次打开AxureRP时,都会尝试加载过去已添加的所有本地元件库。
AxureRP还将尝试加载在以下文件位置找到的所有元件库:
*提示:单击窗格右上方的选项菜单,选择在磁盘上查找,可以查看本地元件库文件的存储位置。
删除库
在元件库窗格顶部的下拉列表中选中,单击窗格右上方的选项菜单,然后选择删除元件库。
AxureRP画布包含许多功能来辅助设计图表,可以显示和自定义背景网格以及垂直和水平参考线,这些参考线可以应用于特定页面,也可以全局应用于项目中的所有页面。
用作简单的视觉指南,也可以让元件自动相互对齐。
通过视图→标尺,网格和参考线并选中显示网格,在画布上显示点或线的网格。
无论网格是否可见,拖动移动或调整元件大小时,元件都会捕捉到网格,可以通过取消选中视图→标尺,网格和参考线下的对齐网格禁用。
默认情况下,网格为10pxx10px的绘制点,如果需要,可以通过视图→标尺,网格和参考线→网格设置对话框中的选项设置自定义间隔,切换到线条,更改网格的颜色。
参考线是添加到画布上的线条,有助于标记应放置元件的位置,在视图→标尺,网格和参考线中切换各种参考线的可见性。
1)页面和全局参考线
页面参考线出现在项目的单个页面或母版中,从其中一个标尺上单击并拖动,将参考线放置在所需的X或Y值处,可以将页面参考线添加到画布,页面参考线默认为蓝色。
全局参考线类似于页面参考线,无论当前正在使用哪个页面或母版,参考线始终在画布上可见,按住CTRL或CMD并从标尺中拖动,创建全局参考线,全局参考线默认为紫红色。
2)删除页面和全局参考线
右键单击参考线,选择删除,或者,选择一个参考线或一组参考线,然后按键盘上的Delete键,可以删除参考线。
在视图→标尺,网格和参考线→除所有参考线,可以删除所有参考线
*提示:从一页删除全局参考线也会将其从项目的其他每一页中删除。
3)创建参考线对话框
用视图一标尺,网格和参考线一创建参考线对话框一次创建一系列页面或全局参考线。
可以为每个字段指走自己的值,也可以从对话框顶部的下拉列表中选择四个预设:
4)锁定参考线
选择参考线,单击鼠标右键,在上下文菜单中选择锁定,可以锁定页面和全局参考线,让参考线不能被移动或删除。
还可以通过检查视图→标尺,网格和参考线→锁定参考线,一次锁定项目中的所有参考线。
5)页面尺寸参考线
页面尺寸参考线显示了已走义页面尺寸的页面边界,页面顶部,左侧和右侧边界由出现在画布的视口区域周围的灰色蒙版标记,底部边界由虚线,褐红色线标记。
如果在页面上使用自适应视图,则页面尺寸参考线将在切换时视图时自动更新。
6)打印参考线
打印参考线显示了当前所选打印纸张尺寸的页面边界(可在文件→纸张尺寸和设置中找到),并目当你在纸张尺寸之间切换时,参考线会自动更新,默认情况下,打印参考线为灰色。
7)对齐参考线
在画布上拖动元件或对其进行调整大小时,参考线将自动捕捉到附近的所有参考线。
在视图→标尺,网格和参考线,取消选中对齐参考线,可以禁用此行为。
8)底层显示参考线
默认情况下,参考线展示在画布上的元件前面,始终可见。
打开视图→标尺,网格和参考线→参考线设置对话框,选中底层显示参考线,可以将参考线设置在元件后面。
在视图→标尺,网格和参考线,选中或取消选中显示标尺,可以切换画布的左边缘和上边缘标尺的可见性。
AxureRP原型被组织到页面中,可以在“页面”窗格中进行管理,添加AxureRP原型的页数没有限制,在“页面”窗格中双击页面名称,以在画布上将其打开。
单击“页面”窗格右上方的“添加页面”图标,添加页面,也可以右键单击页面,使用“添加”子菜单选择在被单击页面的之前,之后或作为其子页面添加页面。
在页面上单击鼠标右键,选择“删除”,或选中页面并按Delete,删除页面。
双击页面名称或右键单击页面名称,选择“重命名”更改页面名称,页面名称被修改时,指向该页面的现有链接将动态更新。
在“页面”窗格向上,向下,向右或向左拖动页面名称,或者,按住CTRL(Windows)或CMD(Mac)的同时使用键盘的箭头键,对页面进行重新排序。
*提示:“页面”窗格顶部的页面用作Web浏览器中原型的登录页面,重新排列页面顺序更改登录页面。
使用“页面”窗格右上方的“添加文件夹”图标添加文件夹,也可以右键单击页面,选择添加→文件夹,右键单击文件夹,选择“删除”或选中页面并按Delete。
*提示:删除文件夹会删除其中包含的页面,删除包含页面的文件夹之前,AxureRP会要求确认操作。
双击文件夹名称或右键单击该文件夹,选择“重命名”,修改文件夹名称。
页面名称左侧的图标指示该页面包含的图表类型,即“页面”或“流程”,右键单击页面,使用“图表类型”子菜单,更改图标。
在画布上打开的每个页面都由画布上方的选项卡表示,单击页面的选项卡显示在画布上,或使用键盘快捷键在这些选项卡中导航。
通过拖动重新排列页面选项卡的顺序,单击选项卡上的X图标关闭,也可以右键单击一个选项卡,从“关闭选项卡”,“关闭所有选项卡”和“关闭其他选项卡”中选择(仅打开你右键单击的选项卡)。
单击画布右上方的箭头图标,打开的页面的完整列表。
在“样式”窗格中通过编辑自定义原型页面样式。
默认情况下,页面尺寸是根据画布上的元件自动计算的,画布本身不受约束。
用页面尺寸下拉菜单从多种常用设备尺寸中进行选择为页面设置静态宽度或高度,或者使用“Web”和“自定义设备”选项定义自己的自定义尺寸。
为页面选择尺寸时,画布将更改大小以匹配,灰色负空格将白色视口区域框定,该框架也反映在Web浏览器中。
*提示:在移动设备上查看原型时,在原型播放器的视图设置中选择“缩放到宽度”,以使页面内容适合设备的视口。
单击“添加自适应视图”为每个目标视口分别设置一组页面尺寸,可以设计多钟视口尺寸,为每种视口大小调整内容大小和位置,然后Web浏览器将自动为目标设备的视口显示适当的视图。
在“左对齐”和“居中对齐”之间进行选择,确定页面内容是对齐到浏览器窗口的左边缘还是居中对齐。
*提示:页面对齐方式不会影响AxureRP画布上元件的对齐方式。
颜色:设置页面的背最颜色和不透明度
图片:设置页面的填充图像以及图像的对齐方式和填充类型。
*提示:在AxureRP和Web浏览器中都应用了颜色和图像填充。
低保真度模式会降低页面的视觉保真度,将注意力集中在设计用户体验上,而不是视觉上,在页面上启用“低保真”模式时,元件将转换为灰度,所有字体都替换为“Axure手写”字体,以使外观更粗糙。
1)事件、案例和动作
交互决定了元件和页面的动态行为,单击按钮导航到原型中的另一个页面是一种交互,如将鼠标悬停在一个元件上显示页面上的另一个元件。
在“交互”窗格中创建和管理原型的交互,从窗格底部的所选元件的最常见交互中选择,也可以单击“新建交互”来构建自己的交互。
*提示:单击“交互”窗格右下角的窗口图标,或双击任何事件或窗口元件名称打开“交互编辑器”对话框,处理更多交互。
2)交互结构
交互由三部分组成:
3)事件
事件相当于是特定页面和窗口元件的行为触发器,在Web浏览器中发生触发行为时,将触发事件,并且与此事件相关联的其他事件也会触发,例如,单击按钮导航到原型中的其他页面,则已触发基点击事件。
查看页面或窗口元件可用的事件,选中元件在“交互”窗格中单击“新建交互”,在列表中选择一个事件以配置其下的交互。(可以在此页面的下方查看可用页面的完整列表和窗口元件事件。)
在“交互”窗格中将其选中,后按DELETE,删除事件及其所有案例和操作。
4)案例
案例在Web浏览器中为响应页面或窗口元件事件触发而发生的有序操作列表,尽管默认情况下第一个案例的名称是隐藏的,当为事件分配一个或多个操作时,案例会自动添加到事件中。将光标悬停在事件名称上,然后单击右侧的“启用案例”查看第一个案例的名称。
可以通过单击事件名称右侧的“添加案例”图标来向事件添加其他案例,当事件在Web浏览器中触发时,可以在出现的菜单中选择要执行的事件,或者,设置条件逻辑以根据某些条件自动进行此确定。
在“交互”窗格中将其选中,按DELETE,可以删除案例,可以通过上下拖动事件来对事件重新排序。(使用条件逻辑时,案例的顺序很重要。)
5)动作
动作是响应页面或窗口元件事件触发而在Web浏览器中发生的更改。例如,如果单击按钮导航到原型中的其他页面,则响应按钮的点击事件,发生了“打开链接”操作。
在“新建互动”菜单中选择一个事件时,将显示可用操作的列表。选择动作后,系统会提示配置,通过将光标悬停在操作名称上方并单击右侧的“添加目标”,将其他目标添加到该操作(对于添加目标的操作)
单击案例底部的“+”“插入操作”图标,向案例添加更多操作。
在“交互”窗格中选择案例,按DELETE,删除案例。
可以通过上下拖动来重新排列案例中的动作,操作从上到下按顺序进行,因此按照希望案例在Web浏览器中发生的准确顺序进行排列。
1)鼠标
2)键盘
3)页面
。调整浏览器窗口的大小。
。使用“设置自适应视图”操作设置视图。
。在原型播放器的“自法应视图”下拉列表中选择一个新机图。
1)所有元件
鼠标
键盘
元件
2)下拉列表和列表框独有
3)文本输入框和文本域独有
4)动态面板独有
手势
动态面板
5)中继器独有
1)链接
打开链接:在以下位置打开原型页面或外部URL:
在框架中打开:更改在内联框架窗口元件中加载的页面或包含内联框架的页面。
动到元件(锚链接):将浏览器窗口滚动到页面上元件的位置。
2)元件
3)变量
4)中继器
5)其他
文本链接是一种独特的窗口元件类型,不能单独存在,必须将添加到形状元件上并作为元件的一部分。
1)创建和删除文字链接
在形状元件上双击或选择文本,按Enter,以编辑文本,然后,选择要变成链接的文本部分,在“交互”窗格中单击“插入文本链接”
在画布上选择文本链接,按DELETE,删除文本链接。
2)文字链接遮罩
默认情况下,文本链接用粉红色遮罩,可以在应用程序菜单的“视图”→“遮罩”中切换遮罩。
*提示:窗口元件遮罩,包括文本链接遮罩,不在Web浏览器中显示。
3)文字链接样式
选择文本链接,在“样式”窗格或样式工具栏中进行样式选择。
更新“文本链接”窗口元件样式,该样式默认情况下应用于所有文本链接。
鼠标悬停
当鼠标光标移到元件上时应用。(默认情况下在文本链接上启用。)
鼠标按下
单击窗口元件并按下鼠标按钮时应用。(默认情况下在文本链接上启用。)
选中
当通过“设置选中动作”将元件设置为选中状态时,或者在单击复选框或单选按钮时自动应用。
禁用
通过“禁用”操作将元件设置为禁用状态时应用。(默认情况下在例如文本字段和下拉列表之类的窗体元件上启用。)
获取焦点
当元件在Web浏览器中获取焦点时应用,例如文本字段和下拉列表之类的窗体元件在单击或切换到选项卡时会自动获取浏览器的焦点,还可以使用“焦点”操作动态地给元件浏览器焦点。
*提示:定义文本字段或文本区域上提示文本的样式。(默认情况下在这些元件上启用。)
启用样式效果
在编辑样式效果时,更改内容暂时应用于画布上的元件,在“交互”窗格中关闭样式效果的对话框时当前元件将返回默认样式。
*提示:创建一个元件样式保存样式选择,在“窗口元件样式”下拉菜单中选择窗口元件样式,启用样式效果。
更改窗口元件样式,会自动应用到使用它的所有窗口元件。
复制和粘贴样式效果
在主菜单的“编辑”→“格式刷”中找到格式刷,使用格式刷将样式效果从一个窗口元件复制并粘贴到另一个窗口元件。
可以对某些动作进行动画处理,在Web浏览器中发生时具有视觉效果,例如使用渐变动画隐藏元件或使用反弹动画移动元件。
每个动画都有两个部分:效果和时间。
以下效果可应用于更改窗口元件可见性的操作,这些是“显示/隐藏”操作和“设置面板状态”操作。
也称为“缓动”以下效果决定了在指定时间范围内动画的步调,这些可以应用于更改窗口元件或页面本身的空间方向的动作。包括“滚动到元件”,“移动”,“旋转”,“设置大小”和“设置不透明度”操作。
元件和页面注释是可以添加到设计中的文本元数据,使用这些注释来记录规范,将元件和页面与项目需求相关联,记录更改并与开发同学进行交流。
1)页面注释
如果在画布上没有选择任何元件,则页面注释字段位于“注释”窗格的顶部,单击进入页面注释字段以编辑其文本。
在编辑时,可以单击字段右上方的“格式”图标来格式化注释的文本。
2)元件注释
元件注释在“注释”窗格中的页面注释下方列出,在画布上没有选择任何元件时,将看到页面上存在的所有元件注释,在画布上或“概要”窗格中选中元件,过滤到单个元件的注释。
添加元件注释
单击“注释”窗格底部“新注释”区域中的注释字段之一,该注释字段以灰色的脚注图标标记。编辑此区域中的一个字段将创建一个新的元件注释。
分配元件注释
可以将窗口元件注释分配给页面上的任何窗口元件,并且一个窗口元件可以分配多个注释。此外,可以选择不分配元件注释。
如果在选择元件时创建新的元件注释,则该注释将自动分配给该元件。相反,如果在未选择任何元件的情况下创建新的元件注释,则该注释未分配;单击注释右上方的“分配元件”,分配未分配的注释;单击便笺右上角的元件名称,将当前分配的注释分配给其他元件,或取消分配。
删除元件注释
选中元件,按DELETE。
或者,右键单击窗口元件注释,然后在上下文菜单中选择“删除”。
在单击时按CMD(Mac)或CTRL(Windows)多选元件,按DELETE删除。
排列元件注释
元件的脚注图标上显示的数字与其在页面上存在的元件注解列表中的注解位置相对应。可以通过在“注释”窗格中向上,向下,向左或向右拖动注释来更改编号。还可以通过“布局”一“对脚注重新编号”菜单选项立即自动对所有脚注重新编号。
向左或向右拖动元件注释将使其缩进或缩进。
在另一个注下缩进一个注时,缩进注的编号将变成一个小数,表示其在父便笺下的位置。例如,在注释#4下缩进一个注释将使该注释缩进为注释#4.1,随后的注释将为#4.2,#4.3,依此类推。
3)包括元件文本和交互
单击注释右上角的回形针图标,选择要包括的项目,可以在其分配的注释中包括元件的文本和交互。
对窗口元件文本和交互的任何更改将自动反映在注释中。
复制和粘贴元件注释
复制带有所需注释的元,右键单击要粘贴注,可以将元件注释从一个元件复制并粘贴到另一个元件,然后选择选择性粘贴→粘贴元件注释。
添加注释字段
默认情况下,页面和元件均具有单个文本类型的注释字段。可以通过单击“注释”窗格右上方的“更多属性”图标或使用“项目”→“注释字段和集合”主菜单选项来添加更多字段。
在“注释字段和集”对话框中,使用“编辑元件注释”选项卡来管理元件注释字段,并使用“编辑页面注释”选项卡来管理页面注释字段。页面注释字段仅支持文本,但是窗口元件注释字段可以是文本,选择列表或数字字段。
4)元件注释字段集
在“编辑元件字段集”选项卡上,可以将元件注释字段组织成针对项目生命周期中不同受众或不同时期的集合。
创建至少一个字段集后,可以使用页面注释下方的下拉列表按字段集过滤“注释”窗格。
在浏览器中查看字段
在Web浏览器中查看原型时,可以通过单击原型播放器右上方的“文档”图标来查看当前页面的页面和元件注释。
使用HTML生成器设置的“注释”选项卡上的选项,更改页面和窗口元件注释在浏览器中的显示方式。
项目文档中的注释
页面和元件注释包含在Word文档规范和CSV报告中。
*内容中所用的AxurePR9版本号:3744
本文由 @PM大明同学 原创发布于人人都是产品经理。未经作者许可,禁止转载
题图来自Unsplash,基于CC0协议
该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务
文章「干货」Dependency check配置Mysql数据库存储nvd数据 中
介绍了如何把nvd库中的cve信息保存到数据库中的方法!但这仍然不是最优的方案,客户端执行脚本后,仍然需要更新cve数据到数据库中,虽然稳定性会得到保障,但是依然会浪费一定时间!那么我们的终极方案是什么呢?
实现思路其实也非常简单,只需两步
步骤一、定时更新最新的cve信息到数据库
步骤二、客户端执行dependency-check时,设置较长的校验时间使其无须检测更新,直接从数据库中读取数据
这里注意,步骤一和步骤二是分开进行的,先执行cve信息的更新,然后客户端执行dependency-check,这样就能保证dependency-check执行时数据库中cve数据的即时性了!
定时更新最新的cve信息到数据库
dependency-check.bat --cveStartYear 2022 --updateonly --dbDriverName com.mysql.cj.jdbc.Driver --connectionString jdbc:mysql://127.0.0.1:3306/dependencycheck --dbUser dcuser --propertyfile d:\dependency\pwd.properties
这条语句需要注意的参数有:
cveStartYear 2022 表示只更新2022年的nvd种子数据,因为我们数据库中已经有以前年份的数据了,所以通过这种形式则实现了迭代更新,会大量的缩短更新时间!注意:在dependencycheck 7.1才开始有该参数。
updateonly 表示只更新数据,不进行扫描
dbDriverName 表示数据库的dirver名称
connectionString 表示连接数据库的字符串,执行初始化脚本后创建的数据库叫dependencycheck
dbUser 是用户名,初始化的用户名叫 dcuser
propertyfile 这个参数是表示dcuser 的密码,需要在properties文件中存储,形式是:data.password=DC-Pass1337! 这个密码是执行初始化脚本后的默认密码
如果我们不需要对某种指定类型的文件进行检测分析,可以使用参数—disable*** 放弃对指定的文件类型进行分析进而提升检测效率。例如:disableRetireJS、disableNodeJS、disableNodeAudit、disableAssembly等等。
详细参数使用可以参考官方文档:
https://jeremylong.github.io/DependencyCheck/dependency-check-cli/arguments.html
详细的分析器参数含义如下图所示:
文档链接,https://jeremylong.github.io/DependencyCheck/analyzers/index.html
最后我们就可以写一条定时任务,在指定的时间对cve数据库进行及时更新了!
思路一:脚本编写定时任务,具体实现方式这里不再赘述,自行百度即可。也可以参考文档https://jeremylong.github.io/DependencyCheck/data/cachenvd.html)
思路二:通过jenkins 创建一个定时任务执行dependency-check
dependency-check.bat --scan ${scanProject} --format HTML --out ${project_path} --dbDriverName com.mysql.cj.jdbc.Driver --connectionString jdbc:mysql://127.0.0.1:3306/dependencycheck --dbUser dcuser --propertyfile /opt/scripts/config/pwd.properties --cveValidForHours 8800 --disableRetireJS --disableNodeJS --disableNodeAudit –disableAssembly
*请认真填写需求信息,我们会在24小时内与您取得联系。