selenium+java入门demo

简介: selenium+java入门demo

看到这里,我就不介绍太多的selenium是什么了(jar包:https://download.csdn.net/download/qq_40374604/10807974

需要的jar包和常见问题在个人分类的其他文章中

demo中有phantomjs,无浏览器访问,相关文章请看个人博客爬虫分类

另外(访问像微博https://weibo.com/这样的网站,用到...driver.findElement(By.className("list_title_s"));//查找这个class,让程序等待需要的内容加载完成...)(第二篇代码)

package net.domain;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.TimeUnit;
 
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
 
public class SeleniumDynamicWeb {
  public static void main(String[] args) {
    Search();
    //System.setProperty("phantomjs.binary.path", "tools\\phantomjs.exe");//无浏览器访问
    System.setProperty("webdriver.chrome.driver", "tools\\chromedriver.exe");// chromedriver服务地址
    WebDriver driver = new ChromeDriver(); // 新建一个WebDriver 的对象,但是new
                        // 的是FirefoxDriver的驱动
    driver.get("http://www.baidu.com");// 打开指定的网站
    driver.findElement(By.id("kw")).sendKeys(
        new String[] { "rodert_wang csdn" });// 找到kw元素的id,然后输入hello
    driver.findElement(By.id("su")).click(); // 点击按扭
    try {
      /**
       * WebDriver自带了一个智能等待的方法。
       * dr.manage().timeouts().implicitlyWait(arg0, arg1);
       * Arg0:等待的时间长度,int 类型 ; Arg1:等待时间的单位 TimeUnit.SECONDS 一般用秒作为单位。
       */
      driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
    } catch (Exception e) {
      e.printStackTrace();
    }
    /**
     * dr.quit()和dr.close()都可以退出浏览器,简单的说一下两者的区别:第一个close,
     * 如果打开了多个页面是关不干净的,它只关闭当前的一个页面。第二个quit,
     * 是退出了所有Webdriver所有的窗口,退的非常干净,所以推荐使用quit最为一个case退出的方法。
     */
    driver.quit();// 退出浏览器
    liulanqi();
  }
 
  private static void liulanqi() {
    /**
     * 操作浏览器 1、浏览器窗口最大化 2、浏览器前进 3、浏览器后退 4、浏览器刷新 5、浏览器切换窗口
     * 
     * @author https://me.csdn.net/qq_40374604
     *
     */
    String url = "https://blog.csdn.net/qq_40374604/article/details/83996505";
    System.setProperty("webdriver.chrome.driver", "tools\\chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    driver.get(url);
    // 1
    driver.manage().window().maximize();
    driver.findElement(By.linkText("rodert_wang")).click();
    driver.navigate().refresh();// 刷新页面
    driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
    driver.navigate().back();// 回退
    driver.navigate().forward();// 前进
    driver.quit();
  }
 
  private static void Search() {
    /**
     * 获取http://www.com页面中,所有</a>标签"href"属性值
     * 包含英文单词“place”的URL,并将结果保存到“d://logSelenim.log”文件中。
     * 
     * @author https://me.csdn.net/qq_40374604
     *
     */
    String url = "https://me.csdn.net/qq_40374604";
    System.setProperty("webdriver.chrome.driver", "tools\\chromedriver.exe");
    File file = new File("d://logSelenim.log");
    if (!(file.exists())) {
      try {
        file.createNewFile();
      } catch (IOException e) {
        System.out.println("创建文件失败");
        e.printStackTrace();
      }
    }
    WebDriver driver = new ChromeDriver();
    driver.get(url);
    List<WebElement> aList = driver.findElements(By.tagName("a"));
    FileOutputStream fs;
    try {
      fs = new FileOutputStream(file);
      for (WebElement a : aList) {
        String urlStr = a.getAttribute("href");
        System.out.println(urlStr);
        if (urlStr.contains("qq_40374604/article")) {
          urlStr += "\r\n";
          fs.write(urlStr.getBytes());
        }
      }
    } catch (Exception e) {
      System.out.println("文件写入失败");
      e.printStackTrace();
    }finally{
      driver.quit();
    }
 
  }
}
package cn.server;
 
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
 
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
 
import com.google.gson.JsonArray;
 
public class ModelSelenium {
  public static String Search(String url) throws InterruptedException {
    /**
     * 基于selenium
     * 
     * @author wangshiyu
     */
    System.setProperty("webdriver.chrome.driver", "tools\\chromedriver.exe");// chromedriver服务地址
    WebDriver driver = new ChromeDriver();// 新建一个WebDriver 的对象,但是new
    // System.setProperty("phantomjs.binary.path", "tools\\phantomjs.exe");
    // WebDriver driver = new PhantomJSDriver();
    driver.get(url);
    driver.manage().timeouts().implicitlyWait(8, TimeUnit.SECONDS);
    driver.findElement(By.className("list_title_s"));//查找这个class,让程序等待内容加载
    String pageSource = driver.getPageSource();
    driver.manage().window().maximize();
    Thread.sleep(1000);
    getLink(pageSource, url);
    System.out.println(pageSource);
    // driver.quit();
    return pageSource;
  }
 
  public static JsonArray getLink(String html, String baseUri) {
    JsonArray seedsJsonArray = new JsonArray();
    Document doc = Jsoup.parse(html, baseUri);
    Elements links = doc.select("a[href]");
    Elements media = doc.select("[src]");
    for (Element element : links) {
      String hrefString = element.attr("abs:href");
      if (hrefString.length() > 5) {
        seedsJsonArray.add(hrefString.toString());
      }
    }
    for (Element element : media) {
      String srcString = element.attr("abs:src");
      if (srcString.length() > 5) {
        seedsJsonArray.add(element.attr("abs:src").toString());
      }
    }
    System.out.println("#######" + seedsJsonArray);
    return seedsJsonArray;
  }
 
  @SuppressWarnings("finally")
  public static String getAbsoluteURL(String baseURI, String relativePath) {
    String abURL = null;
    try {
      URI base = new URI(baseURI);// 基本网页URI
      URI abs = base.resolve(relativePath);// 解析于上述网页的相对URL,得到绝对URI
      URL absURL = abs.toURL();// 转成URL
      abURL = absURL.toString();
    } catch (MalformedURLException e) {
      e.printStackTrace();
    } catch (URISyntaxException e) {
      e.printStackTrace();
    } finally {
      return abURL;
    }
  }
 
  public static void main(String[] args) {
    try {
      String url = "https://weibo.com/";
      Search(url);
    } catch (InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
}

目录
相关文章
|
2月前
|
存储 安全 Java
从入门到精通:Java Map全攻略,一篇文章就够了!
【10月更文挑战第17天】本文详细介绍了Java编程中Map的使用,涵盖Map的基本概念、创建、访问与修改、遍历方法、常用实现类(如HashMap、TreeMap、LinkedHashMap)及其特点,以及Map在多线程环境下的并发处理和性能优化技巧,适合初学者和进阶者学习。
71 3
|
23天前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
44 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
19天前
|
监控 架构师 Java
Java虚拟机调优的艺术:从入门到精通####
本文作为一篇深入浅出的技术指南,旨在为Java开发者揭示JVM调优的神秘面纱,通过剖析其背后的原理、分享实战经验与最佳实践,引领读者踏上从调优新手到高手的进阶之路。不同于传统的摘要概述,本文将以一场虚拟的对话形式,模拟一位经验丰富的架构师向初学者传授JVM调优的心法,激发学习兴趣,同时概括性地介绍文章将探讨的核心议题——性能监控、垃圾回收优化、内存管理及常见问题解决策略。 ####
|
1月前
|
监控 安全 Java
Java中的多线程编程:从入门到实践####
本文将深入浅出地探讨Java多线程编程的核心概念、应用场景及实践技巧。不同于传统的摘要形式,本文将以一个简短的代码示例作为开篇,直接展示多线程的魅力,随后再详细解析其背后的原理与实现方式,旨在帮助读者快速理解并掌握Java多线程编程的基本技能。 ```java // 简单的多线程示例:创建两个线程,分别打印不同的消息 public class SimpleMultithreading { public static void main(String[] args) { Thread thread1 = new Thread(() -> System.out.prin
|
1月前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
1月前
|
存储 安全 Java
🌟Java零基础-反序列化:从入门到精通
【10月更文挑战第21天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
81 5
|
1月前
|
安全 Java 调度
Java中的多线程编程入门
【10月更文挑战第29天】在Java的世界中,多线程就像是一场精心编排的交响乐。每个线程都是乐团中的一个乐手,他们各自演奏着自己的部分,却又和谐地共同完成整场演出。本文将带你走进Java多线程的世界,让你从零基础到能够编写基本的多线程程序。
36 1
|
2月前
|
Web App开发 Java
使用java操作浏览器的工具selenium-java和webdriver下载地址
【10月更文挑战第12天】Selenium-java依赖包用于自动化Web测试,版本为3.141.59。ChromeDriver和EdgeDriver分别用于控制Chrome和Edge浏览器,需确保版本与浏览器匹配。示例代码展示了如何使用Selenium-java模拟登录CSDN,包括设置驱动路径、添加Cookies和获取页面源码。
138 6
|
1月前
|
Java 数据处理 开发者
Java多线程编程的艺术:从入门到精通####
【10月更文挑战第21天】 本文将深入探讨Java多线程编程的核心概念,通过生动实例和实用技巧,引导读者从基础认知迈向高效并发编程的殿堂。我们将一起揭开线程管理的神秘面纱,掌握同步机制的精髓,并学习如何在实际项目中灵活运用这些知识,以提升应用性能与响应速度。 ####
49 3
|
2月前
|
开发框架 IDE Java
java制作游戏,如何使用libgdx,入门级别教学
本文是一篇入门级教程,介绍了如何使用libgdx游戏开发框架创建一个简单的游戏项目,包括访问libgdx官网、设置项目、下载项目生成工具,并在IDE中运行生成的项目。
60 1
java制作游戏,如何使用libgdx,入门级别教学

热门文章

最新文章