前言
寫最開始的位置:很重要
? ? ? ?使用ID定位鳞仙,需要看ID是不是接了一串變化的數(shù)字,如果是,一般需要使用xpath模糊定位(可以看后續(xù)的xpath定位)跋选;如果是那么定位,需要查看name是否唯一哗蜈,畢竟前端也會手抖犯錯前标。使用xpath定位,JS定位有時需要調(diào)整語句距潘,針對的是動態(tài)ID與需要循環(huán)操作的情況炼列。不要把copy的元素當成百分百準確
一、八大元素定位
driver為實例化的瀏覽器音比,可以看前面的文章俭尖,或者后面的實例
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)站零抬,像菜鳥教程一樣镊讼。
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ù)分享菩收,如果喜歡本文梨睁,請點個贊!