`
dajiangxiaoyan
  • 浏览: 20917 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

selenium 级联打开页面上的所有超链接

 
阅读更多

前段时间在写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("&amp;", "&");
            list.add(temp);
        }
        return list;
    }
}
 
0
3
分享到:
评论

相关推荐

    Python Selenium 获取动态网页指定元素的超链接.pdf

    这段代码会打开指定的Boss直聘页面,查找所有的超链接元素,并打印出它们的href属性,即超链接地址。注意,实际应用中,需要根据实际的网页结构和需要获取的元素调整XPath表达式。 总结来说,Python结合Selenium、...

    java+selenium实现自动化打开页面的方法

    "java+selenium实现自动化打开页面的方法" 一、什么是Selenium? Selenium是一个自动化测试工具,可以模拟用户的行为来测试Web应用程序。它支持多种编程语言,如Java、Python、Ruby等。Selenium可以模拟浏览器的...

    Selenium Webdriver使用已打开的浏览器

    Selenium Webdriver是一款强大的自动化测试工具,用于模拟真实用户在网页上的交互操作。它支持多种浏览器,如Chrome、Firefox、IE等,使得测试脚本可以在不同的浏览器环境下运行。标题"使用已打开的浏览器"提示我们...

    Edge浏览器驱动程序 python程序使用使用selenium打开浏览器访问网页

    Edge浏览器驱动程序是微软开发的一款用于自动化测试和网页交互的工具,它允许程序员,特别是Python开发者,通过Selenium库来控制Microsoft Edge浏览器。Selenium是一个强大的Web自动化框架,广泛应用于功能测试、...

    用Selenium实现超链接正确性的自动化测试-徐鹥.pdf

    2. **定位超链接**:使用Selenium的定位策略,如CSS选择器或XPath,找到页面上的超链接元素。 3. **模拟点击**:调用click()方法模拟用户点击超链接。 4. **验证内容**:在新页面加载完成后,检查页面标题、内容或...

    [python]利用Selenium实现网页全屏截图+部分截图并web实现

    在Python编程领域,Selenium是一个强大的自动化测试工具,它能够模拟真实用户操作浏览器,进行网页交互。本教程将深入探讨如何使用Selenium实现网页的全屏截图以及选取特定区域进行截图,并通过Web服务展示这些截图...

    python获取指定网页上所有超链接的方法

    本文主要讲解了如何利用Python语言结合urllib2模块和正则表达式来获取指定网页上的所有超链接。 首先,urllib2是Python标准库中的一个模块,它支持HTTP、HTTPS、FTP等多种协议,可以用来访问互联网上的资源。urllib...

    selenium不打开浏览器进行自动化测试.docx

    通常情况下,Selenium 会打开浏览器来模拟用户行为,但是这也会占用系统资源和增加测试时间。幸运的是,Selenium 提供了无头浏览器模式(Headless 模式),可以在不打开浏览器的情况下进行自动化测试。 无头浏览器...

    scrapy结合selenium解析动态页面的实现

    虽然scrapy能够完美且快速的抓取静态页面,但是在现实中,目前绝大多数网站的页面都是动态页面,动态页面中的部分内容是浏览器运行页面中的JavaScript脚本动态生成的,爬取相对困难; 比如你信心满满的写好了一个...

    selenium + python 获取table数据的示例讲解

    方法一: 根据table的id属性和table中的某一个元素定位其在table中的位置 table包括表头,位置坐标都是从1开始算 tableId:table的id属性 queryContent:需要确定位置的内容 def get_table_content(tableId,...

    selenium实现页面对象实例

    2. **页面对象**:页面对象是代表页面的一个类,包含了该页面上的所有元素以及对这些元素的操作。例如,一个登录页面可能有用户名输入框、密码输入框和登录按钮,页面对象类会定义这些元素的属性(如 `username_...

    java+selenium+testng参数化打开百度搜索

    Java+Selenium+TestNG 参数化打开百度搜索 在自动化测试中,使用 Java+Selenium+TestNG 框架可以实现参数化打开百度搜索的功能。在本篇教程中,我们将详细介绍如何使用 Xml 配置文件和 Java 代码来实现参数化测试。...

    selenium-java-3.11.0.zip

    Selenium还提供了一个叫做`WebElement`的接口,它代表了网页上的一个元素。你可以通过CSS选择器、XPath或者其他方式定位页面上的元素,并对它们执行各种操作。同时,Selenium支持等待机制,如隐式等待和显式等待,...

    Selenium模拟浏览器万能爬虫指南.pdf

    虽然它在速度上无法与传统爬虫相媲美,但在复杂网页交互和动态内容抓取方面,Selenium所具有的优势让它成为了不可或缺的工具。在学习和使用Selenium时,开发者需要重点关注其安装配置、页面元素定位和框架搭建等方面...

    selenium右击另存为图片

    2. **导航到登录页面**:使用`get()`方法打开网页URL: ```python driver.get('http://www.example.com/login') ``` 3. **定位元素**:使用CSS选择器或XPath找到用户名、密码输入框及登录按钮: ```python ...

    selenium selenium selenium selenium selenium selenium selenium selenium

    selenium selenium selenium selenium selenium selenium selenium selenium selenium selenium selenium selenium selenium selenium

    Selenium

    - 打开命令行工具,切换到 `selenium-remote-control-0.9.0\server` 目录下,运行 `java -jar selenium-server.jar`。 - 如果一切正常,你会看到一些启动信息。这一步骤是必须的,因为 Selenium-RC 需要通过服务器...

    selenium-selenium-4.5.0.zip源码

    Selenium 是一个强大的开源自动化测试框架,用于网页应用。它支持多种编程语言,如 Java、Python、C#、Ruby 等,使测试工程师能够编写脚本来模拟用户在浏览器中的各种交互行为。Selenium 4.5.0 版本是该框架的一个...

    selenium+testng页面测试

    【标题】"selenium+testng页面测试"涉及的核心知识点主要围绕自动化测试工具Selenium以及测试框架TestNG展开,同时也提到了报告生成和错误处理机制。以下是对这些知识点的详细阐述: 1. **Selenium**: Selenium 是...

    selenium-java-4.0.0-alpha-6_javaselenium_

    描述中提到的 "selenium-api-4.0.0-alpha-6.jar" 文件是 Selenium 的核心库,包含了所有用于与浏览器进行交互的 API。这个 JAR 文件是开发者在编写 Selenium 测试脚本时需要导入的库,它提供了与浏览器驱动程序通信...

Global site tag (gtag.js) - Google Analytics