ysping 发表于 2016-8-16 14:11:17

firefox中如何操作table对象?【已解决】

本帖最后由 ysping 于 2016-8-18 10:12 编辑

firefox中如何点击以下网页右上角“近200期”数据,请大神不吝赐教。
http://chart.ydniu.com/trend/k3bj/


注:不是下面的图片,编辑帖子不能去掉下面的图片。

heroxianf 发表于 2016-8-17 00:18:01

JavaScript应该简单完成

ysping 发表于 2016-8-17 09:19:48

回复 2# heroxianf


    不会JS啊!能给个例子吗?

nmgwddj 发表于 2016-8-17 11:18:30

回复 3# ysping


    贴出地址让大家试一下,一张图片不好调试,还是内嵌 frame。

ysping 发表于 2016-8-17 11:29:53

回复 4# nmgwddj


    是内部的地址

ysping 发表于 2016-8-17 11:37:07

回复 4# nmgwddj


    你可以以这个帖子中的网页调试一下吗?谢谢!firefox浏览器。
http://www.autoitx.com/thread-53019-1-1.html

nmgwddj 发表于 2016-8-17 13:27:35

回复 6# ysping

    以下的 document 在 au3 中用就是 $oIE.document.**。

    // 得到所有页面中的 table,如果 table 有 class 或 id,则根据 class 或 id 获取,ById、ByClassName
    document.getElementsByTagName('table');
    document.getElementsById('tableId'); 对应 au3 中 _IEGetObjById 函数
    document.getElementsByClassName('tableClassName');

    // 得到的 table 对象用一个变量存储起来,调用 table 的 childNodes 属性可以得到 table 下的所有子元素
    <thead>
    <tbody>
    <tfoot>
    使用 for in 遍历 $table.childNodes 返回的对象,判断哪个对象的标签名为 tbody,如果是则保存到一个变量中。

    // 调用上面保存到变量中 tbody 对象的 childNodes 方法得到一个所有<td>的列表,同样使用 for in 遍历,遍历时判断 <td> 的 name 属性是否等于 System Monitoring,如果找到则调用该节点的 click() 方法即可点击。
    $child.getAttribute('name'); 得到某个标签的 name 属性值

    下面这个例子虽然操作的不是 table,但是逻辑是一模一样的,会调用的函数也就这么几个。足够参考,细心琢磨:http://www.autoitx.com/forum.php?mod=redirect&goto=findpost&ptid=53019&pid=658604&fromuid=7628642

ysping 发表于 2016-8-17 13:30:26

回复 7# nmgwddj


    你这是IE浏览器,IE中我知道怎么操作。

因为某些环境只能用firefox,我想知道firefox中怎么操作?试了很多方法都不行。

ysping 发表于 2016-8-17 13:34:14

你的这个方法在firefox也可以吗?我先试试吧!

nmgwddj 发表于 2016-8-17 13:35:35

回复 8# ysping


    这些对 DOM 的操作是所有浏览器都一样的,只不过在 IE 中你用 _IE 系列函数得到浏览器对象,在 Firefox 中你用 _FF 系列函数得到浏览器对象,其他后面的做法都是一样的。

ysping 发表于 2016-8-17 13:44:22

我在firefox中用模仿操作时报错:
#include <FF.au3>
#include <FFEx.au3>
_FFStart("http://chart.ydniu.com/trend/k3bj/")
Sleep(2000)
If _FFIsConnected() Then
$domParent=_FFGetValueById('filters')
Local $childrenNodes = $domParent.childNodes
For $child In $childrenNodes
    If $child.getAttribute('value') == 200 Then
      $child.click()
    EndIf
Next
endif

出现错误:
变量必须是"Object"(对象)类型

ysping 发表于 2016-8-17 13:46:22

回复 10# nmgwddj


    麻烦看一下上面的写法对吗?报错了

nmgwddj 发表于 2016-8-17 14:31:34

回复 12# ysping

    这样的低级错误不应该犯的,使用函数之前应该先查一下函数的作用、参数、返回值。细心一点可以避免很多弯路。
    For In 遍历的是一个对象,而 _FFGetValueById 是返回一个 value 值,并非 Object。

   
   

    获取 Object 的方法应该是 _FFObjGet

   

nmgwddj 发表于 2016-8-17 14:38:35

本帖最后由 nmgwddj 于 2016-8-17 14:40 编辑

另外,这些都是 au3 的自定义函数,打开 FF.au3 和 IE.au3 内部,你会发现他们都是调用原生的 DOM 操作。只不过在外面包了一层壳。
所有原生 DOM 操作我昨天也发了你地址,仔细学习,别人总结下来的精华不是让我们一眼掠过的:http://www.runoob.com/htmldom/htmldom-tutorial.html
如果你仔细考虑了我回另外一篇帖子的内容,我觉得你不应该提出这样的问题。

ysping 发表于 2016-8-17 15:01:42

回复 14# nmgwddj


因为没有html、js基础,有些东西容易搞错,现在总算有点明白了。
谢谢!
页: [1] 2
查看完整版本: firefox中如何操作table对象?【已解决】