每逢佳节倍思亲,中秋节到了,这里祝愿大家中秋节快乐。

今天主要向大家介绍的是如何自动打开浏览器并自动搜索指定内容。

1. 下载谷歌浏览器驱动

为什么要下载驱动?

因为一般的写爬虫的方法是用脚本直接对目标网站进行访问,而且只对目标数据进行采集,访问速度很快,这样目标网站很容易就识别出你是爬虫,然后把你封锁了。这个时候,为了更加像人浏览网站,需要一个控制器来控制浏览器,这样就可以避开封锁,很多难爬的网站也可以轻而易举的抓数据了。

我们就是通过一个叫做Selenium的工具做到模拟人浏览浏览器的,当然,Selenium不仅如此,它还是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。

针对不同的浏览器,控制底层的逻辑实现不同,因此,不同的浏览器需要下载不同的驱动,这有点类似于连接到不同的数据库时需要不同的数据库驱动一样,这里提供一个谷歌浏览器的驱动下载链接:谷歌浏览器驱动。

2. 元素定位之XPath

XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力,在实际开发自动化脚本过程中,XPath的使用是最多的一种方法。关于XPath的其他内容,读者可以自行百度。

这里主要介绍一下如何获取某一个元素的XPath,例如,我们以获取百度首页的搜索文本框填入搜索内容后点击搜索按钮距离。

上述操作对于没有接触过谷歌浏览器的读者可能有一定的困难,如果有不懂可以评论区留兰。

copy xpath后,直接黏贴,可以看到如下的路径字符串:

//*[@id="kw"]

为了实现搜索,我们也获取一下“百度一下”按钮的XPath:

//*[@id="su"]

3. 搜索内容

下面演示一下如何打开浏览器并输入搜索“中秋快乐”的。首先,建立一个maven项目,并在pom.xml中添加依赖的jar包:

org.seleniumhq.selenium

selenium-java

3.4.0

接着,编写我们主要的代码:

3.1 获取驱动对象

/**

* 获取Chrome驱动

*

* @param path 路径

* @return

* @throws Exception

*/

public static WebDriver createChromeWebDriver(String path) throws Exception {

if (path == null || "".equals(path)) {

throw new Exception("配置错误, 没有配置:chrome path");

}

System.getProperties().setProperty("webdriver.chrome.driver", path);

WebDriver webDriver = new ChromeDriver();

webDriver.manage().timeouts().pageLoadTimeout(1200, TimeUnit.SECONDS);

webDriver.manage().window().setSize(new Dimension(1024, 768));

return webDriver;

}

3.2 搜索

/**

* 搜索

*

* @param key 关键字

*/

public static void search(WebDriver driver, String key) {

driver.get("http://baidu.com/");

WebElement elementKey = driver.findElement(By.xpath("//*[@id=\"kw\"]"));

elementKey.sendKeys(key);

WebElement elementClick = driver.findElement(By.xpath("//*[@id=\"su\"]"));

elementClick.click();

}

3.3 完整代码

package com.clawer.logintest;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;

import org.openqa.selenium.Dimension;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.chrome.ChromeDriver;

/**

* 百度搜索

*/

public class App {

public static void main(String[] args) {

WebDriver webDriver;

try {

webDriver = createChromeWebDriver("webdrivers\\chromedriver.exe");

search(webDriver, "中秋快乐");

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 创建Chrome

*

* @param path 路径

* @return

* @throws Exception

*/

public static WebDriver createChromeWebDriver(String path) throws Exception {

if (path == null || "".equals(path)) {

throw new Exception("配置错误, 没有配置:chrome path");

}

System.getProperties().setProperty("webdriver.chrome.driver", path);

WebDriver webDriver = new ChromeDriver();

webDriver.manage().timeouts().pageLoadTimeout(1200, TimeUnit.SECONDS);

webDriver.manage().window().setSize(new Dimension(1024, 768));

return webDriver;

}

/**

* 搜索

*

* @param key 关键字

*/

public static void search(WebDriver driver, String key) {

driver.get("http://baidu.com/");

WebElement elementKey = driver.findElement(By.xpath("//*[@id=\"kw\"]"));

elementKey.sendKeys(key);

WebElement elementClick = driver.findElement(By.xpath("//*[@id=\"su\"]"));

elementClick.click();

}

}

4. 报错处理

unknown error: call function result missing 'value'

Starting ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) on port 38667

Only local connections are allowed.

九月 13, 2019 2:27:01 下午 org.openqa.selenium.remote.ProtocolHandshake createSession

信息: Detected dialect: OSS

org.openqa.selenium.WebDriverException: unknown error: call function result missing 'value'

(Session info: chrome=76.0.3809.100)

(Driver info: chromedriver=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f),platform=Windows NT 10.0.17134 x86_64) (WARNING: The server did not provide any stacktrace information)

Command duration or timeout: 81 milliseconds

Build info: version: '3.4.0', revision: 'unknown', time: 'unknown'

System info: host: 'MicroWin10-2025', ip: '192.168.44.45', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_131'

Driver info: org.openqa.selenium.chrome.ChromeDriver

Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, networkConnectionEnabled=false, chrome={chromedriverVersion=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f), userDataDir=C:\Users\ADMINI~1\AppData\Local\Temp\scoped_dir8664_25666}, takesHeapSnapshot=true, pageLoadStrategy=normal, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=76.0.3809.100, platform=XP, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true, setWindowRect=true, unexpectedAlertBehaviour=}]

Session ID: 879a1a7546fff18bd185a2a8a54c6b48

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

at java.lang.reflect.Constructor.newInstance(Constructor.java:423)

at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:215)

at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:167)

at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:671)

at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:272)

at org.openqa.selenium.remote.RemoteWebElement.sendKeys(RemoteWebElement.java:96)

at com.clawer.logintest.App.search(App.java:52)

at com.clawer.logintest.App.main(App.java:20)

标签:java,中秋节,好礼,openqa,path,org,浏览器,selenium

来源: https://blog.csdn.net/zyxhangiian123456789/article/details/100801466

Java中秋_【java】中秋节好礼相关推荐

  1. java沙漏_(java)五大常用算法

    算法一:分治法 基本概念1.把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题--直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并.2.分治策略是对于一个规模 ...

  2. android java教程_[Java教程]Android开发快速入门

    [Java教程]Android开发快速入门 0 2020-12-22 18:01:40 Xamarin.Android 应用程序剖析 以下屏幕截图列出了解决方案的内容. 下面是一个解决方案资源管理器, ...

  3. java 矩阵_(JAVA)计算机图形学与矩阵

    (JAVA)计算机图形学与矩阵 平移 旋转 变比 一)矩阵 1)矩阵的乘法运算 矩阵是计算机图形学的重要工具. 计算机图形学要常常用到 矩阵乘法(矩阵与矩阵相乘). 矩阵(Aij)m*n 与矩阵(Bi ...

  4. java后门_@Java Web 程序员,我们一起给程序开个后门吧:让你在保留现场,服务不重启的情况下,执行我们的调试代码...

    从数据库.redis取了些数据,做了一些运算后,没抛异常,但是就是结果不对 抛了个空指针异常,但是看代码,感觉没问题,是取出来就是空,还是中间什么函数把它改坏了 发现导致一个bug的原因是用了JVM缓 ...

  5. ie8不兼容java项目_[Java教程]ie8以下不兼容document.getElementsByName解决方法

    [Java教程]ie8以下不兼容document.getElementsByName解决方法 0 2016-09-13 19:00:06 在IE8以认为只有文本标签才有name属性的,一些元素标签用d ...

  6. java切片_ java中一个极其强悍的新特性Stream详解(非常实用)

    java8中有两个非常有名的改进,一个是Lambda表达式,一个是Stream.如果我们了解过函数式编程的话,都知道Stream真正把函数式编程的风格引入到了java中.这篇文章由简入繁逐步介绍Str ...

  7. java获取焦点_[Java教程]dialog获取焦点

    [Java教程]dialog获取焦点 0 2014-09-25 18:00:41 弹出层是一个iframe openWindow: function (options) { var url = opt ...

  8. java 浅克隆_(Java)浅克隆与深克隆的区别

    克隆,就是复制一个对象的副本,而克隆又分浅克隆和深克隆.浅克隆是指克隆得到的对象基本类型的值改变了,而源对象的值不会变.但如果被克隆对象引用类型的值改变了,那么源对象的值同样会改变,因为引用类型在栈内 ...

  9. Java折叠_[Java教程]Jquery中菜单的展开和折叠

    [Java教程]Jquery中菜单的展开和折叠 0 2018-08-15 16:03:38 标签内容 您好:alee 宿舍管理员 密码管理 修改密码 宿舍管理 学生宿舍查询 学生宿舍新增 学生宿舍分配 ...

最新文章

  1. 四款 5G 版 iPhone 12 齐发,支持北斗系统,你准备好了吗?
  2. 统计学习方法笔记 -- Boosting方法
  3. 3名游客在长城墙体上刻字,八达岭长城:已会同公安部门调查取证
  4. Java 解惑(Java Puzzler)
  5. 【MOSS】Sharepoint大附件上传
  6. 【实践】SimSvr在微信推荐系统中的应用实践
  7. 复工大势下,远程办公的科技企业只能“坐以待毙”吗?
  8. 【ABAP系列】SAP ABAP中关于commit的一点解释
  9. jquery知识点总结(转)
  10. Sound quality comparison among high-quality vocoders by using re-synthesized speech
  11. 计算机中丢失无法开机密码,手把手教你“电脑开机密码忘记了,无法登录”的解决方法...
  12. ZZULIOJ1026
  13. WP Engine开发人员工具的好处
  14. 条码生成器如何生成GS1-128条码
  15. linux c 获取文件大小
  16. 【脚本工具】QQ个人数据管理方法与脚本
  17. 基于android端计步器软件的尝试
  18. 利用计算机对信息加工的步骤,计算机是通过______的存储程序来______完成数据的加工处理。...
  19. 《炬丰科技-半导体工艺》半导体封装中金丝键合技术
  20. win10 快速批量删除快速访问下的文件夹记录

热门文章

  1. 太卷了, 某公司把自家运营多年的核心系统完全开源了....
  2. 豪掷重金收购美国“b站”Crunchyroll,索尼流媒体野心有多大?
  3. idea如何去除代码中的大量波浪线
  4. 软硬差异定性未来发展 笔电屏幕走在分岔路口
  5. 树莓派Samba共享U盘步骤及U盘无法访问的问题
  6. 【JavaWeb·1】MySQL数据库使用方法
  7. sklearn安装成功,调用时报错NO Module “sklearn“
  8. 百度超级链沙龙回顾 | 百信银行梁俊锋:区块链技术在金融行业的应用探索
  9. 7-126 时间差 (10分)
  10. int.TryParse