Python學習筆記之Selenium:Find命令大全

上一篇文章中講了selenium基本的操作,包括最簡單的元素定位方法。在實際中,每個人的需求都是多種多樣的,每個網頁元素也是不一樣的,你可能需要定位特定名稱的元素,或者是有特定屬性、特別文字,或是特定的超鏈接、特定結構下的第幾個元素。所以元素定位函數find有「許多個」,或者說可以接收各種不同的參數,這裡把常用的方法都列出來,大家不需要全部記下來,當做工具書查找就可以。

注意

selenium定位元素的函數/方法可以分為兩類:find_element及find_elements。find_element直接返回元素,如果有多個則只返回第一個,沒有找到則會報錯;find_elements以列表的形式返回所有找到的元素,如果沒找到會返回一個空列表,並不會報錯;所有的find_element都有對應的find_elements,下面只講find_element,find_elements用法是一樣的。先打開個一個瀏覽器,獲得一個webdriver實例。

from selenium import webdriver mydriver=webdriver.Firefox()mydriver.get(http://xxxx)

假設打開的頁面html源碼如下:

<a id="myid" class="myclass" href="http://www.diarybook.site"name="myhome">這是超鏈接的文本</a>

1、

element=mydriver.find_element_by_class_name("myclass")

通過class屬性值定位。

2、

element=mydriver.find_element_by_id("myid")

通過id屬性值定位。

3、

element=mydriver.find_element_by_css_selector(a[name="myhome"])

通過css選擇器定位。格式是(『標籤名[屬性名=」屬性值」]』),外面 是單引號,裡面是雙引號。個人認為這是最靈活和通用的方式。

4、

element=mydriver.find_element_by_link_text("這是超鏈接的文本")

通過超鏈接的文本定位,這裡的文本就是顯示在網頁上的文字,注意看上面html代碼中文字的位置,它是在閉合的尖括弧外面的。

5、

element=mydriver.find_element_by_partial_link_text("這是超鏈接")

和上面一樣,也是通過超鏈接的文本定位,但是只要部分文字就可以,例如」這是超鏈接」包含在」這是超鏈接的文本」里。當你在一個網頁里遇到很多超鏈接,對應的超鏈接文本都是「固定部分+編號」這種格式,你就可以用這個方法把它們一起全部找到。

6、

element=mydriver.find_element_by_name("myhome")

通過name屬性值定位。

7、

element=mydriver.find_element_by_tag_name("a")

通過標籤(tag)名定位,這裡是」a」。

8、

element=mydriver.find_element_by_xpath()

不打算講這個…賊麻煩還容易出錯,瀏覽器還要裝插件才方便看。其實主要是因為我不會。

另外:在用by_class、by_id等時發現,如果含有空格及標點等特殊符號時有bug會報錯,by_css_selector正常,所以還是推薦它。


推薦閱讀:

2017,再來聊一聊Python,未來發展怎樣?
05 爬取華為官網VMALL的手機評論
為什麼Python類成員的調用和聲明必須有&quot;this&quot;?
Python 開發者的6個必備庫

TAG:Python | Selenium | 网页爬虫 |