本篇文字主要學習selenium定位頁面元素的集中方法,以百度首頁為例子。
0.元素定位方法主要有:
- id定位:find_element_by_id(' ')
- name定位:find_element_by_name(' ')
- class定位:find_element_by_class_name(' ')
- tag定位:find_element_by_tag_name(' ')
- link定位:find_element_by_link_text(' ')
- partial link定位:find_element_by_partial_link_text(' ')
- xpath定位:find_element_by_xpath(' ')
- CSS定位:find_element_by_css_selector(' ')
- By定位
1.利用ID定位元素
from selenium import webdriver
# 設置瀏覽器
browser = webdriver.Chrome()
#設置瀏覽器大小:全屏
browser.maximize_window()
#打開百度首頁
browser.get('https://www.baidu.com/')
#定位百度搜索輸入框之前,先分析下它的html結構
#<input type="text" class="s_ipt nobg_s_fm_hover" name="wd" id="kw" maxlength="100" autocomplete="off">
#發現它的 id="kw" ,接下來我們就通過id進行定位
try:
browser.find_element_by_id('kw').send_keys('哈哈')
print('test post:id')
except Exception as e:
print('test fail')
#輸出內容:test post:id
2.利用name定位元素
from selenium import webdriver
browser = webdriver.Chrome()
browser.maximize_window()
#打開百度首頁
browser.get('https://www.baidu.com/')
#搜索框的html結構:<input type="text" class="s_ipt nobg_s_fm_hover" name="wd" id="kw" maxlength="100" autocomplete="off">
# 根據name屬性定位
try:
browser.find_element_by_name('wd').send_keys('哈哈')
print('test post:name')
except Exception as e:
print('test fail')
#輸出內容:test post:name
3.利用class定位元素
from selenium import webdriver
browser = webdriver.Chrome()
browser.maximize_window()
#打開百度首頁
browser.get('https://www.baidu.com/')
#搜索框的html結構:<input type="text" class="s_ipt nobg_s_fm_hover" name="wd" id="kw" maxlength="100" autocomplete="off">
# 根據class_name屬性定位
try:
browser.find_element_by_class_name('s_ipt').send_keys('哈哈')
print('test post:class_name')
except Exception as e:
print('test fail')
#輸出內容:test post:class_name
4.利用tag_name定位元素
from selenium import webdriver
browser = webdriver.Chrome()
browser.maximize_window()
#打開百度首頁
browser.get('https://www.baidu.com/')
#搜索框的html結構:<input type="text" class="s_ipt nobg_s_fm_hover" name="wd" id="kw" maxlength="100" autocomplete="off">
# 根據tag_name屬性定位
try:
browser.find_element_by_tag_name('form')
print('test post:tag_name')
except Exception as e:
print('test fail')
#輸出內容:test post:tag_name
5.利用link_text定位元素
- link_text:根據跳轉鏈接上面的文字來定位元素。
from selenium import webdriver
browser = webdriver.Chrome()
browser.maximize_window()
#打開百度首頁
browser.get('https://www.baidu.com/')
# 根據link_text屬性定位元素“新聞”,然后點擊按鈕
try:
browser.find_element_by_link_text('新聞').click()
print('test post:tag_name')
except Exception as e:
print('test fail')
#輸出內容:test post:link_text
6.利用partial_link_text定位元素
- 和link_text定位元素差不多,partial_link_text是通過文字信息中的部分字段來定位元素。
from selenium import webdriver
browser = webdriver.Chrome()
browser.maximize_window()
#打開百度首頁
browser.get('https://www.baidu.com/')
# 根據partial_link_text屬性定位元素“新聞”,然后點擊按鈕
try:
browser.find_element_by_partial_link_text('聞').click()
print('test post:tag_name')
except Exception as e:
print('test fail')
#輸出內容:test post:partial_link_text
7.利用xpath定位元素
from selenium import webdriver
browser = webdriver.Chrome()
browser.maximize_window()
#打開百度首頁
browser.get('https://www.baidu.com/')
# 根據xpath定位元素
try:
browser.find_element_by_xpath('//*[@id="kw"]').send_keys('哈哈')
print('test post:xpath')
except Exception as e:
print('test fail')
#輸出內容:test post:xpath
8.利用CSS定位頁面元素
from selenium import webdriver
browser = webdriver.Chrome()
browser.maximize_window()
#打開百度首頁
browser.get('https://www.baidu.com/')
# 根據css_selector定位元素
try:
browser.find_element_by_css_selector('#kw').send_keys('哈哈')
print('test post:xpath')
except Exception as e:
print('test fail')
#輸出內容:test post:css_selector
9.By定位
- 除了使用上面的方法外,還可以利用find_element()方法,通過By來定位元素。
- 使用之前需要導入By類:
#導入By類
from selenium.webdriver.common.by import By
- 那么上面的方法還可以改寫為:
browser.find_element(By.ID,'kw')
browser.find_element(By.NAME,'wd')
browser.find_element(By.CLASS_NAME,'s_ipt')
browser.find_element(By.TAG_NAME,'form')
browser.find_element(By.LINK_TEXT,'新聞')
browser.find_element(By.PARTIAL_LINK_TEXT,'聞')
browser.find_element(By.XPATH,'//*[@id="kw"]')
browser.find_element(By.CSS_SELECTOR,'#kw')