免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 1485 | 回复: 10
打印 上一主题 下一主题

熟悉Win32::IEAutomation的朋友请进 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-07-26 09:30 |只看该作者 |倒序浏览
本帖最后由 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

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
2 [报告]
发表于 2013-07-26 12:00 |只看该作者
click第一个链接后页面就跳转了?

论坛徽章:
6
丑牛
日期:2014-03-21 15:42:04子鼠
日期:2014-04-12 11:50:17处女座
日期:2014-09-01 09:25:1115-16赛季CBA联赛之吉林
日期:2015-12-22 14:01:5215-16赛季CBA联赛之广东
日期:2016-03-08 18:49:422016科比退役纪念章
日期:2016-07-06 12:19:55
3 [报告]
发表于 2013-07-26 12:04 |只看该作者
click了之后对可以说是另外一个页面,得重新抓取link,再click。

论坛徽章:
0
4 [报告]
发表于 2013-07-26 12:19 |只看该作者
回复 2# laputa73


    是的,提示can't call method "click" on an undefined value at Win32IEAutomation.pl line 14
    是不是第二个元素没被识别还是?但for循环完全可以输出全部页面的地址

论坛徽章:
6
丑牛
日期:2014-03-21 15:42:04子鼠
日期:2014-04-12 11:50:17处女座
日期:2014-09-01 09:25:1115-16赛季CBA联赛之吉林
日期:2015-12-22 14:01:5215-16赛季CBA联赛之广东
日期:2016-03-08 18:49:422016科比退役纪念章
日期:2016-07-06 12:19:55
5 [报告]
发表于 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


   

论坛徽章:
0
6 [报告]
发表于 2013-07-26 12:27 |只看该作者
stanley_tam 发表于 2013-07-26 12:04
click了之后对可以说是另外一个页面,得重新抓取link,再click。


目前的情况是就停在第一个元素页面了,因为从第二个开始报错。

论坛徽章:
6
丑牛
日期:2014-03-21 15:42:04子鼠
日期:2014-04-12 11:50:17处女座
日期:2014-09-01 09:25:1115-16赛季CBA联赛之吉林
日期:2015-12-22 14:01:5215-16赛季CBA联赛之广东
日期:2016-03-08 18:49:422016科比退役纪念章
日期:2016-07-06 12:19:55
7
发表于 2013-07-26 12:31
那你得抓到回主页的link,点击。然后再抓到所有的link,点第二个。。。回复 6# lhohoz


   

论坛徽章:
0
8 [报告]
发表于 2013-07-26 12:32 |只看该作者
本帖最后由 lhohoz 于 2013-07-26 12:32 编辑

回复 5# stanley_tam


    点过就消失了,连接类似nid=2888,nid=2999,没规律,目前只是把捕获到push到一个@link里,不知楼上朋友提到的如何做,会不会太复杂= =

论坛徽章:
0
9 [报告]
发表于 2013-07-26 12:34 |只看该作者
回复 7# stanley_tam


    回主页看来是个好主意,我试试,多谢

论坛徽章:
6
丑牛
日期:2014-03-21 15:42:04子鼠
日期:2014-04-12 11:50:17处女座
日期:2014-09-01 09:25:1115-16赛季CBA联赛之吉林
日期:2015-12-22 14:01:5215-16赛季CBA联赛之广东
日期:2016-03-08 18:49:422016科比退役纪念章
日期:2016-07-06 12:19:55
10 [报告]
发表于 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


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP