liangzz 发表于 2012-4-28 16:57:51

【求助】_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>&nbsp;&nbsp;&nbsp;国家级正职</OPTION>
<OPTION value=26010200>&nbsp;&nbsp;&nbsp;国家级副职</OPTION>
<OPTION value=26010300>&nbsp;&nbsp;&nbsp;省部级正职</OPTION>
<OPTION value=26010400>&nbsp;&nbsp;&nbsp;省部级副职</OPTION>
<OPTION value=26010500>&nbsp;&nbsp;&nbsp;厅局级正职</OPTION>
<OPTION value=26010600>&nbsp;&nbsp;&nbsp;厅局级副职</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="&nbsp;&nbsp;&nbsp;国家级正职"

_IEFormElementOptionSelect($oQuery, $Value, -1, "byText")=============================
在"byText"模式下,无论$value="&nbsp;&nbsp;&nbsp;国家级正职"还是$value="   国家级正职"或者$value="国家级正职"
都无法使目标列表框的数据更改为“国家级正职”

请注意,这里只讨论_IEFormElementOptionSelect的"byText"模式,其他模式不再讨论之列

请大家拔刀相助!!!!谢谢谢谢!

风行者 发表于 2012-4-28 17:09:04

html的option的">"呢?

风行者 发表于 2012-4-28 19:29:28

value 和 text不一样

风行者 发表于 2012-4-28 19:31:50

本帖最后由 风行者 于 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基索引选择下拉第一个

user3000 发表于 2012-4-28 20:24:01

回复 4# 风行者

老大, 您热心过头?
我看楼主写着:
"请注意,这里只讨论_IEFormElementOptionSelect的"byText"模式,其他模式不再讨论之列"

风行者 发表于 2012-4-28 20:27:34

_IEFormElementOptionSelect($Ele,26010100) ;按值

komaau3 发表于 2012-4-28 20:47:41

&nbsp替换成空格呢?

风行者 发表于 2012-4-28 21:23:26

&nbsp 看上去是空格,但是编码不一样,udf里
是直接判断是否相等的,下面是部分代码
$oItems = $o_object.options
For $oItem In $oItems
                                If String($oItem.text) = $s_string Then

但是这样判断并不会相等,测试转换几种编码都不成功

shqf 发表于 2012-4-29 22:24:40

不知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")

lpxx 发表于 2012-4-29 23:11:04


风行者 发表于 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>&nbsp;&nbsp;&nbsp;国家级正职</OPTION>
<OPTION value=26010200>&nbsp;&nbsp;&nbsp;国家级副职</OPTION>
<OPTION value=26010300>&nbsp;&nbsp;&nbsp;省部级正职</OPTION>
<OPTION value=26010400>&nbsp;&nbsp;&nbsp;省部级副职</OPTION>
<OPTION value=26010500>&nbsp;&nbsp;&nbsp;厅局级正职</OPTION>
<OPTION value=26010600>&nbsp;&nbsp;&nbsp;厅局级副职</OPTION>
</SELECT></TD></table>
</body>
</html>

shqf 发表于 2012-4-30 07:33:47

目前所知$oItem.text获取&nbsp;的ascii值为十进制160,是扩展ascii码,而非普通的空格(ascii码为十进制32)。是HTML DOM option对象的text属性所决定。还是用9楼的方法吧,仍为byText模式,以夷制夷吧

liangzz 发表于 2012-4-30 11:55:52

非常感谢大家的热心帮忙,我试了一下,9楼的方法似乎对头(因为我那个表单里并非只有1个option对象,还需测试),非常感谢!有消息再麻烦大家!感谢风行者、user3000、komaau3、shqf、lpxx等发言以及未发言者的关注和指点!

shqf 发表于 2012-5-1 15:07:30

已完美解决楼主的问题。原想改变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的值,其&nbsp;的已转换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模式已没有问题了。编译后也一样呵。

liangzz 发表于 2012-5-15 15:27:48

{:face (229):}天才啊!非常感谢shqf!!!!!!

liangzz 发表于 2012-6-15 09:36:18

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]
查看完整版本: 【求助】_IEFormElementOptionSelect怎样检索含有&nbsp;的列表框项目?【已解决】