閱讀文本大概需要 3 分鐘。 前言我們知道,,不管是爬蟲還是自動化測試,,元素定位是最基本而且必須的一個步驟。今天我們就來講講怎么定位元素,。 爬蟲中定位元素爬蟲中怎么定位元素呢,?常見的有以下幾種:
BeautifulSoup 是一個可以從 HTML 或 XML 文件中提取數(shù)據(jù)的 Python 庫,我們需要安裝并導(dǎo)入這個庫,。 from bs4 import BeautifulSoup 我們再把我們提取的 html 數(shù)據(jù)轉(zhuǎn)換成 lxml 格式,,方便 BeautifulSoup 庫直接提取信息,。
BeautifulSoup find查找元素接下來我們就可以用 find 方法來查找元素了,比如查看所有 a 標簽元素,。 soup.find_all('a') BeautifulSoup css 選擇器定位元素BeautifulSoup 中我們也可以通過 css 選擇器查找定位元素,,導(dǎo)包和格式轉(zhuǎn)換和上面一樣,格式如下,。
select 方法中的字符串參數(shù)怎么獲取呢,,以 Chrome 瀏覽器為例,F(xiàn)12 檢查元素中右鍵復(fù)制 seletor 就可以了,。
當然,在源代碼中無法獲取的元素的 Ajax 動態(tài)加載的頁面,,上面的定位方法就不管用了,,我們可以通過分析 Network 中的請求,找到你需要提取的信息的規(guī)律,,這個內(nèi)容本文不做講解,。 selenium 定位selenium 庫定位元素有方法很多,,今天分享下常見的的定位方法,。 我們首先需要導(dǎo)入 selenium 庫,通過 webdriver 啟動 Chrome 瀏覽器,。 from selenium import webdriver ID 定位ID 一般在頁面元素中是唯一的,,可以準確定位頁面元素。
有些頁面元素的 id 是每次刷新頁面都不一樣的,,比如 163 郵箱的用戶名輸入框 id,,每次刷新頁面,這個 id 都會變,。所以,,對于這種每次不一樣的 id,我們都不能用 id 來定位了,。 這種隨機 id 的元素我們就通過其他屬性來定位或者通過父元素來找到子元素,。 classname 定位如果 classname 是唯一的話,我們就可以通過 classname 來定位元素,。 driver.find_element_by_id('classname') Xpath 定位Xpath 路徑獲取方法第一個方法和剛才獲取 selector 信息一樣,,直接 copy,。
這種方法缺點也很明顯,XPath 都是從根路徑開始的,,導(dǎo)致 XPath 過長,,不利于維護。 雙屬性定位對于一個屬性不是唯一的,,我們可以用 Xpath 的雙屬性來定位元素,,這個方法對于定位網(wǎng)頁和 APP 都適用。 上圖是網(wǎng)易云 APP,,我想定位簽到按鈕,,我可以通過 class 屬性和 text 屬性同時定位元素。
這種方法適用于很多元素共用同一個屬性的情況,,經(jīng)過我們的組合,,就把元素唯一化了。 網(wǎng)頁元素同樣也可以用雙元素來定位,,方法是一樣的,。 以上是 pk 哥平時常用的定位元素的方法,如有其他好的定位方法,,歡迎大家留言討論,,共同進步。 |
|