watij本来是用于web测试的,但是我发现利用它来做垂直爬虫,效果也很好
以下的代码抓了三个网站
package com.example.tests;
import watij.runtime.ie.IE;
import watij.finders.AttributeFinder;
import watij.finders.Finder;
import watij.finders.NameFinder;
import watij.finders.XPathFinder;
import watij.finders.FinderFactory.*;
import watij.elements.*;
public class WatijHotel {
public static void main(String[] args){
IE ie = new IE(),new_ie=null;
IE iectrip=null,ieelong=null;
try {
ie.start("http://hotel.qunar.com");
//ie.textField(new NameFinder("toCity")).set("北京");
//click("hchkParaSeachElong");
ie.checkbox(new AttributeFinder("id","hchkParaSeachElong")).click();
ie.button(new AttributeFinder("id","hbtnSearch")).click();
Links ls = ie.links(new AttributeFinder("target","_blank"));
//System.out.println(ls.toString());
ls.link(0).click();
new_ie = ie.childBrowser();
//System.out.println(new_ie.text());
//ie.link(new XPathFinder("//DIV[@id='jxContentPanel']//DIV[1]//DIV[1]//DIV[2]/A")).click();
new_ie.waitUntilReady(1000);
String text = new_ie.div(new AttributeFinder("class","detailInfoLinks")).text();
System.out.println(text);
String[] links = text.split("\\)");
String ctrip = "携程旅行网";
String elong = "艺龙旅行网";
String tctrip = "",telong="";
System.out.println(new_ie.childBrowserCount());
for(String link : links){
if(link.indexOf(ctrip)>=0){
try {
new_ie.link("预订网站").click();
tctrip = link + ")";
new_ie.link(tctrip).click();
String qunarprice = new_ie.table(
new AttributeFinder("class", "bookingTable"))
.text();
System.out.println(qunarprice);
new_ie.table(
new AttributeFinder("class", "bookingTable"))
.links().get(0).click();
int count = new_ie.childBrowserCount();
System.out.println(new_ie.childBrowserCount());
iectrip = new_ie.childBrowser(count - 1);
} catch (Exception e) {
e.printStackTrace();
}
} else if(link.indexOf(elong)>=0){
try {
new_ie.link("预订网站").click();
// table class="bookingTable"
telong = link + ")";
new_ie.link(telong).click();
String qunarprice = new_ie.table(
new AttributeFinder("class", "bookingTable"))
.text();
System.out.println(qunarprice);
new_ie.table(
new AttributeFinder("class", "bookingTable"))
.links().get(0).click();
int count = new_ie.childBrowserCount();
// System.out.println(new_ie.childBrowserCount());
ieelong = new_ie.childBrowser(count - 1);
// div class="taL left10_dbk2
} catch (Exception e) {
e.printStackTrace();
}
}
}
if(ieelong != null){
ieelong.waitUntilReady(10000);
// table class="border_2"
ieelong.waitUntilReady(20);
ieelong.div(new AttributeFinder("class", "taL left10_dbk2")).link(0).click();
//ieelong.executeScript("HotelDetails('50101472','rate','eLong')");
ieelong.waitUntilReady(10000);
//ieelong.div(new AttributeFinder("class", "taL left10_dbk2"));
//System.out.println("ieelong=" + ieelong.text());
// form id="HotSrch"
//ieelong.table();
System.out.println(ieelong.text());
//System.out.println(elongprice);
}
if(iectrip != null){
iectrip.waitUntilReady(10000);
// table class="pubGlobal_romList01"
String ctripprice = iectrip.table(new AttributeFinder("class","pubGlobal_romList01")).text();
System.out.println(ctripprice);
}
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
if(ie != null)
ie.close();
if(new_ie != null)
new_ie.close();
if(ieelong != null)
ieelong.close();
if(iectrip != null)
iectrip.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
分享到:
相关推荐
在 Selenium WebDriver 中使用 By.Xpath 快速定位页面元素可以实现多属性定位一个元素。例如,在登录页面密码框定位中,可以使用 By.Xpath 来定位密码框,然后进行清空和输入密码操作。 使用 By.Xpath 定位页面元素...
项目中的`remi.txt`可能包含了生成器的使用说明、开发者注释或源代码的一部分,而`XpathTest`可能是一个测试用例或测试脚本,用于检验XPath生成器的功能和性能。 XPath在开发中有着广泛的应用,例如网页抓取、XML...
在这个场景中,我们将讨论如何使用Python的`lxml`库结合XPath来实现图片的爬取。`lxml`库提供了高效的XML和HTML处理能力,支持XPath 1.0规范。 首先,让我们了解基本的XPath语法。XPath通过路径表达式来选取XML或...
Xpath生成器,可以通过输入的文件,进行匹配,生成全部可用的Xpath,犹豫HTML中部分标签允许无结束,如:("LINK" ,"META","SCRIPT","IMG" ,"INPUT", "FORM")故已经被忽略,如有朋友发现其中有问题,请告诉我哦...
下面是一段简单的示例代码,展示了如何在Java中使用XPath获取XML数据: ```java import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.Document; ...
【实验3XML文件映射与转换(使用XSLT和XPath)】 实验主要涉及XML、XSLT和XPath这三个核心技术,它们在数据处理和信息展示中扮演着重要角色。 XML(Extensible Markup Language)是一种标记语言,用于描述数据结构...
通过上述技巧的学习,我们可以更加灵活地使用XPath来进行元素定位,这对于自动化测试工程师来说是非常重要的技能。无论是面对复杂的页面结构还是变化多端的元素属性,掌握好XPath都能让我们事半功倍。希望本文的内容...
XCat是一个命令行程序,用于辅助XPath注入漏洞的利用。XCat使用Python编写并开放源代码。XCat正常使用需要python的SimpleXMLWriter模块。 标签:XPath
通过编写XPath表达式,可以准确地定位到网页上的按钮、链接或其他交互元素,从而实现自动点击、填写表单等操作。此外,对于数据抓取项目,XPath可以快速定位到网页上的特定数据块,如新闻标题、评论内容等,大大提高...
在本文中,我们将深入探讨如何使用Python自动化工具Selenium结合XPath来实现自动抢票或抢购功能。XPath是一种在XML文档中查找信息的语言,也可以在HTML文档中使用,尤其是在自动化测试和网页抓取中非常常见。 首先...
在IT行业中,尤其是在网页爬虫和自动化测试领域,获取网页上的XPath和CSS选择器路径是一项基本且重要的技能。XPath和CSS选择器是两种常见的定位HTML元素的方法,它们被广泛用于网页抓取、网页自动化和测试工具中。这...
5. **浏览器兼容性**:虽然题目中提到的是IE,但考虑到现代开发环境,小工具可能还需要处理其他浏览器,如Firefox、Chrome等,它们使用不同的DOM和XPath实现。因此,代码可能需要进行条件判断或使用浏览器API来实现...
5. **应用到项目**:将生成的XPath应用于自动化脚本或数据抓取程序中,实现对网页元素的选取和操作。 在实际开发中,XPath Helper能够极大地提升工作效率,简化Web开发和数据抓取的工作流程。它不仅可以帮助初学者...
这篇博文“javascript XPath 实现”可能详细介绍了如何在JavaScript中使用XPath来查询和操作XML文档。 首先,XPath的基本概念包括路径表达式、轴、节点测试和谓语等。路径表达式用于描述XML文档中的节点路径,如"/...
在Java开发中,XML处理是常见的任务之一,...在提供的`jdomdemo`压缩包文件中,可能包含了一个或者多个示例程序,演示了如何使用JDOM和XPath进行XML处理。你可以解压并运行这些程序,以便更直观地理解它们的工作原理。
将这些jar包添加到项目的类路径中,开发者就可以在代码中直接调用DOM4J和XPath的功能,实现对XML文档的强大操作。 总之,DOM4J和XPath是XML处理领域的重要工具,它们为Java开发者提供了强大而灵活的XML处理能力,...
总结,这个爬虫demo是学习和实践Xpath技术的良好起点,它揭示了如何使用Python和Xpath来提取网页数据,这对于数据分析、信息监控或者构建定制化的信息获取系统都是非常有价值的技能。同时,理解并熟练掌握Xpath可以...
XPath在Web开发中起着至关重要的作用,尤其是在进行自动化测试、数据提取和网页抓取时。XPath Helper通过提供直观的用户界面,使得用户可以直接在浏览器中输入XPath查询,实时查看查询结果,极大地简化了这个过程。 ...
XPath是一种在XML文档中查找信息的语言,对于数据提取和解析尤其有效。在这个压缩包中,我们找到了火狐的老版本浏览器和一个专门针对XPath的插件,这对于Python开发者来说,是一个极好的工具集,可以方便地进行网页...