点击网页下拉选项时,存在多条选项,在显示框内内不能全部显示,后面的选项需要滚动鼠标才能选中,设置文本点击时,直接点到框外面去了

陈华荣_637176 2022-8-19 774

如果是要选取绿框再往下的选项(文本点击),机器人会在框外的网页上点一下,应该就是如果框够大就能点到的位置,请问怎么处理这样的?_点击网页下拉选项时,存在多条选项,在显示框内内不能全部显示,后面的选项需要滚动鼠标才能选中,设置文本点击时,直接点到框外面去了

最新回复 (16)
  • 陈华荣_637176 2022-8-19
    2
    做元素设置时,显示非下拉或列表,不能选取
  • 陈华荣_637176 2022-9-1
    3
    有高手做能解答这个问题吗?
  • 果子哩 2022-9-1
    4
    是所有的都偏移还是只有选择某一个程序这样
  • A784 2022-9-1
    5
    陈华荣_637176 有高手做能解答这个问题吗?
    加q408977465 得详细研究
  • 陈华荣_637176 2022-9-3
    6
    不是偏移,是下拉的选项很多,显示框内只显示一部分,需要点右侧的下拉进度条才能看全(如果那个显示框足够大,就能看全)。应用的场景是根据EXCEL表格中的内容(多条数据需要处理),去对点击对应的下拉内容。如果表格中的内容是在显示框内能看到的这几条,选项就能点到,不能看到的就没法点到。更麻烦的是显示框内虽然看不到,但机器人也会去点,点击的位置是在框外。按点击的位置看,应该就是如果显示框足够大,能够全部显示时,该选项所在的位置。这样就点到了其他内容上去了,造成运行错误。
  • 小胡哈 2022-9-8
    7
    陈华荣_637176 不是偏移,是下拉的选项很多,显示框内只显示一部分,需要点右侧的下拉进度条才能看全(如果那个显示框足够大,就能看全)。应用的场景是根据EXCEL表格中的内容(多条数据需要处理),去对点击对应的下拉内容。 ...
    你这个问题十几天了,看起来你还没解决它,并且在意这个问题……感觉也是一种下拉菜单的常见情况,
    建议尝试找到这个下拉列表目标元素(大概是个<ul>元素),然后使用「获取子元素、获取文本」命令,判断你期望选择的选项出现次序,然后根据次序,来使用键盘上下键、回车来选中。

  • 陈华荣_637176 2022-9-13
    8
    小胡哈 你这个问题十几天了,看起来你还没解决它,并且在意这个问题……感觉也是一种下拉菜单的常见情况, 建议尝试找到这个下拉列表目标元素(大概是个元素),然后使用「获取子元素、获取文本」命令,判断你期望选择的 ...
    谢谢提供这个思路,看起来只能用这个办法了。比较讨厌的是不同的任务下,下拉菜单还不是完全相同。只好每次先获取一下文本,然后找到文本对应的序号,通过键盘来处理。
  • 陈华荣_637176 2022-9-13
    9
    小胡哈 你这个问题十几天了,看起来你还没解决它,并且在意这个问题……感觉也是一种下拉菜单的常见情况, 建议尝试找到这个下拉列表目标元素(大概是个元素),然后使用「获取子元素、获取文本」命令,判断你期望选择的 ...
    之前还渡了另一个办法,就是循环选择,然后判断选中的是不是匹配,不是的话就选下一条再匹配。有时候找到最后一个选项的,都搞了30秒…………
  • 小胡哈 2022-9-13
    10
    陈华荣_637176 谢谢提供这个思路,看起来只能用这个办法了。比较讨厌的是不同的任务下,下拉菜单还不是完全相同。只好每次先获取一下文本,然后找到文本对应的序号,通过键盘来处理。


    我最近有些教学工作,这个问题我已经整理个教程,我把测试网站、代码发你,你先试下吧。


    代码中示例网站:

    http://tools.2345.com/jrhl.htm


    示例代码


    目标点击文本   = "2038"
    #icon("@res:default.png")
    arrElement = UiElement.GetChildren({"wnd":[{"cls":"Chrome_WidgetWin_1","title":"*","app":"chrome"},{"cls":"Chrome_RenderWidgetHostHWND","title":"Chrome Legacy Window"}],"html":[{"tag":"SELECT","id":"s_year"}]},{"bContinueOnError":False,"iDelayAfter":300,"iDelayBefore":200})
    按键计数  = 0
    For Each value In arrElement
    	#icon("@res:default.png")
    	sRet = UiElement.GetValue(value,{"bContinueOnError":False,"iDelayAfter":20,"iDelayBefore":20})
    	
    	TracePrint(sRet)
    	If sRet=目标点击文本  
    		
    		Break
    	Else
    		
    	End If
    	按键计数 = 按键计数+1
    Next
    TracePrint("按键计数="&按键计数)
    #icon("@res:9kunh6rl-9t4q-infa-g5v1-0ft298923vfn.png")
    Mouse.Action({"wnd":[{"cls":"Chrome_WidgetWin_1","title":"*","app":"chrome"},{"cls":"Chrome_RenderWidgetHostHWND","title":"Chrome Legacy Window"}],"html":[{"tag":"SELECT","id":"s_year"}]},"left","click",10000,{"bContinueOnError":False,"iDelayAfter":300,"iDelayBefore":200,"bSetForeground":True,"sCursorPosition":"Center","iCursorOffsetX":0,"iCursorOffsetY":0,"sKeyModifiers":[],"sSimulate":"simulate","bMoveSmoothly":False})
    Rem 根据需要,可以按多次方向键上,来定位到第一个选项。
    For i = 1 To 40 Step 1 
    	Dialog.Notify("点击方向上计数="&i, "UiBot", "0")
    	Keyboard.Press("Up", "press", [],{"iDelayAfter":20,"iDelayBefore":20,"sSimulate":"simulate"})
    	
    Next
    For i = 1 To 按键计数 Step 1 
    	Rem 如果按键计数=0(小于起始值),则计数循环内代码不会执行。
    	Dialog.Notify("点击方向下计数="&i, "UiBot", "0")
    	Keyboard.Press("Down", "press", [],{"iDelayAfter":20,"iDelayBefore":20,"sSimulate":"simulate"})
    	
    Next
    Keyboard.Press("Enter", "press", [],{"iDelayAfter":300,"iDelayBefore":200,"sSimulate":"simulate"})





  • 小胡哈 2022-9-13
    11

    以及你是用UI分析器看一下下拉列表是不是一个ul或ol标签元素,如果是的话,可能会更简单一些,通过「获取子元素,遍历每个子元素并获取文本,如果文本与目标一致则点击」的方式处理,UiBot对于ul内的子元素,有时是可以自动翻页再点击的。

  • 陈华荣_637176 2022-9-23
    12
    谢谢了,我学习下
  • A784 2022-9-23
    13
    使用JS轻松搞定
  • 毛东_677892 2022-9-25
    14
    不用上面代码这么麻烦,把点击类型改为后台或系统就行
  • 陈华荣_637176 2022-11-29
    15
    毛东_677892 不用上面代码这么麻烦,把点击类型改为后台或系统就行
    试过这个,不行。
  • 陈华荣_637176 2022-11-29
    16
    毛东_677892 不用上面代码这么麻烦,把点击类型改为后台或系统就行
     今天找到一个办法解决问题了,特地来分享一下,看看大家能不能用得上。
    1、先用数据抓取的方法,把这个长列表的多条选项内容全部抓出来,然后写入到excel表中,这样就获得所有选项内容和排序(这个排序很重要);
    2、通过excel查找获得相应选项的位置,取得选项的序号值;
    3、通过变量转换,把序号值赋给变量;
    4、通过点击元素文本命令,并把第3步的变量填入命令参数中,这样就完成了
    注意在这个过程中,要把序号值的变量变换为字符型,才能在命令参数中执行
  • zzq_614126 2022-11-29
    17
    用数据抓取出数据后,用key,value遍历取得key值呢?就不用写入Excel了,这个办法行不行?
返回
发新帖