selenium簡單使用及元素定位方法

一、selenium簡單使用

以下是selenium的一些簡單的基礎用法
以下程序實現功能:自動跳轉到百度首頁,自動化界面,然后訪問跳轉淘寶網首頁,回退到上一頁(百度首頁),回到下一頁(淘寶網首頁),刷新淘寶網首頁,獲取標題、網址及窗口句柄并輸出,結束會話關閉退出。

# -*-coding: utf8 -*-
from selenium import webdriver

service_log_path = 'chromedriver.log' #生成日志存儲在本目錄下的.log文件內

#啟動谷歌瀏覽器,開啟與谷歌之間的會話
driver = webdriver.Chrome(service_log_path=service_log_path)

#訪問一個網頁
driver.get('https://www.baidu.com/')

#窗口最大化
driver.maximize_window()

#訪問
driver.get('http://www.taobao.com')

#回退上一頁
driver.back()

#回到下一頁
driver.forward()

#刷新頁面
driver.refresh()

#獲取標題
print(driver.title)

#獲取網址
print(driver.current_url)

#窗口的句柄
print(driver.current_window_handle)

# #結束會話
# driver.quit()

終端輸出結果,可以看到淘寶網的標題、網址及窗口的句柄

image.png

二、selenium元素定位方法

以下以百度首頁為例:定位到百度搜索框

image.png

(1)方式一: 通過id進行定位,id定位結果唯一

ele = driver.find_element_by_id("kw")
print(ele)
print(ele.get_attribute("class")) #獲取屬性class的值

(2)方式二:通過class進行定位

eles =driver.find_elements_by_class_name('s_ipt')
driver.find_element_by_class_name('s_ipt')

(3)方式三:通過name進行定位

driver.find_element_by_name('wd')
driver.find_elements_by_name('wd')#獲取第一個

(4)方式四 :通過tagname標簽名進行定位

driver.find_element_by_tag_name("input")
driver.find_elements_by_tag_name("input")

(5)方式五、六: 針對文本鏈接進行定位(定位到百度首頁右上角“更多產品”)

driver.find_element_by_link_text("更多產品")
driver.find_elements_by_link_text("更多產品")
driver.find_element_by_partial_link_text("產品")#模糊匹配

(6)方式七:通過xpath進行定位(百度首頁搜索框)

driver.find_element_by_xpath("http://*[@id="kw"]")

百度首頁,按F12,左上角可以定位;CTRL+F會出現搜索框,將搜索內容放在此處可查看是否定位到元素

image.png
  • 絕對定位/開頭 非常依賴頁面的順序和位置
    方法: /父/子
    /html/body/div[1]/div[1]/div/div[1]/div/form/span[1]/input
  • 相對定位//開頭 不依賴頁面的順序和位置,只看整個頁面當中有沒有符合表達式的元素
    方法1: //標簽名稱[@屬性名稱=值]
    //input[@id="kw"]
    方法2: 邏輯運算 and or //標簽名稱[@屬性名稱=值 and @屬性名稱=值]
    //input[@id="kw" or name="wd"]
    方法3( 層級定位): 先找到他的父級然后再定位父級地址//標簽名稱[@屬性名稱=值]/標簽名稱[@屬性名稱=值]
    //span[@class="bg s_ipt_wr quickdelete-wrap"]/input[@name="wd"]
    方法4(定位文本):text()="文本內容" //標簽名稱[@屬性名稱=值]//標簽名稱[text()="文本內容"]或者//標簽名稱[text()="文本內容"]
    定位到百度首頁右上角登錄//a[text()="登錄"]
    方法5(contains):屬性名或著文本包含某個文本內容 contains(@屬性名稱/text(),文本內容)
    定位百度首頁右上角更多產品//a[contains(text(),"更多產品")]
    方法6(軸定位):通過找到他的父級或祖先級然后找到兄弟姐妹最終定位到要定位的元素的方法(表格定位比較多,列名相同定位到某一行)
    軸名稱:下面幾種常用的
  • ancestor(祖先結點)
  • parent(父節點)
  • preceding-sibling(前面的兄弟結點)
  • following-sibling(后面的兄弟結點)
    使用方法: /軸名稱::節點名稱[@屬性=值] 節點名稱(標簽名稱)
    定位云班課課堂成員中的“經驗值”
    //div[@title="mxy"]/following-sibling::div/span[@style="float: right"]
image.png

三、document定位元素

(1)查找元素
  • 元素的id屬性:
    document.getElementById()
image.png
  • 元素的class屬性:
    document.getELementsByClassName()
image.png
  • 元素的標簽名:
    document.getElementsByTagName()
image.png
  • 元素的name屬性:
    document.getElementsByName()
image.png
  • css選擇器:
    document.querySelector(css)
(2)元素的屬性
  • 改變屬性
    document.getElementByXXX("").屬性名=屬性值
  • 獲取屬性
    document.getElementByXXX("").getAttribute(屬性名)
  • 改變元素內容:
    包含html元素標簽---有后代
    document.getElementsByXXX("").innerHTML=new HTML
    不包含html標簽,純文字
    document.getElementsByXXX("").innerText=new text
(3)樣式
  • 改變樣式:
    document.getElementsByXXX("").style.樣式名=樣式值
    例:
  • 元素的可見性
    document.getElementsByXXX("").style.visibility='hidden'
  • 元素顏色
    document.getElementsByXXX("").style.color='red'
(4)事件

瀏覽器和用戶事件-觸發-執行js代碼帶來不同頁面響應。例如:點擊事件、輸入事件、鼠標事件等。

#頁面加載完成事件
windows.onload = function(){
alert("everything is ready!!!")
}
#點擊事件
document.getElementsByXXX("").onclick = function(){
alert("哈哈,點我了呀!!!")
}
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容