Chinaunix

标题: 熟悉Win32::IEAutomation的朋友请进 [打印本页]

作者: lhohoz    时间: 2013-07-26 09:30
标题: 熟悉Win32::IEAutomation的朋友请进
本帖最后由 lhohoz 于 2013-07-26 12:47 编辑
  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;
  4. use Win32::IEAutomation;

  5. my $ie = Win32::IEAutomation->new();
  6. $ie->gotoURL('目标页面');
  7. my @url = map { $_->linkUrl() } $ie->getAllLinks(); #获取所有地址
  8. my @link;
  9. foreach my $url (@url) {
  10.     push (@link, $url) if $url =~ m/&nh?id=/;  #捕获目标地址
  11. }
  12. foreach my $link (@link) {
  13.     $ie->getLink('linkurl:', "$link")->Click;  
  14.     $ie->getButton('value:', '确认')->Click;
  15.     $ie->gotoURL('目标页面');
  16. }
复制代码
多谢stanley_tam 朋友,问题已解决,更新CODE
作者: laputa73    时间: 2013-07-26 12:00
click第一个链接后页面就跳转了?
作者: stanley_tam    时间: 2013-07-26 12:04
click了之后对可以说是另外一个页面,得重新抓取link,再click。
作者: lhohoz    时间: 2013-07-26 12:19
回复 2# laputa73


    是的,提示can't call method "click" on an undefined value at Win32IEAutomation.pl line 14
    是不是第二个元素没被识别还是?但for循环完全可以输出全部页面的地址
作者: stanley_tam    时间: 2013-07-26 12:26
不会识别的。得从my @url = map { $_->linkUrl() } $ie->getAllLinks(); 开始获取所有地址,至于是第一个还是第二个,你得加一些其他的因素来控制,如果link有编号1,2,3之类的,或者link的text,就跟link放一块成一个数组的数组([1, link1],[2, link2],),在弄一个变量来记录已经点过的(不知道你那网页点过link是消失还是其他的。。。),如果已经点过就skip回复 4# lhohoz


   
作者: lhohoz    时间: 2013-07-26 12:27
stanley_tam 发表于 2013-07-26 12:04
click了之后对可以说是另外一个页面,得重新抓取link,再click。


目前的情况是就停在第一个元素页面了,因为从第二个开始报错。
作者: lhohoz    时间: 2013-07-26 12:32
本帖最后由 lhohoz 于 2013-07-26 12:32 编辑

回复 5# stanley_tam


    点过就消失了,连接类似nid=2888,nid=2999,没规律,目前只是把捕获到push到一个@link里,不知楼上朋友提到的如何做,会不会太复杂= =
作者: lhohoz    时间: 2013-07-26 12:34
回复 7# stanley_tam


    回主页看来是个好主意,我试试,多谢
作者: stanley_tam    时间: 2013-07-26 12:44
加个循环
  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;
  4. use Win32::IEAutomation;

  5. sub get_links;

  6. my $ie = Win32::IEAutomation->new();

  7. while (1){
  8.         $ie->gotoURL('网址省略');
  9.         my @url = map { $_->linkUrl() } $ie->getAllLinks(); #获取所有地址
  10.         my @link = grep {/&nh?id=/} @url;

  11.         if (scalar @link) {
  12.                 my $first_link = $link[0];
  13.                 $ie->getLink('linkurl:', $first_link)->Click;
  14.         }
  15.         else {
  16.                 last;
  17.         }
  18. }
  19. __END__
复制代码
回复 8# lhohoz


   
作者: lhohoz    时间: 2013-07-26 12:44
stanley_tam 发表于 2013-07-26 12:04
click了之后对可以说是另外一个页面,得重新抓取link,再click。


可行可行!!大感谢:wink: ,已更新顶楼代码




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2