自动化系列——如何使用java代码通过selenium获取页面元素

作者专注于Java、Linux、小程序、爬虫、自动化等技术。 工作期间含泪整理出一些资料,微信搜索【程序员高手之路】,回复 【java】【黑客】【爬虫】【小程序】【面试】等关键字免费获取资料。 

目录

前言

一、通过css selector

1.同一个class只有一个元素

2.同一个class有多个元素

2.1 通过list

 2.2 通过上级的单个class或id获取

二、通过XPath


前言

网上的爬虫、自动化一般都是使用python来做的;

身为java程序员,当然要不甘示弱!

所以就写了java爬虫系列文章,供众多java程序员参考!

首先看一下自动化操作百度首页的图像(源码地址:做自动化必备工作以及hello world代码):

Selenium提供了8种定位方式:

  • id
  • name
  • class name
  • tag name
  • link text
  • partial link text
  • xpath
  • css selector

我做过很长时间的自动化,发现css selector、xpath这两种方式已经足够我们用了,所以这篇文章以这两种方式为例!

如果这两种还不行的话,再到网上找其他方式!

以【简书】的主页为例,介绍如何使用java代码获取页面元素。

一、通过css selector

css在前端对应的就是class属性,所以我们找到class就行了

1.同一个class只有一个元素

浏览器上按F12定位到“消息”上:可以看到class为“tab notification”

那么就可以通过这个class获取元素了!

java代码:

//注意:因为用的是class,所以需要在前面加上一个点,多个class则每个class前面有一个点,中间没有空格
driver.findElement(By.cssSelector(".tab.notification"));

同样的道理,如果是id的话,需要将上面的点换成#

//注意:因为用的是id,需要在前面加上一个#
driver.findElement(By.cssSelector("#id"))

2.同一个class有多个元素

比如获取下面文章列表里面第一篇文章的标题;

我们看到class为title,但是这个class是所有标题都会用到的,这样使用driver.findElement就不行了!

有很多种方式解决:

2.1 通过list

使用driver.findElements()先获取所有的.title放到list中,然后通过list.get(0)获取。

注意:是findElements而不是findElement

List<WebElement> list = driver.findElements(By.cssSelector(".title"));
WebElement first = list.get(0);

 2.2 通过上级的单个class或id获取


我们看到title的上级有一个元素有id,id代表了唯一性,所以可以通过这个id获取:

driver.findElement(By.cssSelector("#note-69812384")).findElement(By.cssSelector(".title"));

这里使用了两次findElement,也是可以分开来写的!

二、通过XPath

如果一个没有class怎么办?比如“总资产”3个字,该怎么获取到呢?

 可以通过XPath,右键这个元素对应的标签,点击Copy XPath就可以了,

这里是:/html/body/div[1]/div/div[1]/div[1]/div[2]/ul/li[6]/div/div

java代码有两种写法:

//1.使用cssSelector
driver.findElements(By.cssSelector("/html/body/div[1]/div/div[1]/div[1]/div[2]/ul/li[6]/div/div"));

//2.使用xpath
driver.findElements(By.xpath("/html/body/div[1]/div/div[1]/div[1]/div[2]/ul/li[6]/div/div"));

关注下面的公众号,回复【爬虫】免费领取爬虫教学视频!

原创文章 136 获赞 1779 访问量 59万+

猜你喜欢

转载自blog.csdn.net/qq_26230421/article/details/106097132