Selenium入门及基础案例

一、Selenium简介

 Selenium是一个用于Web应用程序自动化测试工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。

适用于自动化测试,js动态爬虫(破解反爬虫)等领域。

二、Selenium组成

 1)Selenium IDE:嵌入到Firefox浏览器中的一个插件,实现简单的浏览器操作录制与回放功能,主要用于快速创建BUG及重现脚本,可转化为多种语言
 2)Selenium RC: 核心组件,支持多种不同语言编写自动化测试脚本,通过其服务器作为代理服务器去访问应用,达到测试的目的
 3)Selenium WebDriver(重点):一个浏览器自动化框架,它接受命令并将它们发送到浏览器。它是通过特定于浏览器的驱动程序实现的。它直接与浏览器通信并对其进行控制。Selenium WebDriver支持各种编程语言,如Java、C# 、PHP、Python、Perl、Ruby
 4)Selenium grid:测试辅助工具,用于做分布式测试,可以并行执行多个测试任务,提升测试效率。

组件

三、Selenium特点

 1)开源、免费
 2)多浏览器支持:FireFox、Chrome、IE、Opera、Edge;
 3)多平台支持:Linux、Windows、MAC;
 4)多语言支持:Java、Python、Ruby、C#、JavaScript、C++;
 5)对Web页面有良好的支持;
 6)简单(API 简单)、灵活(用开发语言驱动);
 7)支持分布式测试用例执行。

四、案例演示

一. java爬虫入门

1.找到本地谷歌版本,下载驱动包

找到谷歌页面的右上角的三个点->帮助->关于Google Chrome,然后就可以看到版本,作者的版本是101.0.4951.67,如图所示

在这里插入图片描述

根据版本号到这个网站找到驱动包下载
http://chromedriver.storage.googleapis.com/index.html

在这里插入图片描述

点击所需的版本

在这里插入图片描述

最后点击所需的驱动下载

2.用idea创建项目并导入依赖

 <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>3.141.59</version>
     </dependency>

在这里插入图片描述
3.入门
重点代码

//设置驱动
System.setProperty(“webdriver.chrome.driver”,“D:\chromedriver.exe”);
//创建驱动
WebDriver driver=new ChromeDriver();
//与将要爬取的网站建立连接
driver.get(“https://www.baidu.com”);
//关闭浏览器
driver.close();
//释放资源
driver.quit();

案例爬取资料的方式

 1.元素选择方式
 1)Class选择:driver.findElement(By.className("s_ipt"));
 2)ID选择:   driver.findElement(By.id("kw"));
 3)name选择: driver.findElement(By.name("wd"));
 4)tag选择:  driver.findElements(By.tagName("input"));
 5)link选择: driver.findElement(By.linkText("地图"));
 6)Partial link选择(a标签文本内容模糊匹配):driver.findElement(By.partialLinkText("使用百"));
 7)css选择器:driver.findElement(By.cssSelector("#kw"));
 8)xpath选择:driver.findElement(By.xpath("//*[@id=\"kw\"]"));
 2.获取单个元素:driver.findElement
 3.获取多个元素:driver.findElements
 4.输入内容:input.sendKeys("java");
 5.元素点击:element.click();
 6.获取元素属性:nextPageEle.getAttribute("class")
 7.获取标签文本内容:titleEle.getText()
 注:需要在前端页面控制台中找到相关的属性,然后爬取

案例代码

package com.zking;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

import java.util.List;

public class Demo1 {
    public static void main(String[] args) {
        //设置驱动
        System.setProperty("webdriver.chrome.driver","D:\\Y1\\课堂代码和录屏\\VUE\\01.Selenium之入门\\chromedriver.exe");
        //创建驱动
        WebDriver driver=new ChromeDriver();
        //与将要爬取的网站建立连接
        driver.get("https://www.baidu.com");
        //关闭浏览器
        //driver.close();
        //释放资源
        //driver.quit();

//        示例一:Class选择:driver.findElement(By.className("s_ipt"));
       /* List<WebElement> elements = driver.findElements(By.className("title-content-title"));
        for (WebElement element : elements) {
            System.out.println(element.getText());
        }*/
//        示例二:ID选择:   driver.findElement(By.id("kw"));
        /*WebElement kw = driver.findElement(By.id("kw"));
        System.out.println(kw.getAttribute("name"));*/
//        示例三:name选择: driver.findElement(By.name("wd"));
        /*WebElement tn = driver.findElement(By.name("tn"));
        System.out.println(tn.getAttribute("value"));*/
//        示例四:tag选择:  driver.findElements(By.tagName("input"));
        /*List<WebElement> input = driver.findElements(By.tagName("input"));
        for (WebElement webElement : input) {
            String value = webElement.getAttribute("value");
            System.out.println(value);
        }*/
//        示例五:link选择: driver.findElement(By.linkText("地图"));
        /*List<WebElement> elements = driver.findElements(By.linkText("地图"));
        for (WebElement element : elements) {
            String text = element.getText();
            System.out.println(text);
        }*/
//        示例六:Partial link选择(a标签文本内容模糊匹配):driver.findElement(By.partialLinkText("使用百"));
//        List<WebElement> elements = driver.findElements(By.partialLinkText("粉"));
//        for (WebElement element : elements) {
//            System.out.println(element.getText());
//        }
//        示例七:css选择器:driver.findElement(By.cssSelector("#kw")); #hotsearch-content-wrapper > li:nth-child(2)
//        List<WebElement> elements = driver.findElements(By.cssSelector("#hotsearch-content-wrapper > li:nth-child(2)"));
        for (WebElement element : elements) {
            System.out.println(element.getText());
        }
//        示例八:xpath选择:driver.findElement(By.xpath("//*[@id=\"kw\"]"));
//        WebElement element = driver.findElement(By.xpath("//*[@id=\"kw\"]"));
//        System.out.println(element.getAttribute("class"));
//        2.获取单个元素:driver.findElement
//
//        3.获取多个元素:driver.findElements
//
//        4.输入内容:input.sendKeys("java");
//        WebElement kw = driver.findElement(By.id("kw"));
//        kw.sendKeys("java");
//        WebElement element = driver.findElement(By.id("su"));
//        element.click();
    }
}

4、Selenium爬取JD商品信息
案例代码(以爬取京东商品信息为案例)

package com.zking;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

import java.util.List;

public class Demo2 {

    public static void main(String[] args) {

        //将驱动加载到Java的JVM虚拟机中
        System.setProperty("webdriver.chrome.driver","D:\\Y1\\课堂代码和录屏\\VUE\\01.Selenium之入门\\chromedriver.exe");
        /************************** 方式一:不打开浏览器 **************************/
        //定义浏览器参数
       // ChromeOptions chromeOptions = new ChromeOptions();
        //设置不打开浏览器
        // chromeOptions.addArguments("--headless");
        //初始化驱动
       // WebDriver driver = new ChromeDriver(chromeOptions);

        /************************** 方式二:打开浏览器 **************************/
        //初始化驱动
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.jd.com/");
        //查找jd网站中的首页搜索栏
        WebElement key = driver.findElement(By.id("key"));
        key.sendKeys("戒指");
        //获取jd网站的查询按钮并且完成点击事件
        WebElement element = driver.findElement(By.cssSelector("button.button"));
        element.click();
        //休眠3秒
        sleep(3);
        //设置滚动条移动到最下面
        ((JavascriptExecutor) driver).executeScript("window.scrollTo(0,document.body.scrollHeight)");
        sleep(2);
        //查询页面中的所有商品li标签
        List<WebElement> elements = driver.findElements(By.xpath("//*[@id=\"J_goodsList\"]/ul/li"));
        for (WebElement webElement : elements) {
            String price = webElement.findElement(By.className("p-price")).getText();
            String name = webElement.findElement(By.className("p-name")).getText();
            System.out.println("【"+price+"】-"+name);
        }
    }
    public static void sleep(int num){
        try {
            Thread.sleep(num*1000L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

爬取数据的效果图
在这里插入图片描述

5、Selenium爬取图片
案例代码

package com.zking;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

import java.io.*;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

public class Demo3 {
    //定义驱动
    public static WebDriver driver=null;
    //定义list集合,用于储存爬取数据中的图片路径
    public static List<String> imgs=new ArrayList<>();
    static {
        //将驱动加载到Java的JVM虚拟机中
        System.setProperty("webdriver.chrome.driver","D:\\Y1\\课堂代码和录屏\\VUE\\01.Selenium之入门\\chromedriver.exe");
        //初始化驱动
        driver = new ChromeDriver();
     }
public static void getImg(){
         driver.get("http://www.gaoimg.com/");
         //定义爬取的节点
         List<WebElement> elements = driver.findElements(By.xpath("/html/body/div[4]/div/div/div[2]/dl/dt/a/img"));
         for (WebElement element:elements) {
            String src = element.getAttribute("src");
            imgs.add(src);
         }
}
public static  void saveImg(){
    try {
        for (String img : imgs) {
            //创建URL对象,并设置图片的下载路径
            URL url=new URL(img);
            //打开图片数据输入流
            InputStream is=url.openStream();
            //定义图片存储路径
            String path="D:\\Y1\\课堂代码和录屏\\VUE\\02.Selenium之实战案例\\图片\\"+ UUID.randomUUID().toString().replace("-","")+".png";
            //定义图片输出流
            OutputStream out=new FileOutputStream(new File(path));
            //定义读取长度
            int len=0;
            //定义byte数组每次读取多少字节
            byte[] bytes=new byte[1024];
            //循环读取
            while ((len=is.read(bytes))!=-1){
                //写流
                out.write(bytes);
            }
            //关闭流
            is.close();
            out.close();
            sleep(2);
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
}
public static void sleep(int num){
        try {
            Thread.sleep(num*1000L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
public static void main(String[] args) {
           try {
                //爬取图片路径
                getImg();
                //循环打印图片路径
                for (String img : imgs) {
                    System.out.println(img);
                }
                //保存图片
                saveImg();
           } catch (Exception e) {
               e.printStackTrace();
            } finally {
                //一定要记得下载完图片之后释放资源
               if(null!=driver)
                   driver.quit();
          }
        }
}

效果图
在这里插入图片描述爬取的图片
在这里插入图片描述
在这里插入图片描述

注意看作者在代码中写的注释,有的网站不能爬取图片,但是基本上都能爬取文字,这篇文章主要是入门,想要深入学习的同学可以去查找其他的相关资料,感谢同学们的阅读(* ̄︶ ̄)

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当然可以!下面是一个简单的Python Selenium案例,它可以实现自动打开浏览器并在百度搜索框中输入关键字进行搜索: ```python # 导入必要的库 from selenium import webdriver from selenium.webdriver.common.keys import Keys # 创建浏览器驱动对象 driver = webdriver.Chrome() # 打开百度网页 driver.get('http://www.baidu.com/') # 在搜索框中输入关键字 search_box = driver.find_element_by_id('kw') search_box.send_keys('Python爬虫') search_box.send_keys(Keys.ENTER) # 等待搜索结果加载完成 driver.implicitly_wait(10) # 获取搜索结果的标题 results = driver.find_elements_by_xpath('//h3\[@class="t"\]/a') for result in results: print(result.text) # 关闭浏览器窗口 driver.quit() ``` 这个案例使用了Selenium库进行网页自动化操作。首先,我们创建了一个Chrome浏览器的驱动对象,然后打开了百度网页。接下来,我们找到了搜索框元素,并通过send_keys方法输入了关键字。之后,按下回车键进行搜索。最后,我们使用了xpath语法找到了搜索结果的标题,并打印出来。注意,为了等待搜索结果加载完成,我们使用了implicitly_wait方法来设置等待时间。 如果你想在自己的项目中使用Selenium,你还需要在项目中导入selenium-java依赖,并配置浏览器驱动的路径。你可以参考相关文档或教程进行具体配置。 希望这个案例能帮到你!如果还有其他问题,请随时向我提问。 #### 引用[.reference_title] - *1* [Selenium自动化案例](https://blog.csdn.net/weixin_48271126/article/details/123808523?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168975955416800180626994%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=168975955416800180626994&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-9-123808523-null-null.nonecase&utm_term=%E5%B8%AE%E6%88%91%E5%86%99%E4%B8%80%E4%B8%AAselenium%E6%A1%88%E4%BE%8B)[target="_blank"] [.reference_item] - *2* [Selenium入门基础案例](https://blog.csdn.net/FishBone1/article/details/124824130?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168975955416800180626994%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=168975955416800180626994&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-5-124824130-null-null.nonecase&utm_term=%E5%B8%AE%E6%88%91%E5%86%99%E4%B8%80%E4%B8%AAselenium%E6%A1%88%E4%BE%8B)[target="_blank"] [.reference_item] - *3* [selenium案例](https://blog.csdn.net/little_Muxue/article/details/123903188?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168975955416800180626994%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=168975955416800180626994&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-7-123903188-null-null.nonecase&utm_term=%E5%B8%AE%E6%88%91%E5%86%99%E4%B8%80%E4%B8%AAselenium%E6%A1%88%E4%BE%8B)[target="_blank"] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值