JAVA 爬虫:Selenium—自动化测试工具

JAVA爬虫 selenium自动化测试的学习记录!

因为最近新型冠状病毒的事件,在家闲的发慌,加上一直对爬虫有独特的喜爱,但目前只会java基础,py还未深入学习,所以我打算开始我的java爬虫学习之路。(本人大一,有什么说错的请大家纠正!)

●为什么要用-Selenium 呢?

为什么java爬虫要用到selenium呢?,在前几天刚刚接触selenium的时候,我也不是很清楚,为什么不能用httpclient,之类的框架做爬虫呢?,

对于这个疑问,后续我也使用了httpclient做了一个爬虫,然鹅,就在我要爬取我们学校教务系统的信息的时候,我发现了,我们学校的登录验证需要提交一个表单,而表单里面的内容,密码是经过了各种加密,还有一个token验证,才能登录成功。

所以这样看来,使用selenium是一个很好的选择,因为他采用了人工模拟操作浏览器点击的方式进行,所以绕过了这些防线。(或者是我太笨了,不会加密解密?)

●初识-Selenium

Selenium是web自动化测试的一个工具

  1. 支持的浏览器: IE,火狐,谷歌,等等很多浏览器;
  2. Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样

●使用Selenium遇到的问题,和解决方法

遇到的问题,和解决方法:

●正文:------------JAVA爬虫 selenium自动化测试------------

学习内容我将实实时更新,并分节进行,如果章节内容实在过多,我会用插入链接的方式进行更新。
屁话不多说,开始!

(一)Selenium 的环境搭建

1.Selenium的jar包: http://selenium-release.storage.googleapis.com/index.html.

2.使用浏览器内核当然要先下对应的浏览器啊!,自己准备好浏览器。

3.各种浏览器的内核,(推荐使用chrome,我也不知道为啥用谷歌,看到很多人用,就用了)

下载完之后就可以开始写代码了:
打开eclipse

/*设置浏览器内核的路径
*第一个参数的格式: webdriver.你浏览器内核的名字.driver
*比如浏览器是谷歌: webdriver.chrome.driver
*火狐:webdriver.gecko.driver
*/
System.setProperty("webdriver.chrome.driver", "浏览器内核的路径");
//实例化对象
WebDriver driver = new ChromeDriver();
//打开浏览器,访问网站
driver.get("网站网址");

(二)Selenium 浏览器启动命令,无头浏览,禁止加载图片,css文件

需要调用 —ChromeOptions,这个类中的方法:

  • addArguments() --添加浏览器启动参数

为了加快爬取速度,我们一般通过执行浏览器启动参数,来进行——无头浏览,禁止加载图片,css文件,等操作。
而:浏览器启动参数一般有:

  • - -headless 无头浏览—隐藏浏览器,在后台执行模拟浏览器的操作。
  • blink-settings=imagesEnabled=false 禁止加载图片,css文件,—快速加浏览器,加快爬取速度。
ChromeOptions chromeoptions=new ChromeOptions ();

chromeoptions.addArguments("--headless");//无头浏览
chromeoptions.addArguments("blink-settings=imagesEnabled=false");//禁用图片

WebDriver driver = new ChromeDriver(chromeoptions);//传入chromeoptions对象
driver.get("网站网址");

其实经过博主的大量测试,无头浏览加上禁用图片这2个操作,最多会加快个1秒左右,如果不是需要大量的爬取,加与不加都无所谓,仅仅是简洁的作用罢了。

谷歌还有很多启动参数,但是有些似乎没用的,大家有兴趣的可以看看:
https://peter.sh/experiments/chromium-command-line-switches/.

(三)Selenium 浏览器上的元素定位

其实这个的话学过js定位操作的同学都很简单,不会js的同学先去学一学吧。
这里就举最常用的几个例子—sendkey() 和—click();

这里的By是selenium的一个类,通过这个类来指定元素,id,classname,tagname什么什么的

WebDriver driver = new ChromeDriver();
driver.findElement(By.id("yhm")).sendKeys(account);//输入账号
driver.findElement(By.id("mm")).sendKeys(password);//输入密码
driver.findElement(By.id("dl")).click();//点击
//如果是classname还有tagname之类的元素,需要一个List<>集合去获得
List<WebElement> list=driver.findElement(By.className("name"));

更多的元素操作跟js都是一个道理的,自己慢慢摸索吧。

(四)Selenium 浏览器上的页面操作,运行js命令

  1. 浏览器常用操作
driver.get(url);//访问指定URL
driver.getPageSource();//获取当前网页的源码
driver.getCurrentUrl();//获取当前的url
driver.getTitle();//获取网页标题

driver.manage();//获取options
driver.manage().getCookies();//获取cookie集合
driver.manage().getCookieNamed(name);//获取指定的cookie

driver.quit();//关闭浏览器(推荐使用这个方法,quit可以比close更加完全的释放资源)
driver.close();//关闭浏览器(不推荐用这个)
  1. 执行js命令——要用到:JavascriptExecutor这个类
    只要是js代码,都可以运行

(1) 无返回值

JavascriptExecutor executor= (JavascriptExecutor) driver;//转换driver对象,获取js执行器
String js="console.log('hello world')";//js语句
executor.executeScript(js);//执行js

(2) 有返回值

JavascriptExecutor executor= (JavascriptExecutor) driver;//转换driver对象,获取js执行器
String js=""
		+ "var a=1;"
		+ "var b=2;"
		+ "var sum=a+b;"
		+ "return sum;";//return 返回值
int sum=(int)executor.executeScript(js);//执行js,并返回一个object值,强制转换为int

JavascriptExecutor 还有其他的方法可以使用,大家有兴趣可以自己研究一下。

发布了4 篇原创文章 · 获赞 5 · 访问量 319

猜你喜欢

转载自blog.csdn.net/qq_31254489/article/details/104222186