作者專注於Java、Linux、小程序、爬蟲、自動化等技術。 工作期間含淚整理出一些資料,微信搜索【程序員高手之路】,回覆 【java】【黑客】【爬蟲】【小程序】【面試】等關鍵字免費獲取資料。
目錄
前言
網上的爬蟲、自動化一般都是使用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"));
關注公衆號【程序員高手之路】,回覆【爬蟲】免費領取爬蟲教學視頻!