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();
    }
  }
}

目录
相关文章
|
5天前
|
存储 Java 开发者
Java数据类型:从入门到精通,你不得不看的“宝典”
【6月更文挑战第13天】Java凭借其跨平台能力和丰富的类库深受开发者喜爱。学习Java首先需掌握数据类型,包括基本类型(整型、浮点型、字符型、布尔型)和引用类型(类、接口、数组)。基本类型占用固定内存,值不可变;引用类型存储对象地址。通过示例代码展示了如何声明和使用这些类型。此外,Java的封装类如Integer等提供了操作便利。理解数据类型对于程序设计至关重要,是进一步学习Java高级特性的基础。开始你的Java编程之旅,不断实践,你将在Java世界中不断进步。
|
1天前
|
安全 Java 索引
Java List:从入门到精通,一篇文章就够了!
【6月更文挑战第17天】Java List是有序元素集合,支持索引访问、添加、删除和修改。从ArrayList、LinkedList到Vector,各种实现满足不同场景需求。使用add()添加元素,get()获取,set()修改,remove()删除。遍历可用for-each或Iterator,subList()创建子集。注意线程安全,可选synchronizedList()、Vector或CopyOnWriteArrayList。理解List的基本操作和特性,能提升编程效率。
|
2天前
|
XML 测试技术 数据格式
《手把手教你》系列基础篇(七十五)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 中篇(详解教程)
【6月更文挑战第16天】本文介绍了TestNG中`@DataProvider`的两种使用方法。本文通过实例展示了TestNG如何利用`@DataProvider`结合方法名和`ITestContext`来灵活地为测试方法传递参数。
9 1
|
2天前
|
XML 存储 测试技术
《手把手教你》系列基础篇(七十四)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 上篇(详解教程)
【6月更文挑战第15天】本文介绍了TestNG的数据驱动测试(Data Driven Testing, DDT)概念和好处,并提供了两个实战示例。数据驱动测试允许使用不同的测试数据执行相同的测试用例,这些数据可以从外部文件或数据库获取。这种方法提高了测试效率,减少了冗余代码,并便于应对应用程序变更。
11 0
|
3天前
|
Java
Java 小白也能看懂!类和对象详解,轻松入门面向对象编程
【6月更文挑战第15天】面向对象编程对新手可能抽象,但理解Java中的类和对象是关键。类是事物模板,如“汽车”类包含属性(颜色、型号、速度)和行为(启动、加速、刹车)。对象是类的实例,像具体的汽车。通过创建对象并调用其方法,可以模拟现实世界的情景。例如,`Car myCar = new Car();`创建了一个汽车对象,之后可设置属性和调用方法。多练习有助于掌握这一概念。
|
4天前
|
Web App开发 XML 安全
《手把手教你》系列基础篇(七十三)-java+ selenium自动化测试-框架设计基础-TestNG实现启动不同浏览器(详解教程)
【6月更文挑战第14天】本文介绍了如何使用TestNg进行自动化测试,特别是通过变量参数启动不同浏览器的步骤。
15 5
|
5天前
|
Java 开发工具 Android开发
Java 程序设计 第1章 Java入门 笔记
Java 程序设计 第1章 Java入门 笔记
|
5天前
|
Oracle Java 关系型数据库
JAVA入门: 编程环境安装
JAVA入门: 编程环境安装
|
5天前
|
监控 Java 测试技术
《手把手教你》系列基础篇(七十二)-java+ selenium自动化测试-框架设计基础-TestNG简单介绍(详解教程)
【6月更文挑战第13天】本文介绍了TestNG单元测试框架,它是一个灵感来源于JUnit和NUnit的测试框架,支持多种级别的测试,如单元测试、集成测试等。TestNG的特点包括丰富的注解、数据驱动测试、变量支持、自动生成HTML测试报告等。与JUnit和NUnit相比,TestNG在某些功能上更为强大。文章还详细讲解了如何在Eclipse中安装TestNG插件,提供了在线安装、更新站点安装和离线安装三种方法,并展示了安装成功的验证步骤。最后,通过一个项目实战案例展示了如何使用TestNG编写和运行测试代码。
14 2
|
6天前
|
JavaScript Java 测试技术
《手把手教你》系列技巧篇(七十一)-java+ selenium自动化测试-自定义类解决元素同步问题(详解教程)
【6月更文挑战第12天】本文介绍了如何创建一个自定义类库来解决自动化测试中的元素同步问题。作者指出,大部分错误源于元素因时间不同步而引发,为此提供了一种解决方案。在项目实践中,首先在`library`包下创建名为`MyWait`的类,包含一个方法`isElementPresent`,该方法通过循环尝试并等待指定元素出现,避免了直接使用时间等待可能导致的不准确性。之后,在测试类中调用此自定义方法,成功实现了元素同步。代码示例展示了如何在Java+Selenium自动化测试中应用这个自定义类。
27 2