大型情感劇集Selenium:3_元素定位 #華爲雲·尋找黑馬程序員#

關於昨天的文章

今天有朋友反饋,代碼運行的時候,selenium提示警告

DeprecationWarning: use options instead of chrome_options
driver = webdriver.Chrome(chrome_options=options)

本來以爲是我的selenium版本太低了,可以上官網看到3.141.0是最新版本啊,最後把python從3.6.8升級到3.7.3才復現了此問題。雖然這個告警不影響使用,但既然官方提示了修改就看看唄,其實很簡單:

# 將原本的chrome_options
driver = webdriver.Chrome(chrome_options=options)
# 改爲options 即可
driver = webdriver.Chrome(options=options)
# 另外,針對以下引用
from selenium.webdriver.chrome.options import Options
options = Options()
# 可以簡寫爲:
options = webdriver.ChromeOptions()
今天說什麼

今天肯定說元素定位啊,再不說都要取關了…可應該怎麼說呢?
話說,selenium1.0起初它使用了基於Javascript的自動化引擎,而瀏覽器對 Javascript 又有很多安全限制,之後後通過webdrvier進行了各瀏覽器的協議封裝。那麼說到底,我們通過selenium變相的完成了js的的相關操作,比如:
selenium元素定位方法
再來看看js的dom對象:
js的dom對象
selenium將JavaScript的HTML DOM進行了封裝處理,最終提供給我們進行使用。引申出三點:

  1. 開發轉測試,真的是有優勢的
  2. 作爲一個合格的測試,抽時間學學html css 和js 也是對自己能力的提升
  3. 爬蟲熟識的html解析庫Beautifulsoup4,元素的定位上用法也類似以上兩者,一通百通!
selenium元素定位

WebDriver提供了一系列的定位符以便使用元素定位方法。常見的定位符有以下幾種:

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

而針對元素定位,selenium又分爲find_element_byfind_elements_by。即找到一個元素和找到所有元素。
針對find_elements_by,我們又可以針對找到的元素,我們又可以像python操作list一樣進行切片,篩選等操作。
我們以百度爲例,介紹以上方法:

方法Method 描述Description 參數Argument 示例Example
id 該方法通過ID的屬性值去定位查找單個元素 id: 需要被查找的元素的ID find_element_by_id(‘kw’)
class name 該方法通過class的名稱值去定位查找單個元素 class_name: 需要被查找的元素的類名 find_element_by_class_name(‘s_ipt’)
name 該方法通過name的屬性值去定位查找單個元素 name: 需要被查找的元素的名稱 find_element_by_name(‘wd’)
tag_name 該方法通過tag的名稱值去定位查找單個元素 tag: 需要被查找的元素的標籤名稱 find_element_by_tag_name(‘input’)
link_text 該方法通過鏈接文字去定位查找單個元素 link_text: 需要被查找的元素的鏈接文字 find_element_by_link_text(‘百度一下’)
partial_link_text 該方法通過部分鏈接文字去定位查找單個元素 link_text: 需要被查找的元素的部分鏈接文字 find_element_by_partial_link_text(‘百度’)
css_selector 該方法通過CSS選擇器去定位查找單個元素 css_selector: 需要被查找的元素的ID find_element_by_css_selector(’#su’)
xpath 該方法通過XPath的值去定位查找單個元素 xpath: 需要被查找的元素的xpath find_element_by_xpath(’//*[@id=“su”]’)

下來我們用代碼針對百度進行演示

# -*- coding: utf-8 -*-
# @Author   : 王翔
# @JianShu  : 清風Python
# @Date     : 2019/6/19 21:40
# @Software : PyCharm
# @version  :Python 3.7.3
# @File     : Day_3.1_chrome_option_warning.py
from selenium import webdriver
import time

options = webdriver.ChromeOptions()
options.add_argument('window-size=800,600')
options.add_argument('disable-infobars')
driver = webdriver.Chrome(options=options)

driver.get("http://www.baidu.com")

# link_text 定位
driver.find_element_by_link_text('新聞').click()
time.sleep(1)
driver.back()

# id 定位
driver.find_element_by_id("kw").send_keys("id 定位|")
time.sleep(1)

# class name 定位
driver.find_element_by_class_name("s_ipt").send_keys("class name 定位|")
time.sleep(1)

# name 定位
driver.find_element_by_name("wd").send_keys("name 定位|")
time.sleep(1)

# css 定位
driver.find_element_by_css_selector("#kw").send_keys("css 定位|")
time.sleep(1)

# xpath 定位
driver.find_element_by_xpath("//input[@id='kw']").send_keys(" xpath 定位|")
time.sleep(1)

driver.quit()

效果如下:
幾種定位方法演示

To Be Continue

今天的內容就到這裏,如果覺得有幫助,歡迎將文章或者我的公衆號【清風Python】分享給更多喜歡python的人

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