自動化系列——如何使用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"));

關注公衆號【程序員高手之路】,回覆【爬蟲】免費領取爬蟲教學視頻!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章