【求助】_IEFormElementOptionSelect怎样检索含有 的列表框项目?【已解决】
本帖最后由 liangzz 于 2012-5-15 15:29 编辑测试网页为<html>
<head>
<title>Untitled</title>
</head>
<body>
<form name='frm1' onSubmit='javascript:alert("ExampleFormSubmitted");' method='post'>
<table cellspacing=6 cellpadding=6 border=1>
职务级别
<TD align=left><SELECT name=DutyLevel>
<OPTION value="" selected>请选择</OPTION>
<OPTION value=26010100> 国家级正职</OPTION>
<OPTION value=26010200> 国家级副职</OPTION>
<OPTION value=26010300> 省部级正职</OPTION>
<OPTION value=26010400> 省部级副职</OPTION>
<OPTION value=26010500> 厅局级正职</OPTION>
<OPTION value=26010600> 厅局级副职</OPTION>
</SELECT></TD></table>
</body>
</html>
=============================
使用代码#include <IE.au3>
Dim $oIE
$oIE = _IECreate(@ScriptDir & "\testhtml.htm",0,1,1,0);创建一个IE浏览器窗口
Local $oForm = _IEFormGetObjByName($oIE, "frm1")
$oQuery = _IEFormElementGetObjByName ($oForm, "DutyLevel")
$value=" 国家级正职"
_IEFormElementOptionSelect($oQuery, $Value, -1, "byText")=============================
在"byText"模式下,无论$value=" 国家级正职"还是$value=" 国家级正职"或者$value="国家级正职"
都无法使目标列表框的数据更改为“国家级正职”
请注意,这里只讨论_IEFormElementOptionSelect的"byText"模式,其他模式不再讨论之列
请大家拔刀相助!!!!谢谢谢谢! html的option的">"呢? value 和 text不一样 本帖最后由 风行者 于 2012-4-28 19:37 编辑
可以使用value和index模式选择
我用网页快捕直接生成的代码就可以得到:
;脚本生成于网页快捕
#include <IE.au3>
; #include <IEQuery.au3>
$oIE = _IEAttach("file:///C:/Documents%20and%20Settings/Administrator/桌面/a.html","url")
$Ele = _IEGetObjByName($oIE,"DutyLevel") ;注意相同name情况,需要第三参数
;_IEQuery通用获取元素对象
; $Ele = _IEQuery($oIE,"SELECT",'outertext=" 请选择 国家级正职 国家级副职 省部级正职 省部级副职 厅局级正职 厅局级副职"')
_IEFormElementOptionSelect($Ele,1,1,"byIndex") ;按0基索引选择下拉第一个 回复 4# 风行者
老大, 您热心过头?
我看楼主写着:
"请注意,这里只讨论_IEFormElementOptionSelect的"byText"模式,其他模式不再讨论之列" _IEFormElementOptionSelect($Ele,26010100) ;按值  替换成空格呢?   看上去是空格,但是编码不一样,udf里
是直接判断是否相等的,下面是部分代码
$oItems = $o_object.options
For $oItem In $oItems
If String($oItem.text) = $s_string Then
但是这样判断并不会相等,测试转换几种编码都不成功 不知au3内部是用什么编码判断的,以下思路可以暂时不管它。#include <IE.au3>
Local $oIE = _IECreate(@ScriptDir & "\testhtml.htm");创建一个IE浏览器窗口
Local $oOption = _IETagNameGetCollection($oIE, "Option", 2)
Local $oQuery = $oOption.text
Local $oForm = _IEFormGetObjByName($oIE, "frm1")
$oSelect = _IEFormElementGetObjByName($oForm, "DutyLevel")
Sleep(1000)
_IEFormElementOptionSelect($oSelect, $oQuery, 1, "byText")
风行者 发表于 2012-4-28 20:27 http://www.autoitx.com/images/common/back.gif<html>
<head>
<title>Untitled</title>
</head>
<body>
<form name='frm1' onSubmit='javascript:alert("ExampleFormSubmitted");' method='post'>
<table cellspacing=6 cellpadding=6 border=1>
职务级别
<TD align=left><SELECT name=DutyLevel onChange="alert(this.value)">
<OPTION value="" selected>请选择</OPTION>
<OPTION value=26010100> 国家级正职</OPTION>
<OPTION value=26010200> 国家级副职</OPTION>
<OPTION value=26010300> 省部级正职</OPTION>
<OPTION value=26010400> 省部级副职</OPTION>
<OPTION value=26010500> 厅局级正职</OPTION>
<OPTION value=26010600> 厅局级副职</OPTION>
</SELECT></TD></table>
</body>
</html> 目前所知$oItem.text获取 的ascii值为十进制160,是扩展ascii码,而非普通的空格(ascii码为十进制32)。是HTML DOM option对象的text属性所决定。还是用9楼的方法吧,仍为byText模式,以夷制夷吧 非常感谢大家的热心帮忙,我试了一下,9楼的方法似乎对头(因为我那个表单里并非只有1个option对象,还需测试),非常感谢!有消息再麻烦大家!感谢风行者、user3000、komaau3、shqf、lpxx等发言以及未发言者的关注和指点! 已完美解决楼主的问题。原想改变Scite的全局设置,想让ascii值为160(十进制)的字符能复制au3脚本文件中,却总不能如愿。后想出如下方法可解决:
#include <IE.au3>
Local $oIE = _IECreate(@ScriptDir & "\test.html")
Local $oOption = _IETagNameGetCollection($oIE, "Option", 2)
Local $oQuery = $oOption.text
Local $oFile = FileOpen(@ScriptDir & "\1.txt", 258);使用 Unicode UTF8 (无BOM)写模式
FileWrite($oFile, $oQuery)
FileClose($oFile)1.txt中得到好$oQuery的值,其 的已转换ascii值为十进制160,是扩展ascii码,而非普通的空格(ascii码为十进制32)。
再将如下代码复制到一个文本文件,如2.txt中:#include <IE.au3>
Local $oIE = _IECreate(@ScriptDir & "\test.html")
Local $oQuery = " 国家级副职"
Local $oForm = _IEFormGetObjByName($oIE, "frm1")
$oSelect = _IEFormElementGetObjByName($oForm, "DutyLevel")
Sleep(1000)
_IEFormElementOptionSelect($oSelect, $oQuery, 1, "byText")注意上面$oQuery的值前为三个普通空格,用1.txt中的内容替换$oQuery的值,再整个文件粘贴加Scite中,再运行吧, byText模式已没有问题了。编译后也一样呵。 {:face (229):}天才啊!非常感谢shqf!!!!!! shqf大哥的解决方案拜读了,但总觉得有些繁琐,以下是我利用for循环进行检索的解决方案,大家看看
#include <IE.au3>
$oIE = _IECreate(@ScriptDir & "\test.html",0,1,1,0);创建一个IE浏览器窗口
Local $oForm = _IEFormGetObjByName($oIE, "frm1")
$oQuery = _IEFormElementGetObjByName($oForm, "DutyLevel")
For $i=1 To 100;假设Option列表项目不满100个
$oOption = _IETagNameGetCollection($oQuery, "Option", $i)
$oTxt = $oOption.text
If StringStripWS($oTxt,8)="0" Then ExitLoop;若检索到Option列表项目长度为0即终止循环检索
If StringInStr($oTxt,"国家级副职") Then
_IEFormElementOptionSelect($oQuery, $i, 1, "byIndex")
ExitLoop
EndIf
Next
页:
[1]