前段时间在写web页面,为了方便用selenium写了一个级联打开页面上的所有超链接,代码如下
import com.thoughtworks.selenium.DefaultSelenium;
import com.thoughtworks.selenium.Selenium;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class OpenLinkTestThread extends Thread {
private EnviromentPara ep;
public OpenLinkTestThread(EnviromentPara ep) {
this.ep = ep;
}
@Override
public void run() {
openLinkTest();
}
public void openLinkTest() {
try {
Selenium selenium = new DefaultSelenium("localhost", Constant.port, ep.getBrowser(), ep.getUrl()); //4444 is default server port, ep.getBrowser():"*firefox","*googlechrome","*iexplore",不过ie支持不是很好
selenium.start();
//selenium.open(ep.getUrl());
selenium.openWindow(ep.getUrl(), ep.getUrl());//打开一个新的窗口,窗口id:ep.getUrl()
selenium.waitForPopUp(ep.getUrl(), "100000");
openLinkForOnePage(selenium, ep.getBrowser(), ep.getUrl(), ep.isIsRecursion(),1);//ep.isIsRecursion()是否递归打开链接
if (ep.isCloseOnFinish()) {
Thread.sleep(10000);
selenium.stop();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void openLinkForOnePage(Selenium selenium, String browser,
String url, boolean recursion, int recursionDeep) {
selenium.selectWindow(url);
String htmlSource = selenium.getHtmlSource();
List list = getAllLinkForOnePage(htmlSource);
for (int i = 0; list != null && i < list.size(); i++) {
selenium.openWindow((String) list.get(i), (String) list.get(i));
selenium.waitForPopUp((String) list.get(i), "100000");
if (recursion) {
if(recursionDeep < ep.getRecursionDeep())
openLinkForOnePage(selenium, browser, (String) list.get(i), recursion,recursionDeep+1);
}
}
}
public List getAllLinkForOnePage(String htmlSource) {//提取页面上的所有超链接
List list = new ArrayList();
Pattern linkElementPattern = Pattern.compile("<a\\s.*?href=\"([^\"]+)\"[^>]*>(.*?)</a>");
Matcher linkElementMatcher = linkElementPattern.matcher(htmlSource);
while (linkElementMatcher.find()) {
String temp = linkElementMatcher.group(1);
if(temp!=null)
temp=temp.trim();
if (temp==null||temp.startsWith("#") || temp.toLowerCase().startsWith("javascript:")) {//
continue;
}
temp = temp.replace("&", "&");
list.add(temp);
}
return list;
}
}
分享到:
相关推荐
XPath 是一门在 XML 文档中查找信息的语言, XSLT 中的主要元素,XQuery 和 XPointer 均构建于 XPath 表达式之上。 Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在...
Selenium Webdriver使用已打开的浏览器
今天小编就为大家分享一篇java+selenium实现自动化打开页面的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
[python]利用Selenium实现网页全屏截图+部分截图并web实现
selenium不打开浏览器进行自动化测试.docx
方法一: 根据table的id属性和table中的某一个元素定位其在table中的位置 table包括表头,位置坐标都是从1开始算 tableId:table的id属性 queryContent:需要确定位置的内容 def get_table_content(tableId,...
虽然scrapy能够完美且快速的抓取静态页面,但是在现实中,目前绝大多数网站的页面都是动态页面,动态页面中的部分内容是浏览器运行页面中的JavaScript脚本动态生成的,爬取相对困难; 比如你信心满满的写好了一个...
selenium selenium selenium selenium selenium selenium selenium selenium selenium selenium selenium selenium selenium selenium
仅仅用于初学者交流,意在与自动化测试初学者进行相互学习交流,简单的实现了java+selenium+testng参数化打开百度搜索
Edge浏览器驱动程序 python程序使用使用selenium打开浏览器访问网页
由于Selenium Server在启动浏览器时做了手脚,所以Selenium Server会接收到所有由它启动的浏览器发送的请求。 (6).Selenium Server接收到浏览器的发送的Http请求后,自己重组Http请求,获取对应的Web页面。 (7)....
用Selenium实现超链接正确性的自动化测试
selenium webdriver实现页面对象实例,一个简单的查询功能!
Edge浏览器驱动程序 python程序使用使用selenium打开浏览器访问网页
selenium打开微博.md
selenium webdriver 爬虫爬取动态网页,里面有chromedriver,windows平台可用,linux需要更换linux的chromedriver。修改代码可爬取其他网站的
Selenium_v2.5 Selenium_v2.5 Selenium_v2.5 Selenium_v2.5Selenium_v2.5 Selenium_v2.5
在Selenium WebDriver中使用By.Xpath快速定位页面元素,实现多属性定位一个元素。
1. 打开firefox,打开seleniumIDE进行脚本录制和回放,调试的时候可能需要firebug插件查看页面中的对象; 2. 生成junit4的java代码后,导入eclipse的java工程中,启动seleniumRC,然后直接运行回放脚本。 需要...
testng生成的报告乱码,换成了selenium 的2.18的jar包