python實現WEB自動化(python+selenium )
一、瀏覽器驅動
selenium操作不同的瀏覽器,需要下載不同瀏覽器的驅動
以chrome瀏覽器為例:
1、進入到下載頁面,找到符合自己瀏覽器版本的驅動
2、下載好了之後,右鍵解壓到當前資料夾
3、將得到的chromedriver.exe放到Python的安裝目錄
Firefox 瀏覽器驅動: 瀏覽器驅動
Chrome 瀏覽器驅動:備用地址
IE 瀏覽器驅動:IEDriverServer
Edge 瀏覽器驅動:MicrosoftWebDriver
from selenium import webdriver
driver = webdriver.Chrome() # Chrome 瀏覽器
#driver = webdriver.Firefox() # Firefox 瀏覽器
#driver = webdriver.Ie() # Internet Explorer 瀏覽器
#driver = webdriver.Edge() # Edge 瀏覽器
#通過get()方法開啟網頁
d.get('http://*')
二、定位方式
id ---> find_element_by_id()
name ---> find_element_by_name()
class ---> find_element_by_class_name()
tag_name ---> find_element_by_tag_name()
文字連結 ---> find_element_by_link_text()
部分文字連結 ---> find_element_by_partial_link_text()xpath
xpath ---> find_element_by_xpath()
css_selector ---> find_element_by_css_selector()
send_keys()輸入
clear()清空輸入內容
click()單擊操作
# 使用selenium 之前,需要先匯入
from selenium import webdriver
from time import sleep
# 初始化一個chrome瀏覽器
d = webdriver.Chrome()
# 通過get方法開啟網址
d.get("http://*")
sleep(2)
# 通過id定位 user_login
# 通過 send_keys('XXX')輸入內容
d.find_element_by_id('user_login').send_keys('隨便輸入')
sleep(2)
# 通過name定位 log
# 通過 clear()方法 清除輸入的內容
d.find_element_by_name('log').clear()
sleep(2)
# 通過class_name定位 input
d.find_element_by_class_name('input').send_keys('ad')
sleep(2)
# 通過tag_name定位 input
d.find_element_by_tag_name('input').send_keys('min')
d.find_element_by_css_selector('#wp-submit').click()
close()關閉當前視窗
quit()關閉所有瀏覽器並退出驅動
text 獲取元素文字屬性
from selenium import webdriver
from time import sleep
d = webdriver.Chrome()
d.get('http://*')
#通過xpath定位到使用者名稱
d.find_element_by_xpath('//label[@for="user_login"]/input').send_keys('admin')
sleep(1)
#通過css定位到使用者名稱
d.find_element_by_css_selector('#user_pass.input').send_keys('admin123')
sleep(1)
d.find_element_by_css_selector('#wp-submit').click()
sleep(1)
# text 獲取元素的文字資訊
login_msg = d.find_element_by_css_selector('.display-name').text
print(login_msg)
d.close()#關閉瀏覽器
d.quit()#關閉瀏覽器並且關閉驅動
最大化視窗maximize_window()
隱式等待implicitly_wait(10)
判斷元素是否可見is_displayed()
from selenium import webdriver
from time import sleep
d = webdriver.Chrome()
# 最大化視窗
d.maximize_window()
# 隱式等待,設定最大的等待時長,只對查詢元素(find_elementXXX)生效
d.implicitly_wait(10)
d.get('http://*')
d.find_element_by_css_selector('#user_login').send_keys('admin')
# 判斷元素是否可見 is_displayed()
password_result = d.find_element_by_css_selector('#user_pass').is_displayed()
print('可見的元素:'+str(password_result))
other_result =
d.find_element_by_css_selector('[name="redirect_to"]').is_displayed()
print('不可見的元素:'+str(other_result))
# 在html中 type="hidden" 屬性 是不可見的
submit() 用於提交表單
點選登入按鈕,一般情況下,使用click()進行點選
有些時候也可以使用submit()代替click(),相當於敲回車
#d.find_element_by_css_selector('#wp-submit').click()
d.find_element_by_css_selector('#wp-submit').submit()
sleep(1)
get_attribute(“屬性”) 獲得屬性值
獲取屬性的值,根據屬性名稱獲取對應的值
# get_attribute('屬性名稱')
att = d.find_element_by_css_selector('#user_login').get_attribute('size')
print(att)
滑鼠懸停
需要匯入:
from selenium.webdriver import ActionChains
mte = d.find_element_by_css_selector('#menu-posts .wp-menu-name')# 需要懸停的元素
#ActionChains(瀏覽器).move_to_element(懸停的元素).perform()
# perform()執行操作
ActionChains(d).move_to_element(mte).perform()
表單切換
switch_to.frame(需要切換到的表單)
switch_to.default_content()切換到最外層表單
#切換表單 switch_to.frame()
# 先定位到需要切換的表單
#方法一
iframe = d.find_elements_by_tag_name("iframe")[0]
d.switch_to.frame(iframe)
#方法二
d.switch_to.frame(0)
#方法三
frames = d.find_element_by_css_selector('#content_ifr')
d.switch_to.frame(frames)
d.find_element_by_css_selector('#tinymce').send_keys('這是正文')
sleep(3)
# 切換到最外層表單
d.switch_to.default_content()
d.find_element_by_css_selector('#publish').click()
像表單的切換/滑鼠的懸停 為提高成功率,最好是在操作後sleep(1)秒
切換視窗 switch_to.window(需要切換到的視窗)
獲取所有視窗,以列表的形式返回過來 d.window_handles
from selenium import webdriver
from time import sleep
d = webdriver.Chrome()
# 最大化視窗
d.maximize_window()
# 隱式等待,設定最大的等待時長,只對查詢元素(find_elementXXX)生效
d.implicitly_wait(10)
d.get('https://*')
d.find_element_by_css_selector('#q').send_keys("appium環境搭建")
d.find_element_by_css_selector('.ic-search').click()
sleep(3)
# 獲取所有視窗,以列表的形式返回過來
all_windows = d.window_handles
print(all_windows)
#切換視窗,根據所有視窗的下標來切換
d.switch_to.window(all_windows[1])
sleep(3)
d.find_element_by_css_selector('#q').clear()
關於select標籤的下拉框如何進行選擇
首先需要先匯入一個包(注意Select的S需要大寫)
from selenium.webdriver.support.ui import Select
# 使用Select方法進行選擇
# 先匯入Select 類from selenium.webdriver.support.ui import Select
# 需要先定位到下拉框
elements = d.find_element_by_css_selector('#role')
#Select(需要操作下拉框).根據什麼操作
Select(elements).select_by_index(2)# 根據index,下標定位,從0開始
sleep(3)
Select(elements).select_by_value('administrator')#根據value定位
sleep(3)
Select(elements).select_by_visible_text('投稿者')#根據文字定位
警告框的處理
switch_to.alert
from selenium import webdriver
from time import sleep
from selenium.webdriver import ActionChains
d = webdriver.Chrome()
# 最大化視窗
d.maximize_window()
# 隱式等待,設定最大的等待時長,只對查詢元素(find_elementXXX)生效
d.implicitly_wait(10)
d.get('https:/*')
mte = d.find_element_by_link_text('設定')
ActionChains(d).move_to_element(mte).perform()
sleep(1)
d.find_element_by_css_selector('.setpref').click()
sleep(1)
d.find_element_by_css_selector('.prefpanelgo').click()
# 獲取警告框的文字資訊
alert_msg = d.switch_to.alert.text
print(alert_msg)
# 接受警告框 accept()
d.switch_to.alert.accept()
# 取消警告框 dismiss()
d.switch_to.alert.dismiss()
js程式碼
from selenium import webdriver
from time import sleep
d = webdriver.Chrome()
d.get('http://*')
#window.scrollTo(A,B);# 控制瀏覽器的滾動條
#window.scrollTo(A,B);# 控制瀏覽器的滾動條 A 表示與左邊框的距離 B表示與上邊框的距離
# js_code1 = "window.scrollTo(0,600);"
# js_code2 = "window.scrollTo(0,1200);"
#document.querySelector('css的定位').removeAttribute('移除的屬性名');
js_code1 =
'''document.querySelector('[name="testcookie"]').removeAttribute('type');'''
d.execute_script(js_code1)
sleep(5)
定位一組元素find_elements_by_XXX
以列表的形式返回
# 定位一組元素
goodlist = d.find_elements_by_css_selector('.goods_title')
choice(goodlist).click()
————————————————