之前基本没有用过WWW::Mechanize。上周工作不是很忙,简单实践了这个模块,感觉还是很强大的。

我的想法是:

用一个脚本来登录公司的twiki,然后跳转到一个固定的link。安排程序每天将一些统计的数据放到这个twiki下。(期间也实践了一下上传文件部分)

代码如下:

#!/usr/local/bin/perl use strict; use warnings; use Data::Dumper; use WWW::Mechanize; use HTTP::Cookies; use LWP::Debug qw(+); use HTTP::Request; use LWP::UserAgent; use HTTP::Request::Common; use POSIX qw(strftime); # 配置信息 my $topic = 'YourLink'; my $domain= 'twiki.test.com'; my $url = "http://$domain/twiki/bin/view.pl/Tech/$topic"; my $un = 'xx'; ##用户名 my $pw = 'xx'; ##密码 my @datas = qw(data1 data2); ## test data # 构建agent my $agent = WWW::Mechanize->new(cookie_jar => {}, autocheck => 0); $agent->{onerror}=/&WWW::Mechanize::_warn; $agent->agent('Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.3) Gecko/20100407 Ubuntu/9.10 (karmic) Firefox/3.6.3'); $agent->get($url); # 用户名/密码 登录 $agent->submit_form( form_number => 1, fields => { password => $pw, username => $un }, ); die unless ($agent->success); ##页面上所有link my @links = $agent->links(); my $write_url; ## 编辑twiki内容的url my $attach_url; ## 上传附件的url for my $wlink (@links) { my $url_str = $wlink->url; if ($url_str =~ /$domain//twiki//bin//edit.pl//Tech//$topic/?t/ ) { $write_url = $url_str; } if ($url_str =~ ///twiki//bin//attach.pl//Tech//$topic/ ) { $attach_url = $url_str; } } if ($write_url) { #print "Write Twiki/n"; write_twiki(); } if ($attach_url ) { #print "Attache File/n"; attach_file(); } ############## sub write_twiki { $agent->credentials($un, $pw); ### HTTP Basic authentication for all sites and realms until further notice $agent->get($write_url); if ($agent->success ) { #print $agent->content; my $text_inputs = ($agent->find_all_inputs( ## 第一个textare type => 'textarea', name_regex => qr/^text$/, ))[0]; ## 编辑twiki的数据 my $orig = $text_inputs->value; ## 原来的内容 my $att_img =""; ## 上传的图片放到twiki最后(或者其他位置) if ($orig =~ /(<img/ssrc.*?ATTACHURLPATH[^>]+//>).*/) { $att_img = $1; } $orig =~ s//*/s*test/.gif: <br //>//ig; $orig =~ s/$att_img//g; $orig =~ s//s+$//g; my $today = strftime("%Y.%m.%d", localtime( time() ) ); my $content = $orig."/n---++ $today/n"; ## twiki语法 for my $data (@datas) { $content .= " 1 $data OK. /n"; } $content .= "$att_img /n"; #print $content; $agent->submit_form( form_number => 1, fields => { text => $content}, ); die unless ($agent->success); } else { #print $agent->content; print $agent->status(); my $res= $agent->response(); print $res->as_string } } sub attach_file { $agent->credentials($un, $pw); ### HTTP Basic authentication for all sites and realms until further notice $agent->get($attach_url); if ($agent->success ) { #print $agent->content; $agent->form_number(1); $agent->field('filepath' =>'image/test.gif'); $agent->field('createlink' => 1); $agent->submit(); die unless ($agent->success); } }

感觉还是不错的。基于此基础,可以干很多事情哦~

用WWW::Mechanize来写twiki相关推荐

  1. python模块学习---mechanize(模拟浏览器)

    mechanize是非常合适的模拟浏览器的模块. 它的特点主要有: 1 http,https协议等. 2 简单的HTML表单填写. 3 浏览器历史记录和重载. 4 Referer的HTTP头的正确添加 ...

  2. php和python写爬虫-可以写爬虫的那么多,为什么只有python火了?

    原标题:可以写爬虫的那么多,为什么只有python火了? 网络爬虫: 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的 ...

  3. php和python写爬虫-python和php哪个更适合写爬虫

    python和PHP相比较,python适合做爬虫.原因如下 抓取网页本身的接口 相比与其他静态编程语言,如java,c#,C++,python抓取网页文档的接口更简洁:相比其他动态脚本语言,如per ...

  4. python模拟浏览器模块,python模块学习---mechanize(模拟浏览器)

    mechanize是非常合适的模拟浏览器的模块. 它的特点主要有: 1 http,https协议等. 2 简单的HTML表单填写. 3 浏览器历史记录和重载. 4 Referer的HTTP头的正确添加 ...

  5. TWiki 语法格式(TWiki语法教程及TWiki使用技巧)

    TWiki 语法格式(TWiki语法教程及TWiki使用技巧) Winter 翻译 用TWiki 编辑就和平时直接写文本一样简单 -- 就像写email.如果你喜欢,你可以使用HTML代码,但是并不要 ...

  6. 用python写网络爬虫 第2版 pd_用Python写网络爬虫(第2版)

    用Python写网络爬虫(第2版)电子书 畅销的Python网络爬虫发实战图书全新升级版,上一版年销量近40000册. 针对Python 3.6版本编写. 提供示例完整源码和实例网站搭建源码,确保用户 ...

  7. python为什么叫爬虫-可以写爬虫的那么多,为什么只有python火了?

    原标题:可以写爬虫的那么多,为什么只有python火了? 网络爬虫: 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的 ...

  8. python中脚本是指什么_你用Python写过最牛逼的程序/脚本是什么?

    有网友在 Quora 上提问,「你用 Python 写过最牛逼的程序/脚本是什么?」.本文摘编了 3 个国外程序员的多个小项目,含代码. Manoj Memana Jayakumar, 3000+ 顶 ...

  9. Python实例教程Mechanize模块编写爬虫的要点解析

    Python使用Mechanize模块编写爬虫的要点解析 mechanize是对urllib2的部分功能的替换,能够更好的模拟浏览器行为,在web访问控制方面做得更全面.结合beautifulsoup ...

最新文章

  1. SQL Server 2012入门T-SQL基础篇:(8)Delete语句
  2. 题目1183:守形数
  3. springmvc atomikos mysql数据源_springboot+atomikos+多数据源管理事务(mysql 8.0)
  4. sonar 设置模板(Template)
  5. Struts2之拦截器
  6. Codeforces 1187E - Tree Painting(树上所有节点的儿子数量和最大)
  7. Navicat过期问题的解决
  8. 《大道至简第二章读后感》
  9. Oracle查询优化改写技巧与案例总结四
  10. cad2012打开后闪退_windows7打不开CAD2012出现闪退的处理方法
  11. 第十六届全国大学智能车竞赛线上国赛部分队伍名单(除东北赛区之外)
  12. 思岚SLAMTEC A1开箱测试(实现雷达数据的查看+hector_slam建图)
  13. 聊一聊C语言位域/位段
  14. 咱就是说,方言配音的软件能有多少
  15. 问题分析——Maven打包后发版,静态资源找不到
  16. kubernetes1.6中redis-mong-zookeepe-rabbitmq集群部署
  17. Android 仿微信通讯录 导航分组列表-上】使用ItemDecoration为RecyclerView打造带悬停头部的分组列表
  18. php 商品多规格的实现,sku实现
  19. nexus安装与使用
  20. 【Android】声音播放截断(骤停)的问题

热门文章

  1. C语言期末复习题(带答案)
  2. 聊一聊我们应该如何有效学习
  3. jquery循环获取div之间的内容
  4. python文件的打开模式有几种_以下选项中,不是Python打开文件模式的是( )_学小易找答案...
  5. 至联云课堂:隐私泄露屡禁不止,根本原因其实是...
  6. POJO、JavaBean、EJB的区别
  7. 互联网中B端客户和C端客户的区别?
  8. JS 使用find 查找数组中某个元素
  9. 能够可视化访问和查看H2数据库的工具
  10. 窗体内公用的数据表,在使用视图和行过滤时的有趣现象