一、導入selenium自定義的webdriver、後續可經過調用此協議啓動各大瀏覽器
from selenium import webdriver #瀏覽器
from selenium.webdriver.support.select import Select #下拉框
webdriver原理理解:客戶端腳本(java、python、ruby)不能直接與瀏覽器進行溝通、webdriver在二者之間看成一個翻譯官、它能夠把客戶端的代碼翻譯成瀏覽器能夠識別的代碼好比js傳給瀏覽器、瀏覽器在把執行的結果返回給webdriver、webdriver把返回的結果作一些封裝、通常都是json格式、而後返回給client(客戶端)主要是橋樑做用
二、定義要訪問的瀏覽器、以及訪問的地址
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
三、瀏覽器關閉、前進、後退、刷新
driver.close()#關閉當前焦點所在的頁面
driver.quit()#徹底退出並關閉瀏覽器
driver.forward()#前進
driver.back()#後退
driver.refresh()#刷新頁面後當前頁面的數據所有被清空
四、窗口最大化
driver.maximiza_window()
print(driver.get_window_size())#獲取當前窗口的大小
五、獲取瀏覽器屬性的方法
print(driver.title) # 獲取當前的值
print(driver.current_url) # 獲取當前的瀏覽器地址
print(driver.page_source) # 獲取頁面的源碼信息
print(driver.capabilities) # 獲取字典類型
六、獲取當前窗口的句柄
print(driver.window_handles) #獲取當前全部的窗口、返回字符串
driver.switch_to.window(driver.window_handles[-1]) #切換窗口到最後一個頁面
driver.switch_to.window(driver.window_handles[0]) #返回到原窗口
七、文本連接🔗
driver.find_element_by_partial_link_text('新聞').click()
drive.back()
driver.find_element_by_link_text('地圖').click()
八、獲取頁面元素的基本信息======
九、判斷頁面元素是否可見
is_displayed1 = (driver.find_element_by_partial_link_text('地圖').is_displayed())
print("返回布爾值:", is_displayed1)
十、判斷頁面元素是否可操做
is_displayed1 = (driver.find_element_by_partial_link_text('地圖').is_enabled())
print("返回布爾值:", is_displayed1)
十一、獲取頁面元素屬性的內容
print(driver.find_element_by_partial_link_text('地圖').get_attribute("name"))
十二、獲取頁面元素的標籤內容print(driver.find_element_by_partial_link_text('地圖').get_property("textContent"))
get_property('innerHTML')# 獲取元素內的所有HTML
get_property('outerHTML')# 獲取包含選中元素的HTML
1三、模擬鼠標鍵盤的複雜操做行爲
1)導入支持雙擊操做的模塊
from selenium.webdriver.common.action_chains import ActionChains
2)建立實例
ac=ActionChains(driver)
1.1鼠標雙擊操做 (好比某一個按鈕須要連續點擊兩次纔可顯示內容)
button = driver.find_element_by_class_name('double')
ac.double_click(button).perform()#雙擊後 點擊執行
1.2鼠標移動到頁面元素
button = driver.find_elements_by_class_name('over')
ac.move_to_element('button').perform()#移動 點擊執行
1.3綜合操做
button1 = driver.find_element_by_class_name('double')
button2 = driver.find_element_by_class_name('over')
ac.double_click(button1)#雙擊
ac.perform()#執行
ac.move_to_element(button2)#移動
ac.perform()#執行
1.4鼠標滑動、三種方式
方式一:點擊且按住
slider = driver.find_element_by_xpath('//div[@id="slider"]/span[1]')
# 按住滑動的按鈕
ac.click_and_hold(slider)
# 向右移動到confirm元素
confirm = driver.find_element_by_id('slider_confirm')
ac.move_to_element(confirm)
# 鼠標放開
c.release()
# 執行
ac.perform()
方式二:拖拽而且放開
slider = driver.find_element_by_xpath('//div[@id="slider"]/span[1]')
confirm = driver.find_element_by_id('slider_confirm')
ac.drag_and_drop(slider, confirm).perform()#開始目標、結束目標、執行
方式三:座標拖拽x 和 y
slider = driver.find_element_by_xpath('//div[@id="slider"]/span[1]')
ac.drag_and_drop_by_offset(slider,1000,0).perform()
1.5模擬鍵盤按鍵、如Tab、Enter 導入鍵盤操做
from selenium.webdriver.common.keys import Keys
driver.find_element_by_id('user').click()
ac.send_keys('我來了')
ac.send_keys(Keys.TAB)
ac.send_keys('我在這兒')
ac.send_keys(Keys.ENTER)
ac.send_keys('在這兒')
ac.perform()
1.6跳轉到js彈窗
driver.find_element_by_class_name('alert').click()
driver.switch_to.alert.accept() #肯定 switch_to切換
driver.switch_to.alert.dismiss() #取消
driver.switch_to.alert.send_keys('我在這裏') #輸入可見的內容
1.7跳轉 frame 嵌套的網頁 進入的時候須要一層一層、出來時可直接跳轉到最外層
driver.switch_to.frame('aa') # 嵌套的ID
driver.find_element_by_id('kw').send_keys('慧測')
driver.find_element_by_id('su').click()
driver.switch_to.frame(0) # 嵌套的index
driver.find_element_by_id('kw').send_keys('慧測')
driver.find_element_by_id('su').click()
# 參數用element
fr = driver.find_element_by_id('aa')
driver.switch_to.frame(fr)
driver.switch_to.default_content() #跳轉最外層
1.8植入Cookie ---免登錄
driver.get('http://www.huicewang.com/ecshop')
driver.add_cookie({'name': '', 'value': ''})
driver.add_cookie({'name': '', 'value': ''})
driver.add_cookie({'name': '', 'value': ''})
driver.refresh()
1.9隱式等待時間
driver.implicitly_wait(10)
2.0植入js javascript
移除input的只讀屬性readonly
driver.get('file:///Users/chenhy/Documents/demo.html') #本地
driver.execute_script('document.getElementById("text").readOnly=false') true爲只讀
driver.find_element_by_id('text').send_keys('再向上')#修改信息
2.1滾屏
driver.execute_script('window.scrollTo(0,100)')
# 一、 精品推薦 標籤 依次進行點擊 取其中顯示的全部價格 打印出來
driver.get('http://www.......')
labels = driver.find_elements_by_xpath('//div[@id="itemBest"]/h2/a')
for e in labels:
e.click()
time.sleep(1)
prices = driver.find_elements_by_xpath('//div[@id="show_best_area"]//font')
for price in prices:
print(int(price.text[1:-1]))
# 2 登陸、下訂單
driver.get('http://www....')
driver.find_element_by_name('username').send_keys('222')
driver.find_element_by_name('password').send_keys('222')
driver.find_element_by_name('submit').click()
driver.get('http://www.huicewang.com/ecshop')
images = driver.find_elements_by_xpath('//div[@id="show_best_area"]/div[@class="goodsItem"]//img')
images[1].click()
driver.find_element_by_xpath('//li[@class="padd"]/a[1]').click()
driver.find_element_by_xpath('//form[@id="formCart"]/../table/tbody/tr/td[2]/a').click()
driver.find_element_by_xpath('//div[@id="ECS_ORDERTOTAL"]/../div[2]/input[1]').click()
print(driver.find_element_by_xpath('//*[@class="flowBox"]//font').text)