selenium安裝
python環境安裝
python編輯器pycharm安裝
cmd全局安裝selenium:pip install selenium
pycharm中項目在中在虛擬環境中:pip install selenium(需要在pycharm的Terminal中輸入)
下載瀏覽器驅動:在help》About Google Chrome可以查看瀏覽器版本,根據版本安裝前三位選擇驅動版本
python+selenium獲取瀏覽器元素
類別 | 查找方式 | 例子 |
基本方法 | 根據id | element = wd.find_element_by_id('kw') |
根據class | element2 = wd.find_elements_by_class_name('box') | |
根據標籤名 | element4 = wd.find_elements_by_tag_name('img') | |
css選擇器 | 根據class | element7 = wd.find_element_by_css_selector('.class_box') |
根據id | element8 = wd.find_element_by_css_selector('#class_box') | |
直接子元素> | element9 = wd.find_element_by_css_selector('.class_box2>.plant') | |
所有子元素用空格 | elementA = wd.find_element_by_css_selector('.class_box2 .plant') | |
根據屬性[ ] |
elementB = wd.find_element_by_css_selector('[src="1.jpg"]') [href="xxx"] div[class="box"] //class爲box的div |
|
或者, | elementC = wd.find_element_by_css_selector('.classbox,.classbox2') | |
兄弟節點+ |
緊跟着h3的span elementF = wd.find_elements_by_css_selector('h3 + span') |
|
第n個元素 |
//class名爲plant2且是他的父元素的第n個元素 elementC = wd.find_elements_by_css_selector('.plant2:nth-child(2)') //plant下的第1個元素 elementD = wd.find_elements_by_css_selector('.plant > :nth-child(1) ') |
|
倒數第n個 nth-last-child |
倒數第一個p標籤 elementE = wd.find_elements_by_css_selector('p:nth-last-child(1) ') |
|
父元素的第n個某種類型 nth-of-type(1) |
第一個p類型 elementE = wd.find_elements_by_css_selector('p :nth-of-type(1) ') |
|
奇數節點 :nth-child(odd) |
plant下的奇數節點 elementF = wd.find_elements_by_css_selector('.plant :nth-child(odd)') |
|
偶數節點 :nth-child(even) |
event下偶數節點 elementF = wd.find_elements_by_css_selector('.plant :nth-child(even)') #pbox p:nth-of-type(even) |
|
Xpath |
絕對路徑 /html/body/div |
elementJ = wd.find_element_by_xpath("html/body/div") |
不管路徑 |
所有div wd.find_element_by_xpath(//div) div下所有p(包括孫節點) wd.find_element_by_xpath(//div//p) |
|
直接子節點 |
div下子節點p wd.find_element_by_xpath(//div/p) |
|
所有子節點 | wd.find_element_by_xpath(//div*) | |
根據屬性 |
wd.find_element_by_xpath(//*[@id="west"]) wd.find_element_by_xpath(//div[@class="west"]) 包含用contains() wd.find_element_by_xpath(//*[contains(@href,"baidu")]) 以什麼開頭^ wd.find_element_by_xpath(//*[starts-with(@href,"https")]) 以什麼結尾$ wd.find_element_by_xpath(//*[ends-with(@href,"https")]) |
|
根據次序 |
p類型的第二個 wd.find_element_by_xpath(//p[2]) div中p類型的第二個 wd.find_element_by_xpath(//div/p[2]) 第二個元素* wd.find_element_by_xpath(//div/*[2]) 倒數第二個p類型 wd.find_element_by_xpath(//p[last()-1]) |
|
根據範圍 |
p類型的第1-2個 <div> <p></p> <p></p> </div> <div> <p></p> <p></p> </div> wd.find_element_by_xpath(//p[position()<=2]) p類型的倒數第1-2個
|
|
操作元素 | 內容 | 例子 |
獲取title | print(wd.title) | |
輸入 | element.send_keys('123') | |
點擊 | element5=wd.find_element_by_tag_name('button').click() | |
獲取屬性 | 獲取內容 |
print(element6.get_attribute('innerText')) print(element6.get_attribute('textContent')) print(element3.text) |
獲取class | print(element6.get_attribute('class')) | |
frame切換 | 切換到子iframe |
切換到id/name爲frame1的frame wd.switch_to_frame('frame1') |
切換回外層html | wd.switch_to.default_content() | |
窗口切換 |
切換到窗口 wd.switch_to.window(handle) |
for handle in wd.window_handles: wd.switch_to.window(handle) //跳到 if 'baidu' in wd.title break |
回到之前的窗口 |
在切換窗口之前保存窗口handle mainWindow = wd.current_window_handle 跳轉到制定handle的窗口 wd.switch_to.window(mainWindow) |
|
表單操作 | radio單選框 |
//獲取已經被選的值 print(wd.find_element_by_css_selector('#s_radio input[checked=checked]').get_attribute('value')) //獲取要選的項並點擊 elementG = wd.find_element_by_css_selector('#s_radio input[value="張三"]') |
checkbox複選框 |
獲取已經被選的項並點擊 elementH = wd.find_elements_by_css_selector('#s_checkbox input[checked=checked]') elementI = wd.find_element_by_css_selector('#s_checkbox input[value="蘋果"]') |
|
select下拉列表 |
//導入Select類 from selenium.webdriver.suppport.ui improit Select //創建select對象 select = Select(wd.find_element_by_id("ss_single")) //根據分類選擇 select.select_by_visible_text("廣州") select.select_by_index("2") select.select_by_value("beijing") //取消選擇 select.deselect_by_visible_text("廣州") select.deselect_by_index("2") select.deselect_by_value("beijing") //清除所有選項 select.deselect_all() |
|
鼠標操作 | ActionChains |
//鼠標移動 ac.move_to_element(wd.find_element_by_id("bjn")).perform() |
凍結界面 | debugger | 在console中輸入setTimeOut(function(){debugger},5000) |
alert彈出框 | 單選 |
wd.find_element_by_id('btn1').click() //打印彈出框文本 //點擊確定 |
多選 |
wd.find_element_by_id('btn2').click() //點擊確定 //點擊取消 |
|
多選+輸入框 |
wd.find_element_by_id('btn3').click() //輸入內容 //點擊確定 //點擊取消 |
//導入selenium和webdriver
from selenium import webdriver
//指定瀏覽器
wd = webdriver.Chrome()
//在未找到元素時,每半秒執行一次 只等待10秒
wd.implicitly_wait(10)
//設置瀏覽器訪問地址
wd.get('file:///D:/testing/1.html')
//根據id查找元素
element=wd.find_element_by_id('kw')
element.send_keys('123')
element2 = wd.find_elements_by_class_name('box')
for item in element2:
print(item.text)
element3 = wd.find_element_by_class_name('box')
print(element3.text)
element4 = wd.find_elements_by_tag_name('img')
element5 = wd.find_element_by_tag_name('button').click()
element6 = wd.find_element_by_id('apple')
print(element6.get_attribute('innerText'))
print(element6.get_attribute('textContent'))
element7 = wd.find_element_by_css_selector('.class_box')
print(element7.get_attribute('innerText'))
element8 = wd.find_element_by_css_selector('#class_box')
print(element8.text)
element9 = wd.find_element_by_css_selector('.class_box2>.plant')
print(element9.text)
elementA = wd.find_element_by_css_selector('.class_box2 .plant')
print(elementA.text)
elementB = wd.find_element_by_css_selector('[src="1.jpg"]')
print(elementB.get_attribute('class'))
elementC = wd.find_elements_by_css_selector('.plant2:nth-child(2)')
for ele in elementC:
print(ele.text)
elementD = wd.find_elements_by_css_selector('.plant > :nth-child(1) ')
for ele in elementD:
print(ele.text)
//點擊
elementF = wd.find_element_by_id('linkTo').click()
//保存window句柄
mainWindow = wd.current_window_handle
//遍歷所有窗口,逐個跳轉直到找到title裏包含‘百度’的窗口
for handle in wd.window_handles:
wd.switch_to.window(handle)
if '百度' in wd.title:
break
print(wd.title)
baiText = wd.find_element_by_id('kw')
baiText.send_keys('222')
//回到句柄爲mainWindow的窗口
wd.switch_to.window(mainWindow)
print(wd.find_element_by_css_selector('#s_radio input[checked=checked]').get_attribute('value'))
elementG = wd.find_element_by_css_selector('#s_radio input[value="張三"]')
elementG.click()
elementH = wd.find_elements_by_css_selector('#s_checkbox input[checked=checked]')
for item2 in elementH:
item2.click()
elementI = wd.find_element_by_css_selector('#s_checkbox input[value="蘋果"]')
elementI.click()
elementJ = wd.find_element_by_xpath("html/body/div")
pass
表單
from selenium import webdriver
//導入select類
from selenium.webdriver.support.select import Select
wd = webdriver.Chrome()
wd.implicitly_wait(10)
wd.get('file:///D:/testing/1.html')
//創建select對象實例
select = Select(wd.find_element_by_id("city"))
//按文本選擇
select.select_by_visible_text("廣州")
pass
鼠標操作
from selenium import webdriver
//導入ActionChains
from selenium.webdriver.common.action_chains import ActionChains
wd = webdriver.Chrome()
wd.implicitly_wait(10)
wd.get('file:///D:/testing/1.html')
//創建對象
ac = ActionChains(wd)
//移動鼠標操作
ac.move_to_element(wd.find_element_by_id("bjn")).perform()
彈出框
from selenium import webdriver
wd = webdriver.Chrome()
wd.implicitly_wait(5)
wd.get('file:///D:/testing/1.html')
wd.find_element_by_id('btn1').click()
print(wd.switch_to.alert.text)
wd.switch_to.alert.accept()
wd.find_element_by_id('btn2').click()
print(wd.switch_to.alert.text)
wd.switch_to.alert.dismiss()
wd.find_element_by_id('btn3').click()
alert1 = wd.switch_to.alert
print(wd.switch_to.alert.text)
alert1.send_keys("jenniferZ")
pass
報錯
1.
Traceback (most recent call last):
File "C:\Users\Rock\AppData\Local\Programs\Python\Python38-32\4.py", line 32, in <module>
print(element7.get_attribute('innerText'))
AttributeError: 'list' object has no attribute 'get_attribute'
列表沒有get_attribute屬性
解釋:find_elements_by_tag_name和find_elements_by_tag_name獲取的都是數組
2.