Java自动化-selenium

这篇具有很好参考价值的文章主要介绍了Java自动化-selenium。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、准备

最近在学习写自动化控件,自动化脚本开发。可能会需要学到的知识,提前了解一下:
idea,maven,谷歌驱动,网络
个人建议使用maven自动导入,因为需要的依赖包确实不少。

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

二、selenium介绍

Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,
Selenium可以直接运行在浏览器上,它支持所有主流的浏览器(包括
PhantomJS这些无界面的浏览器(2018年开发者说暂停开发,
chromedriver也可以实现同样的功能),可以接收指令,
让浏览器自动加载页面,获取需要的数据,甚至页面截屏。

三、什么是抓取技术

个人通俗的理解就是:模拟人的行为去各个网站溜达,点点按钮,查查数据,或者把看到的信息背回来。就像一只蜘蛛在一幢楼里不知疲倦地爬来爬去。

四、爬虫协议

路边的野花不要踩,如果你控制不住,你偏要踩,小心回家跪搓衣板。

那么爬虫也是一样,很多系统是很讨厌爬虫的,它们希望自己的业务数据不被窃取,而爬虫违背了它们利益。但并不是所有的网站都讨厌爬虫,因为很多网站做SEO,它们希望被搜索引擎收录,被爬虫主流搜索引擎的爬虫抓取。

比如: www.hao123.com ,我们观察它的爬虫协议( https://www.hao123.com/robots.txt ) 就能看出它允许部分(百度、谷歌、有道、搜狗、搜搜)等爬虫对他进行蹂躏。其他的爬虫它一律不允许。

User-agent: Baiduspider
Allow: /

User-agent: Baiduspider-image
Allow: /

User-agent: Baiduspider-video
Allow: /

User-agent: Baiduspider-news
Allow: /

User-agent: Googlebot
Allow: /

User-agent: MSNBot
Allow: /

User-agent: YoudaoBot
Allow: /

User-agent: Sogou web spider
Allow: /

User-agent: Sogou inst spider
Allow: /

User-agent: Sogou spider2
Allow: /

User-agent: Sogou blog
Allow: /

User-agent: Sogou News Spider
Allow: /

User-agent: Sogou Orion spider
Allow: /

User-agent: JikeSpider
Allow: /

User-agent: Sosospider
Allow: /

User-agent: *
Disallow: /

如何查看爬虫协议:在网站根域名下,一般会放一个robots.txt文件,文件中会清楚的描述哪些允许,哪些不允许。

五、Jsoup实现简单爬虫

Jsoup是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。

它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

总之,如果对HTML页面很了解的话,是可以很容易的用Jsoup来抓取页面的信息的。

1、分析页面元素

通过浏览器打开“开发者调试工具” 通过选择器审查页面元素,按照盒子模型思维分析页面元素信息,如下图所示:

页面元素定位路径:coolsites_wrapper->cool-row-> href

Jsoup 实现简单爬虫 源代码入下:

import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.helper.StringUtil;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * Jsoup 实现
 */
public class Spider {
    static List<LinkEntity> stores = new ArrayList<>();
    public static void main(String[] args) {
        //1、与目标服务建立连接  
        Connection connection = Jsoup.connect("https://www.***.com/");
        connection.header("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36");
        try {
            // 2、执行请求、解析结果  
            Document document = connection.get();
            Element element = document.getElementById("coolsites_wrapper");
            // 3、定位到->"酷站列表"  
            Elements elements = element.getElementsByClass("cool-row");
            Iterator iterator = elements.iterator();
            while (iterator.hasNext()) {
                Element ulElement = (Element) iterator.next();
                // 4、获取当前盒子模型下<a>标签列表  
                Elements links = ulElement.getElementsByTag("a");
                Iterator iteratorLinks = links.iterator();
                // 5、迭代遍历超链接列表  
                while (iteratorLinks.hasNext()) {
                    Element items = (Element) iteratorLinks.next();
                    String text = items.text();
                    String attribute = items.select("a").attr("href");
                    if (StringUtil.isBlank(attribute) || StringUtil.isBlank(text)) {
                        continue;
                    }
                    stores.add(new LinkEntity(text, attribute));
                }
            }
            // 6、遍历爬取的结果(此处只做演示,不做任何存储操作)  
            stores.parallelStream().forEach(item -> {
                System.out.println(item.getName() + " -> " + item.getUrl());
            });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

class LinkEntity {
    private String name;
    private String url;
    public LinkEntity(String name, String url) {
        this.name = name;
        this.url = url;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
} 

2、Jsoup爬虫技术实现思路

①、得到自己想要爬取数据的url,与服务器建立链接

②、通过Jsoup的jar包中的方法将Html解析成Document

③、使用Document中的一些列get、first、children等方法获取自己想要的数据,如图片地址、名称、时间。

④、将得到的数据封装成自己的实体类。将实体中的数据在页面加载出来。

3、Jsoup爬虫框架的不足

只有html元素有的情况下,才能通过jsoup来爬虫,如果是这接口获得的数据,那么通过jsoup是无法获取到的。

六、Selenium自动化测试+爬虫

Selenium 是一款自动化测试框架,支持多种主流的开发,对各种开发语言提供了丰富的API,通过API你可以快速定位页面元素,模拟用户点击,滑动,翻页,截屏等一系列操作。

它可模拟用户真实操作行为,并且是基于真实浏览器运行环境,所以在自动化测试中受到了很多测试同学的青睐。

Selenium 实现自动化测试 源代码入下:

import org.openqa.selenium.By;
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;
import java.util.concurrent.TimeUnit;
/**
 * 使用Java+Selenium 自动框架实现
 */
public class SeleniumSpider {
    private static ChromeOptions initChromeOptions(){
        ChromeOptions options = new ChromeOptions();  
        /* 
            // 启动时自动最大化窗口 
            options.addArguments("--start-maximized"); 
            // 禁用阻止弹出窗口 
            options.addArguments("--disable-popup-blocking"); 
            // 启动无沙盒模式运行 
            options.addArguments("no-sandbox"); 
            // 禁用扩展 
            options.addArguments("disable-extensions"); 
            // 默认浏览器检查 
            options.addArguments("no-default-browser-check"); 
            // 设置chrome 无头模式 
            options.setHeadless(Boolean.TRUE); 
            //不用打开图形界面。 
            options.addArguments("--headless"); 
        */
        options.setBinary("C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe");
        return options;
    }
    private static WebDriver initWebDriver (ChromeOptions options){
        WebDriver webDriver = new ChromeDriver(options);
        webDriver.manage().window().maximize();
        webDriver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
        return webDriver;
    }
    public static void main(String [] args){
        // 1、设置chrome浏览器驱动  
        System.setProperty("webdriver.chrome.driver", "D:\\tools\\chromedriver_win32\\chromedriver.exe");
        // 2、设置ChromeOptions  
        ChromeOptions chromeOptions= initChromeOptions();
        // 3、初始化一个浏览器实例  
        WebDriver webDriver= initWebDriver(chromeOptions);
        // 4、加载网页程序(某度)  
        webDriver.get("https://image.baidu.com");
        // 5、通过ID选择器定位输入框,并设置搜索关键字”帅哥“  
        webDriver.findElement(By.id("kw")).sendKeys("帅哥");
        // 6、通过Class类样式选择器定位,模拟点击事件并提交表单  
        webDriver.findElement(By.className("s_btn")).submit();
        // 7、加载第二个页面:展示搜索页面元素信息  
        WebElement webElement = webDriver.findElement(By.id("imgid"));
        // 8、定位搜索到所有图片元素  
        List<WebElement> imgs= webElement.findElements(By.className("imgbox"));
        // 9、异步获取图片地址  
        syncThread(imgs);
        // 10、模拟页面图片点击事件  
        imgs.forEach(images ->{
            images.click();
        });
    }
    public static void syncThread(List<WebElement> imgs){
        Thread thrad = new Thread(new myThread(imgs));
        thrad.start();
    }
}
class myThread implements Runnable {
    List<WebElement> imgs;
    public myThread(List<WebElement> imgs) {
        this.imgs = imgs;
    }
    @Override
    public void run() {
        imgs.forEach(images -> {
            WebElement currentImages = images.findElement(By.className("main_img"));
            String src = currentImages.getAttribute("src");
            System.out.println("图片地址:->" + src);
            //TODO  
        });
    }
}

Selenium 核心步骤如下:

1、下载对应版本驱动

2、安装浏览器产品,并定位至浏览器运行程序

#  Chrome各版本驱动的下载地址
http://chromedriver.storage.googleapis.com/index.html
#  Firefox浏览器对应各个版本驱动下载地址:
https://github.com/mozilla/geckodriver/releases/  

3、设置chrome浏览器驱动

4、设置ChromeOptions

5、初始化一个浏览器实例

6、加载网页程序

7、通过ID选择器定位输入框,并设置搜索关键字”美女“

8、通过Class类样式选择器定位,模拟点击事件并提交表单

9、加载第二个页面:展示搜索页面元素信息

10、定位搜索到所有图片元素

11、异步获取图片地址

12、模拟页面图片点击事件

七、小结

selenium能够执行页面上的js,对于js渲染的数据和模拟登陆处理起来非常容易。

使用过程中,selenium由于在获取页面的过程中会发送很多请求,所以效率非常低,所以在很多时候需要酌情使用。文章来源地址https://www.toymoban.com/news/detail-764733.html

到了这里,关于Java自动化-selenium的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java + Selenium + Appium自动化测试

    一、启动测试机或者Android模拟器(Genymotion俗称世界上最快的模拟器,可自行百度安装) 二、启动Appium(Appium环境安装可自行百度) 三、安装应用到Genymotion上,如下图我安装一个计算机的小应用,包名为CalcTest.apk 安装步骤:(基于Android SDK已经配置好了环境变量,可自行百

    2024年02月07日
    浏览(44)
  • 【测试开发之路】Java & Selenium自动化

    1、Selenium介绍 ​ 使用前需要下载浏览器对应的Driver,Selenium提供了EdgeDriver和ChromiumDriver两种驱动类。需要安装与本机浏览器版本相同的驱动。 ​ EdgeDriver下载地址:Microsoft Edge WebDriver - Microsoft Edge Developer ​ ChromiumDriver下载地址:CNPM Binaries Mirror (npmmirror.com) 2、导入Maven库 (

    2024年02月12日
    浏览(50)
  • 【教程】JAVA + selenium 进行自动化测试

    自动登录淘宝 获取请求响应数据等 使用到的工具类

    2024年02月11日
    浏览(44)
  • Java + Selenium + Appium手机自动化测试

    一、启动测试机或者Android模拟器(Genymotion俗称世界上最快的模拟器,可自行百度安装) 二、启动Appium(Appium环境安装可自行百度)   三、安装应用到Genymotion上,如下图我安装一个计算机的小应用,包名为CalcTest.apk 安装步骤:(基于Android SDK已经配置好了环境变量,可自行

    2024年02月06日
    浏览(51)
  • 保姆级自动化测试教程(Selenium+java)

    自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。 自动化测试包括 UI自动化 , 接口自动化 , 单元测试自动化 。 单元测试 :最大的投入应该在单元测试上

    2024年02月12日
    浏览(45)
  • Selenium 自动化 —— Selenium IDE录制、回放、导出Java源码

    之前我们在专栏的第一篇文章中演示了使用使用Selenium进行百度搜索的Hello world示例。 代码不复杂非常简单: 但是对不懂HTML、CSS和Selenium API的同学,可能要编写一个完整的可运行的Selenium程序还是有一点点难度。 熟悉CSS和花了一点的时间看了我后续Selenium 系列教程的除外哈。

    2024年03月22日
    浏览(43)
  • selenium自动化测试教程——java爬取数据

    selenium 是一个用于自动化测试 Web 应用的工具集 ,它可以模拟用户自动去浏览器网页上进行点击、输入、选择下拉值复选框、鼠标移动、任意 JavaScript 执行等等操作。 selenium 有三个产品: Selenium WebDriver:基于浏览器的回归自动化套件和测试,你可以使用 Java、Python、JavaScri

    2024年02月14日
    浏览(49)
  • selenium浏览器自动化测试【基于java】

    Selenium 是一个用于Web应用程序的自动化测试工具。它直接运行在浏览器中,可以模拟用户在浏览器上面的行为操作。 chrome.exe 默认安装位置:C:Program FilesGoogleChromeApplicationchrome.exe 结果我的在:C:Users91073AppDataLocalGoogleChromeApplicationchrome.exe 。。。为啥? 下载驱动 最新

    2024年02月04日
    浏览(52)
  • selenium+java自动化测试环境搭建mac

    一、官网下载selenium Downloads | Selenium    下载之后的文件如下 二、下载谷歌浏览器驱动,驱动版本和浏览器版本一致、下面是我的谷歌浏览器版本  谷歌浏览器下载地址 CNPM Binaries Mirror  下载完成如下:

    2023年04月08日
    浏览(49)
  • Java+Selenium+Testng自动化学习(一):环境搭建

    目录 一、软件准备及版本介绍  二、安装步骤及环境变量配置:  2.1    Java安装及配置 2.2    IDE工具(Intellij IDEA)安装 2.3    Maven安装及配置 2.4    Maven本地仓库配置 2.5    Intellij IDEA配置mvn仓库 2.6    Intellij IDEA创建maven项目 2.7    Selenium安装 2.8    TestNG安装 2.9    Chr

    2024年02月05日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包