使用Java的Selenium:Google搜索

1.概述

在本教程中,我们将探讨如何将Selenium与Java结合使用。 我们将使用Selenium打开Goog​​le,进行搜索,然后单击URL。

该代码在Github上可用。

2.什么是硒?

Selenium使Web浏览器自动化。 就是这样

Selenium使我们能够模拟用户与网页的交互。 我们可以使用两种Selenium产品:Selenium WebDriver和Selenium IDE。 我们将使用WebDriver。

什么是WebDriver? WebDriver是官方的W3C规范,从本质上讲,它是与Web浏览器进行交互的一种方式。 以前,使用Selenium RC,Selenium可以通过注入JavaScript与元素进行交互来与浏览器一起运行。 随着WebDriver规范的采用,诸如Google,Mozilla和Microsoft之类的公司发布了具有受Selenium可以利用的钩子控制的功能的浏览器。 这个钩子使Selenium可以像人类一样与Web浏览器进行交互。

我们将使用Google Chrome,因此需要下载chromedriver 。

下载驱动程序后,我们需要执行文件。
在Mac上,我们可以简单地执行以下操作:

./chromedriver

3. pom.xml

我使用Spring Tool Suite并创建了一个新的Spring Starter项目,这不是必需的,但我倾向于喜欢Spring。 所以Selenium实际上是由Spring Boot Starter Parent管理的。 版本是2.53.1。

<!-- typical pom beginning--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.10.RELEASE</version><relativePath /> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
<!-- typical pom ending-->

4.打开Chrome和搜索

对于此步骤,我们将建立与chromedriver的连接,打开浏览器,并搜索“ Selenium”。

我们将localhost作为目标端口,因为chromedriver在本地服务器的端口9515上运行。

RemoteWebDriver实现了WebDriver ,WebDriver的目标是提供一个面向对象的API,该API为现代高级Web应用程序测试问题提供支持。 因此,基于这些事实,我们可以说RemoteWebDriver是允许使用远程浏览器的实现。 好处包括将测试的运行位置与浏览器所在的位置分开,以及使用当前操作系统上不可用的浏览器进行测试的能力。 缺点包括以下事实:我们需要一个外部servlet容器来运行,并且如果引发异常,则可能会有延迟。

// create a Chrome Web DriverURL local = new URL("http://localhost:9515");WebDriver driver = new RemoteWebDriver(local, DesiredCapabilities.chrome());// open the browser and go to open google.comdriver.get("https://www.google.com"); driver.findElement(By.id("lst-ib")).sendKeys("Selenium");driver.findElement(By.name("btnK")).click();driver.manage().window().maximize();

5.获取页面并单击

WebDriver为我们提供了findElementfindElements方法来在网页上定位元素。 这些方法接受By对象作为参数。 By具有借助定位符值在文档中定位元素的方法。 Selenium已经很好地记录了他们的API 。

一旦我们了解了如何使用Selenium来标识元素,就可以轻松阅读任何driver.findElements(By…)方法。 但是我们也需要知道如何编写它们。 使用Chrome之类的浏览器,我们可以右键单击(或等效按钮)以检查元素以获取其HTML / CSS信息。 另外,我们也可以“查看源代码”以获取更多完整信息。

为了演示如何在网页上滚动,我们执行jse.executeScript(“ window.scrollBy(0,250)”,“”)
顾名思义, JavaScriptExecutor执行JavaScript。 JavaScriptExecutor是通过Selenium WebDriver提供的接口。 它提供了两种方法“ executescript”和“ executeAsyncScript”以在所选窗口或当前页面上运行javascript。

使用下面的代码,可以创建一个更全面的漫游器来搜索Google并单击几个页面的URL。

// get the number of pagesint size = driver.findElements(By.cssSelector("[valign='top'] > td")).size();for(int j = 1 ; j < size ; j++) {if (j > 1) {// we don't need to navigate to the first pagedriver.findElement(By.cssSelector("[aria-label='Page " + j + "']")).click(); // navigate to page number j}String pagesearch = driver.getCurrentUrl();List<WebElement> findElements = driver.findElements(By.xpath("//*[@id='rso']//h3/a"));System.out.println(findElements.size());for(int i=0;i<findElements.size();i++){findElements= driver.findElements(By.xpath("//*[@id='rso']//h3/a"));                findElements.get(i).click(); driver.navigate().to(pagesearch);JavascriptExecutor jse = (JavascriptExecutor) driver;//Scroll vertically downward by 250 pixelsjse.executeScript("window.scrollBy(0,250)", "");}}

六,结论

这是Java Selenium的基本介绍。 正如我们发现的那样,在Selenium Webdriver中,定位器(如XPath,CSS等)用于标识和执行Web页面上的操作。 也可以执行任意JavaScript。
完整的代码可以在Github上找到。

翻译自: https://www.javacodegeeks.com/2018/02/selenium-java-google-search.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348112.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

润乾报表分组求和_一招搞定各种报表合计需求

一、常用合计方案在有专业报表工具之前&#xff0c;常用的实现方案有&#xff1a;1&#xff09; SQL“select sum(字段) from 表 group by 字段 order by 字段“可以实现简单的分组数据合计、条件合计&#xff0c;这种方式有一个很明显的缺点&#xff0c;就是随着合计需求复杂度…

Spring Security 6.x 系列(12)—— Form表单认证登录注销自定义配置

一、前言 在本系列文章中介绍了 Form 表单认证和注销流程&#xff0c;对部分源码也进行详细分析。 本章主要学习 Spring Security 中表单认证登录注销的相关自定义配置。 二、自定义登录页面 Spring Security 表单认证默认规则中对未认证的请求会重定向到默认登录页面&…

中奖名单模板_春分纪中奖名单出炉~才艺主公用“树叶阵法”致敬率土!

在上周发起的“率土春分纪”活动里小率每天都能在后台中收获主公们的“春天故事”今天小率将优质投稿整理出来分享给各位主公1春分诗词春赋雨水以将兮&#xff0c;天微微复日暖&#xff1b;春分之临兮&#xff0c;地脉脉而野苏。美好触手可及&#xff0c;万事恰逢转机。且看柳嫩…

JDK 10的摘要Javadoc标签

JDK 10通过发行JDK-8173425 引入了Javadoc标签{summary} &#xff08;“ Javadoc需要一个新标签来指定摘要。”&#xff09;。 这个新标签允许开发人员显式指定Javadoc注释的哪些部分出现在“摘要”中&#xff0c;而不是依靠Javadoc的默认处理来寻找一个时间和空间来划定注释的…

用c语言写代码_如何避免用动态语言的思维写Go代码

由于招聘市场上Go工程师的供给量不足&#xff0c;所以在招人的时候我们招了不少愿意转型用Go语言进行开发的PHP工程师&#xff0c;不过虽说换了个语言&#xff0c;在他们代码的时候还是能发现很多PHP的影子。if语句后面非要带括号这种问题就不说了&#xff0c;这属于不懂事&…

java ee cdi_Java EE CDI依赖关系消歧示例

java ee cdi在本教程中&#xff0c;我们将向您展示如何避免CDI bean中的依赖关系消除歧义。 在CDI中&#xff0c;我们可以为应用程序中不同客户端的接口的多个实现实现依赖项注入。 依赖性消除歧义的问题是客户端如何在不同的实现中调用特定的实现&#xff0c;而不会发生任何错…

tfw文件如何导入cad_教你三维家3d设计软件如何导入cad文件

一、导入CAD户型图的&#xff0c;注意点&#xff1a;CAD图要求&#xff1a;除墙体外&#xff0c;其它线段不可出现&#xff0c;(如&#xff1a;门、柱子、窗、阳台、标注、家具、植物、摆件等)且墙体线条要闭合&#xff0c;保存DXF格式。第一步:点击户型图--本地上传CAD图。第二…

用EnumMaps映射枚举键

这是一种在JDK中存在很长时间的类型&#xff0c;当我们要定义以枚举类型作为键的映射时会派上用场&#xff1a; EnumMap是一种特殊的Map 。 我们将为给定的枚举创建一个映射&#xff1a; public enum CoffeeType {ESPRESSO, POUR_OVER, FRENCH_PRESS }EnumMap在创建时需要注意…

同级选择器_10-CSS3选择器详解

CSS3在CSS2基础上&#xff0c;增强或新增了许多特性&#xff0c; 弥补了CSS2的众多不足之处&#xff0c;使得Web开发变得更为高效和便捷。CSS3的现状浏览器支持程度不够好&#xff0c;有些需要添加私有前缀移动端支持优于PC端不断改进中应用相对广泛应对的策略&#xff1a;渐进…

机器人庄园作文_十年后的家乡作文精选8篇

十年后的家乡作文精选8篇十年后的家乡作文&#xff1a;十年后的家乡十年前我的家乡美丽富饶&#xff0c;家前的小溪清澈见底&#xff0c;小溪妹妹还&#xff1a;“哗啦啦”的唱起了欢乐的歌谣。树木葱葱茏茏&#xff0c;花朵都露出了美丽可爱的笑脸&#xff0c;蝴蝶、蜜蜂、小鸟…

java heroku_Heroku和Java –从新手到初学者,第2部分

java heroku问题 所以过了几天&#xff0c;我可以回到我的Recaps小项目。 我从检查日志开始&#xff0c;发现了以下内容&#xff1a; 2012-03-04T01:52:5100:00 heroku[web.1]: Idling 2012-03-04T01:52:5300:00 heroku[web.1]: Stopping process with SIGTERM 2012-03-04T01:…

存储限制_明年6月份开始,谷歌相册将终止免费无限存储服务

站长之家(ChinaZ.com)11月12日 消息:在提供免费服务5年后&#xff0c;谷歌对外宣布将终止提供无限容量免费照片存储服务&#xff0c;转而只提供的15GB免费存储空间&#xff0c;超过部分就需要向谷歌付费。这一变化将于2021年6月1日生效&#xff0c;这意味着如果用户上传的照片超…

下载 沙耶之歌Android_沙耶之歌安卓版apk-沙耶之歌下载手机版v1.2-飘荡下载

一款超经典的日式ADV游戏&#xff0c;游戏中有着精致的动漫风格画风&#xff0c;并且讲述了一个非常重口味但又异常纯洁的恋爱故事&#xff0c;玩家将会扮演男主进行游戏&#xff0c;超级丰富精彩的剧情等你来体验&#xff0c;并且还有着不同的剧情选项可以选择&#xff0c;能否…

Maven,Eclipse和Java 9

任何在eclipse中使用M2E&#xff08;maven-to-eclipse&#xff09;插件的人都知道您在哪里运行构建的问题&#xff0c;然后在项目上更新maven只是让它重置JRE并抛出一堆项目错误&#xff01; 我在使用Open Liberty与Java 9一起运行Java EE 8的帖子中注意到了这个问题 解决方案…

python变量持久化_Python 数据持久化:JSON

Python 数据持久化&#xff1a;JSON编程派微信号&#xff1a;codingpy淡蓝色字体可以直接点击查看上周更新的《Think Python 2e》第14章讲述了几种数据持久化的方式&#xff0c;包括dbm、pickle等&#xff0c;但是考虑到篇幅和读者等因素&#xff0c;并没有将各种方式都列全。本…

jwt配置 restful_SpringBoot实现JWT保护前后端分离RESTful API

本文将用不到100行Java代码, 教你如何在Spring Boot里面用JWT保护RESTful api.登录前登录之后即可得到正确结果登陆后1. 什么是JWT了解JWT的同学可以跳过这一部分废话少说, 我们先看看什么是JWT. JSON Web Token其实就是一个包含认证数据的JSON, 大概长这样子分三个部分,第一部…

fusion构建器代码语法_构建器模式:适用于代码,适用于测试

fusion构建器代码语法我发现构建器设计模式偶尔在代码中有用&#xff0c;但在测试中经常有用。 本文简要概述了该模式&#xff0c;然后介绍了在测试中使用该模式的一个有效示例。 请参阅github中的代码。 生成器模式的背景 根据GoF的书 &#xff0c;构建器设计模式用于“将复杂…

6000毫安以上智能手机_三星超长续航神机,6000毫安+128GB,上市半年不到跌至1499...

现在的手机是越来越智能了&#xff0c;无论是苹果还是安卓&#xff0c;基本都能为用户的生活添加几分乐趣&#xff0c;因为&#xff0c;当我们感到无聊时&#xff0c;基本都可以通过智能手机来打发时间。据我所知&#xff0c;不少人在用智能手机时都有个困扰&#xff0c;就是续…

使用RabbitMQ进行消息传递

RabbitMQ是一个强大的消息代理&#xff0c;可用于实现不同的消息传递模式。 即使有出色的教程 &#xff08;使用不同的语言和框架&#xff09;&#xff0c;也很难理解这些概念。 在这篇文章中&#xff0c;我想展示一些可以用RabbitMQ实现的不同范例&#xff0c;以及为什么要为某…

android 为什么fragment在调用hide方法后没有生效_Android 多 Fragment 切换优化

code小生,一个专注 Android 领域的技术平台公众号回复 Android 加入我的安卓技术群作者&#xff1a;DDDong丶链接&#xff1a;https://www.jianshu.com/p/c8e8a0249911声明&#xff1a;本文已获DDDong丶授权发表&#xff0c;转发等请联系原作者授权问题分析一直在简书里看别人的…