WebUI之元素定位(超詳細版)

前言

寫最開始的位置:很重要

? ? ? ?使用ID定位鳞仙,需要看ID是不是接了一串變化的數(shù)字,如果是,一般需要使用xpath模糊定位(可以看后續(xù)的xpath定位)跋选;如果是那么定位,需要查看name是否唯一哗蜈,畢竟前端也會手抖犯錯前标。使用xpath定位,JS定位有時需要調(diào)整語句距潘,針對的是動態(tài)ID與需要循環(huán)操作的情況炼列。不要把copy的元素當成百分百準確

一、八大元素定位

driver為實例化的瀏覽器音比,可以看前面的文章俭尖,或者后面的實例

image

driver.find_element_by_id()
? ? ? ?通過標簽的id定位,因為id為唯一值

driver.find_element_by_name()
? ? ? ? 通過標簽里面的屬性name定位洞翩,但那么有時不唯一稽犁,在使用前需要查找是否只有一個

driver.find_element_by_class_name()
? ? ? ? 通過標簽里面的屬性class定位,但那么有時不唯一骚亿,在使用前需要查找是否只有一個

driver.find_element_by_tag_name()
? ? ? ?通過標簽名定位已亥,這個不推介使用

以上都是HTML的標簽內(nèi)容

driver.find_element_by_xpath()
? ? ? ? xpath定位一般在打開的開發(fā)者模式中,使用選取元素来屠,定位到元素陷猫,右擊元素秫舌,在展開的菜單中點擊copy,里面有xpath绣檬、selector足陨、js path用于定位元素。如果想自己寫xpath娇未,需要學習xpath相關知識墨缘,可以到w3cschool學習相關的知識,這是一個免費的學習網(wǎng)站零抬,像菜鳥教程一樣镊讼。

image.png

driver.find_element_by_link_text()
? ? ? ? 這是通過鏈接的文字直接定位(注意:必須是鏈接上的全部文字)

driver.find_element_by_partial_link_text()
? ? ? ? 這是通過鏈接的部分文字直接定位(注意:可以不是全部文字,但是要注意是否唯一平夜,不然會定位到其他地方蝶棋,或者無法定位)

driver.find_element_by_css_selector()

附源代碼

from selenium import webdriver
import time
from selenium.webdriver.support import expected_conditions as EC

driver=webdriver.Chrome()
driver.get('http://www.xbiquge.la/')

# driver.find_element_by_name('searchkey').send_keys('唐家三少')
# driver.find_element_by_class_name('search').send_keys('唐家三少')
# driver.find_element_by_id('wd').send_keys('唐家三少')
# time.sleep(3)
js_loctor="document.getElementById('wd').value='唐家三少'"
element=driver.execute_script(js_loctor)
#判斷是否定位到元素
if EC.visibility_of_element_located(element):
    print("js定位到元素")
else:
    print("js沒有定位到元素")
time.sleep(3)

search_buttom='document.querySelector("#sss").click()'
driver.execute_script(search_buttom)
time.sleep(3)

#下面為通過JS執(zhí)行滾動屏幕,document.body.scrollHeight為到底部的距離
js = "window.scrollTo(0,document.body.scrollHeight)"
driver.execute_script(js)

# driver.find_element_by_link_text('全職法師').click()
driver.find_element_by_partial_link_text('全職').click()

二忽妒、JS定位

(一)JS定位方法一:getElementsBy

  • 通過 id 查找 HTML 元素 ? ? ? ? document.getElementById("id名")
  • 通過標簽名查找 HTML 元素? ? ? ?getElementsByTagName("標簽名")
  • 通過類名查找 HTML 元素? ? ? ?getElementsByClassName("類名")
  • 通過 CSS 選擇器查找 HTML 元素
    ? ? ? ? querySelectorAll()查找所有符合條件的元素玩裙,返回一個列表
    ? ? ? ? querySelector()查找符合條件的單個元素
#這是在Python中的代碼
#使用js操作相關文檔內(nèi)容時,都需要以document開頭
#向id="wd"的輸入框內(nèi)輸入值
js_loctor="document.getElementById('wd').value='唐家三少'"
element=driver.execute_script(js_loctor)
#判斷是否定位到元素
if EC.visibility_of_element_located(element):
    print("js定位到元素")
else:
    print("js沒有定位到元素")

在Chrome中使用js xpath復制到的都是querySelector()段直,都是可以直接執(zhí)行的吃溅,但是如果想要進行相關操作,js元素的相關操作鸯檬。下面繼續(xù)上一個示例决侈,寫后續(xù)的按鈕搜索內(nèi)容:

#js定位元素,并改變屬性值
js_loctor="document.getElementById('wd').value='唐家三少'"
element=driver.execute_script(js_loctor)
#判斷是否定位到元素
if EC.visibility_of_element_located(element):
    print("js定位到元素")
else:
    print("js沒有定位到元素")
time.sleep(3)
#js定位元素喧务,并進行點擊操作
search_buttom="document.getElementById('su').click()"
driver.execute_script(search_buttom)
time.sleep(3)

(二)JS定位方法二:querySelector

通過 JS的CSS 選擇器查找 HTML 元素

  • querySelectorAll()? ? ? ?查找所有符合條件的元素赖歌,返回一個列表
  • querySelector()? ? ? ?查找符合條件的單個元素

其他可以參考CSS選擇器語法

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
#設置輸入框的值
js='var js=document.querySelector("#kw");js.value="selenium";' \
   'document.querySelector("#su").click();'
#或js="document.querySelector('#kw)'.value='selenium'"
driver.execute_script(js)

#獲取輸入框內(nèi)的值
js2=' return document.querySelector("#kw").value'
# js2="return document.getElementById('kw').value"
value=driver.execute_script(js2)
print(value)

使用querySelectorAll()注意事項:

? ? ? ?由于使用querySelectorAll定位到元素返回一個列表,所以在操作是需要加索引確定元素功茴,不然會沒有反應庐冯。
注意下面的索引:

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
#設置輸入框的值
js='var js=document.querySelectorAll("#kw")[0];js.value="selenium";' \
   'document.querySelector("#su").click();'
#或js="document.querySelector('#kw)'.value='selenium'"
driver.execute_script(js)


結(jié)語:
? ? ? ? 關于元素定位,了解一下痊土,操作一下肄扎,知道哪些基本的定位墨林,以及難以定位的元素如何定位即可赁酝。一般定位元素,直接打開開發(fā)者模式旭等,copy即可酌呆。但是需要注意,copy到的元素能不能真正定位到搔耕。

備注:
? ? ? ? 對于xpath的語法內(nèi)容隙袁,定位元素后的相關操作痰娱,瀏覽器相關操作與設置,將在后面繼續(xù)分享菩收,如果喜歡本文梨睁,請點個贊!





最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末娜饵,一起剝皮案震驚了整個濱河市坡贺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌箱舞,老刑警劉巖遍坟,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異晴股,居然都是意外死亡愿伴,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門电湘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來隔节,“玉大人,你說我怎么就攤上這事胡桨」倭保” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵昧谊,是天一觀的道長刽虹。 經(jīng)常有香客問我,道長呢诬,這世上最難降的妖魔是什么涌哲? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮尚镰,結(jié)果婚禮上阀圾,老公的妹妹穿的比我還像新娘。我一直安慰自己狗唉,他們只是感情好初烘,可當我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著分俯,像睡著了一般肾筐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缸剪,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天吗铐,我揣著相機與錄音,去河邊找鬼杏节。 笑死唬渗,一個胖子當著我的面吹牛典阵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播镊逝,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼壮啊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了撑蒜?” 一聲冷哼從身側(cè)響起他巨,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎减江,沒想到半個月后染突,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡辈灼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年份企,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片巡莹。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡司志,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出降宅,到底是詐尸還是另有隱情骂远,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布腰根,位于F島的核電站激才,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏额嘿。R本人自食惡果不足惜瘸恼,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望册养。 院中可真熱鬧东帅,春花似錦、人聲如沸球拦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坎炼。三九已至愧膀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間点弯,已是汗流浹背扇调。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工矿咕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留抢肛,地道東北人狼钮。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像捡絮,于是被迫代替她去往敵國和親熬芜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容