Web自動化測試工具selenium

定位單個元素(滿足條件的第一個)

定位——id

from selenium import webdriver
from time import sleep

# driver = webdriver.Chrome()
driver = webdriver.Firefox()
print(driver)
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')
driver.find_element_by_id('userA').send_keys('admin')
driver.find_element_by_id('passwordA').send_keys('123456')
sleep(3)
driver.quit()


# webdriver.Chrome():
#     <selenium.webdriver.chrome.webdriver.WebDriver (session="62029fee957d5e7998b273910ef5fcd3")>
# webdriver.Firefox():
#     <selenium.webdriver.firefox.webdriver.WebDriver (session="dae518be-3521-4ebf-956f-4b1714fe97c2")>
#
# driver.find_element_by_id('userA')
# <selenium.webdriver.remote.webelement.WebElement (session="90e008cfcd9ddf88b1cc72b013d0a72f", element="0.4901998456841512-1")>



定位——class

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')
telA = driver.find_element_by_class_name('telA')
email = driver.find_element_by_class_name('emailA')   # class = 'emailA dzyxA'中,取其中任意一個即可
telA.send_keys('18682971383')
sleep(3)
email.send_keys('[email protected]')
sleep(3)
driver.quit()

定位——name

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()

driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')

# 定位到的是第一個
username = driver.find_element_by_name('userA')
password = driver.find_element_by_name('passwordA')

sleep(3)

username.send_keys('admin')
password.send_keys('123456')

sleep(3)

driver.quit()

定位——link_text

from selenium import webdriver
from time import sleep

# 需要傳入a標籤全部文本,全部匹配
driver = webdriver.Chrome()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')
sleep(3)
driver.find_element_by_link_text('訪問 新浪 網站').click()
sleep(100)
driver.quit()

定位——partial_link_text

from selenium import webdriver
from time import sleep

# partial_link_text爲模糊匹配,需要傳入a標籤局部文本-能表達唯一性;
# link_text全部匹配
driver = webdriver.Firefox()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')
sleep(3)
driver.find_element_by_partial_link_text('訪問').click()
sleep(100)
driver.quit()

定位——tag_name

from selenium import webdriver
from time import sleep

# 返回:符合條件的第一個標籤
driver = webdriver.Chrome()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')
driver.find_element_by_tag_name('input').send_keys('admin')
sleep(3)
driver.quit()

 

定位一組元素

from selenium import webdriver
from time import sleep

# find_elements_by_XXX() 查找定位所有符合條件的元素
# 返回的是一個列表
driver = webdriver.Chrome()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')
sleep(3)
inputs = driver.find_elements_by_tag_name('input')
print(inputs)
inputs[0].send_keys('admin')
sleep(3)
inputs[1].send_keys('123321')
sleep(3)
inputs[2].send_keys('18682971383')
sleep(3)
driver.quit()

'''
    driver.find_elements_by_tag_name('input'):
'''
# [<selenium.webdriver.remote.webelement.WebElement (session="4a431ea66ab629f8a9c24e4820f23d96",
# element="0.5309917768351022-1")>, <selenium.webdriver.remote.webelement.WebElement (
# session="4a431ea66ab629f8a9c24e4820f23d96", element="0.5309917768351022-2")>,
# <selenium.webdriver.remote.webelement.WebElement (session="4a431ea66ab629f8a9c24e4820f23d96",
# element="0.5309917768351022-3")>, <selenium.webdriver.remote.webelement.WebElement (
# session="4a431ea66ab629f8a9c24e4820f23d96", element="0.5309917768351022-4")>,
# <selenium.webdriver.remote.webelement.WebElement (session="4a431ea66ab629f8a9c24e4820f23d96",
# element="0.5309917768351022-5")>, <selenium.webdriver.remote.webelement.WebElement (
# session="4a431ea66ab629f8a9c24e4820f23d96", element="0.5309917768351022-6")>,
# <selenium.webdriver.remote.webelement.WebElement (session="4a431ea66ab629f8a9c24e4820f23d96",
# element="0.5309917768351022-7")>, <selenium.webdriver.remote.webelement.WebElement (
# session="4a431ea66ab629f8a9c24e4820f23d96", element="0.5309917768351022-8")>,
# <selenium.webdriver.remote.webelement.WebElement (session="4a431ea66ab629f8a9c24e4820f23d96",
# element="0.5309917768351022-9")>, <selenium.webdriver.remote.webelement.WebElement (
# session="4a431ea66ab629f8a9c24e4820f23d96", element="0.5309917768351022-10")>,
# <selenium.webdriver.remote.webelement.WebElement (session="4a431ea66ab629f8a9c24e4820f23d96",
# element="0.5309917768351022-11")>, <selenium.webdriver.remote.webelement.WebElement (
# session="4a431ea66ab629f8a9c24e4820f23d96", element="0.5309917768351022-12")>,
# <selenium.webdriver.remote.webelement.WebElement (session="4a431ea66ab629f8a9c24e4820f23d96",
# element="0.5309917768351022-13")>, <selenium.webdriver.remote.webelement.WebElement (
# session="4a431ea66ab629f8a9c24e4820f23d96", element="0.5309917768351022-14")>,
# <selenium.webdriver.remote.webelement.WebElement (session="4a431ea66ab629f8a9c24e4820f23d96",
# element="0.5309917768351022-15")>, <selenium.webdriver.remote.webelement.WebElement (
# session="4a431ea66ab629f8a9c24e4820f23d96", element="0.5309917768351022-16")>,
# <selenium.webdriver.remote.webelement.WebElement (session="4a431ea66ab629f8a9c24e4820f23d96",
# element="0.5309917768351022-17")>, <selenium.webdriver.remote.webelement.WebElement (
# session="4a431ea66ab629f8a9c24e4820f23d96", element="0.5309917768351022-18")>,
# <selenium.webdriver.remote.webelement.WebElement (session="4a431ea66ab629f8a9c24e4820f23d96",
# element="0.5309917768351022-19")>, <selenium.webdriver.remote.webelement.WebElement (
# session="4a431ea66ab629f8a9c24e4820f23d96", element="0.5309917768351022-20")>,
# <selenium.webdriver.remote.webelement.WebElement (session="4a431ea66ab629f8a9c24e4820f23d96",
# element="0.5309917768351022-21")>, <selenium.webdriver.remote.webelement.WebElement (
# session="4a431ea66ab629f8a9c24e4820f23d96", element="0.5309917768351022-22")>]

css定位

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')
# 1、id選擇器
driver.find_element_by_css_selector('#userA').send_keys('admin')
sleep(3)
# 2、class選擇器   ''' ★ find_element_by_css_selector和find_element_by_class_name方法一樣,和Xpath中不一樣,Xpath必須要全匹配纔行 '''
driver.find_element_by_css_selector('.telA').send_keys('18682971383')
sleep(3)
driver.find_element_by_css_selector('.emailA').send_keys('[email protected]')  # class = 'emailA dzyxA'中,取其中任意一個即可
sleep(3)
# 3、元素選擇器
driver.find_element_by_css_selector('input').send_keys('---hello')
sleep(3)
# 4、屬性選擇器
driver.find_element_by_css_selector('[type="password"]').send_keys('123321')
sleep(3)
# 5、層級選擇器  可各種選擇方式'混搭'
driver.find_element_by_css_selector('p [type="email"]').send_keys('[email protected]')
sleep(3)

driver.quit()

''' ❀
    標籤名[屬性名]^='字符串'     開頭
    標籤名[屬性名]$='字符串'     結尾
    標籤名[屬性名]*='字符串'     包含
'''
# 1. input[type^='p'] 說明:type屬性以p字母開頭的元素
# 2. input[type$='d'] 說明:type屬性以d字母結束的元素
# 3. input[type*='w'] 說明:type屬性包含w字母的元素

xpath定位

By.XPATH, "//*[@class='shop_name2']/*[contains(text(),'{}')]"

"""  通過特定文字信息定位目標元素,搜索範圍是打開的所有頁面  """
xpath = '//*[contains(text(),"text")]'

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')
# 1.1、絕對路徑
username = driver.find_element_by_xpath('/html/body/div/fieldset/form/p/input')
username.send_keys('admin')
sleep(3)
# 1.2、相對路徑
''' ★
    /代表:在當前'目錄'下找;
    //代表:在當前目錄下的任意'目錄'下找
'''
username = driver.find_element_by_xpath('//fieldset/form/p/input')
username.send_keys('---hello')
sleep(3)
# 2、利用元素的屬性信息
username = driver.find_element_by_xpath('//*[@id="userA"]')
username.send_keys('---你好')
sleep(3)
email = driver.find_element_by_xpath('//*[@class="emailA dzyxA"]')  # 屬性值完全匹配
email.send_keys('[email protected]')
sleep(3)
# 3、層級與屬性結合
username = driver.find_element_by_xpath('//*[@id="pa"]//input')
username.send_keys('---嗨')
# 4、屬性與邏輯結合  解決元素之間的相同屬性重名問題      與或非
tel = driver.find_element_by_xpath("//*[@id='telA' and @class='telA']")
tel.send_keys('18682971383')
sleep(3)

'''5、擴展'''

# //*[contains(@attribute,'Sxxx')]             屬性值中含有xxx的元素
tel = driver.find_element_by_xpath("//*[contains(@id,'serA')]")
tel.send_keys('。。。。。。。。。')
sleep(3)

# //*[starts-with(@attribute,'xxx')]           屬性值以xxx開頭的元素
tel = driver.find_element_by_xpath("//*[starts-with(@id,'us')]")
tel.send_keys('%%%%%%%%%%')
sleep(3)

#  //*[text()="xxx"]    文本內容是xxx的元素
driver.find_element_by_xpath('//*[text()="訪問 新浪 網站"]').click()
sleep(3)

driver.quit()

下拉列表

from time import sleep
from selenium import webdriver
from selenium.webdriver.support.select import Select

driver = webdriver.Chrome()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')

select = Select(driver.find_element_by_css_selector('#selectA'))
select.select_by_visible_text('A廣州')
sleep(3)
select.select_by_visible_text('A上海')


'''
Select類:
    1. select_by_index()                --> 根據option索引來定位,從0開始
    2. select_by_value()                --> 根據option屬性 value值來定位
    3. select_by_visible_text()            --> 根據option顯示文本來定位
'''







# from time import sleep
#
# from selenium import webdriver
#
# driver = webdriver.Chrome()
# driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')
#
# sz = driver.find_element_by_css_selector('[value = "sz"]')
# sh = driver.find_element_by_css_selector('[value = "sh"]')
# gz = driver.find_element_by_css_selector('[value = "gz"]')
#
# sz.click()
# sleep(3)
# sh.click()
# sleep(3)
# gz.click()

彈出框

from time import sleep
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')

# 點擊彈框
driver.find_element_by_css_selector('#alerta').click()
# 獲取彈出框
alert = driver.switch_to.alert

sleep(2)

# 點擊取消
print(alert.text)
alert.dismiss()


# HTML中常用的彈出框有三種:
#   1 alert 警告框
#   2 confirm 確認框
#   3 prompt 提示框

# 獲取彈出框:alert = driver.switch_to.alert

# 處理方法:
#     1. text                 --> 返回alert/confirm/prompt中的文字信息
#     2. accept()                --> 接受對話框選項
#     3. dismiss()            --> 取消對話框選項

滾動條

from time import sleep
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')

# 1、設置JavaScritp腳本控制滾動條
js = "window.scrollTo(0,1000)"
js1 = "window.scrollTo(0,0)"

# 2、WebDriver調用js腳本方法
driver.execute_script(js)
sleep(2)
driver.execute_script(js1)

瀏覽器操作

webdriver操作瀏覽器方式

from selenium import webdriver
from time import sleep
from urllib import parse

# 實例化瀏覽器
driver = webdriver.Chrome()
# 輸入url
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')
sleep(3)

driver.maximize_window()

# 定位元素
username = driver.find_element_by_css_selector('#userA')
pwd = driver.find_element_by_css_selector('#passwordA')
tel = driver.find_element_by_css_selector('#telA')
email = driver.find_element_by_css_selector('[type = "email"]')
button = driver.find_element_by_css_selector('p button')
# 輸入內容
username.send_keys('admin')
pwd.send_keys('123456')
tel.send_keys('18611111111')
email.send_keys('[email protected]')
sleep(3)

# 修改電話號碼
tel.clear()
tel.send_keys('18600000000')
sleep(3)

button.click()
sleep(3)

'''輸出中文的url'''
print(parse.unquote(driver.current_url))

driver.quit()


# 1. maximize_window() 最大化瀏覽器窗口 --> 模擬瀏覽器最大化按鈕
# 2. set_window_size(width, height) 設置瀏覽器窗口大小 --> 設置瀏覽器寬、高(像素點)
# 3. set_window_position(x, y) 設置瀏覽器窗口位置 --> 設置瀏覽器位置
# 4. back() 後退 --> 模擬瀏覽器後退按鈕
# 5. forward() 前進 --> 模擬瀏覽器前進按鈕
# 6. refresh() 刷新 --> 模擬瀏覽器F5刷新
# 7. close() 關閉當前窗口 --> 模擬點擊瀏覽器關閉按鈕
# 8. quit() 關閉瀏覽器驅動對象 --> 關閉所有程序啓動的窗口
# 9. title 獲取頁面title
# 10. current_url 獲取當前頁面URL

# title、current_url是屬性

webdriver獲取元素信息

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')
username = driver.find_element_by_id('userA')
link1 = driver.find_elements_by_tag_name('a')[0]
link2 = driver.find_elements_by_tag_name('a')[1]
span = driver.find_element_by_tag_name('span')
cancel = driver.find_element_by_id('cancelA')
ly = driver.find_element_by_id('lyA')

print(span.is_displayed())      # 是否顯示
print(cancel.is_enabled())      # 是否可用
print(ly.is_selected())         # 是否選中

print(username.size)    # 屬性大小

print(link2.text)       # 獲取元素文本

print(link1.get_attribute('href'))      # 獲取屬性值

sleep(3)
driver.quit()


# 1. size 返回元素大小
# 2. text 獲取元素的文本
# 3. get_attribute("xxx") 獲取屬性值,傳遞的參數爲元素的屬性名
# 4. is_displayed() 判斷元素是否可見
# 5. is_enabled() 判斷元素是否可用
# 6. is_selected() 判斷元素是否選中,用來檢查複選框或單選按鈕是否被選中
# 提示:
# 1. size、text:爲屬性,調用時無括號;如:xxx.size

 

frame表單切換

from time import sleep
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html')

driver.switch_to.frame('myframe1')
username = driver.find_element_by_css_selector('#userA')
username.send_keys('admin')

# ★ 在frame表單中操作其他頁面,必須先回到默認frame,才能進一步操作
driver.switch_to.default_content()  # 切換到默認frame
sleep(3)

driver.switch_to.frame('myframe2')
username = driver.find_element_by_css_selector('#userB')
username.send_keys('admin')


#  HTML語言中,frame/iframe標籤爲表單框架,主要作用是在當前頁面中指定區域顯示另一頁面元素
#
# 在WebDriver類庫中封裝了HTML頁面中使用frame表單框架技術定位的方法
#     1 driver.switch_to.frame("...")    切換表單方法
#             driver.switch_to.frame('frame_name')      frame元素name值
#             driver.switch_to.frame(1)                 frame元素id
#             driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0])     frame元素對象
#     2 driver.switch_to.default_content()         恢復默認頁面方法


多窗口切換

from selenium import webdriver

driver = webdriver.Firefox()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html')

driver.find_element_by_css_selector('#ZCB').click()

driver.switch_to.window(driver.window_handles[1])

driver.find_element_by_css_selector('#userB').send_keys('18682971383')




# 在WebDriver中封裝了獲取當前窗口句柄方法和獲取所有窗口句柄的方法以及切換指定句柄窗口的方法;
# 句柄:英文handle,窗口的唯一識別碼
#
# 方法:
#     1 driver.current_window_handle        獲取當前窗口句柄
#     2 driver.window_handles               獲取所有窗口句柄
#     3 driver.switch_to.window(handle)     切換指定句柄窗口




# 在WebDriver中封裝了獲取當前窗口句柄方法和獲取所有窗口句柄的方法以及切換指定句柄窗口的方法;
# 句柄:英文handle,窗口的唯一識別碼
#
# 方法:
#     1 driver.current_window_handle        獲取當前窗口句柄
#     2 driver.window_handles               獲取所有窗口句柄
#     3 driver.switch_to.window(handle)     切換指定句柄窗口

webdriver鍵盤操作

from selenium import webdriver
from time import sleep

from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')

username = driver.find_element_by_css_selector('#userA')
pwd = driver.find_element_by_css_selector('#passwordA')

username.send_keys('admin1')
sleep(2)

# 刪除1  backspace 刪除鍵
username.send_keys(Keys.BACK_SPACE)
sleep(2)
# 用戶名全選
username.send_keys(Keys.CONTROL, 'a')
sleep(2)
# 複製用戶名到剪貼板
username.send_keys(Keys.CONTROL, 'c')
sleep(2)
# 剪貼板內容粘貼到密碼
pwd.send_keys(Keys.CONTROL, 'v')
sleep(2)

driver.quit()



# 1. send_keys(Keys.BACK_SPACE)刪除鍵(BackSpace)
# 2. send_keys(Keys.SPACE)空格鍵(Space)
# 3. send_keys(Keys.TAB)製表鍵(Tab)
# 4. send_keys(Keys.ESCAPE)回退鍵(Esc)
# 5. send_keys(Keys.ENTER)回車鍵(Enter)
# 6. send_keys(Keys.CONTROL,'a') 全選(Ctrl+A)
# 7. send_keys(Keys.CONTROL,'c')複製(Ctrl+C)

webdriver鼠標操作

from selenium import webdriver
from time import sleep
from selenium.webdriver import ActionChains


def right_mouse_click(driver_args, action_args):
    driver_args.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')
    username = driver_args.find_element_by_css_selector('#userA')
    action_args.context_click(username)
    action_args.perform()
    sleep(3)


def double_mouse_click(driver_args, action_args):
    driver_args.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')
    username = driver_args.find_element_by_css_selector('#userA')
    username.send_keys('admin')
    action_args.double_click(username)
    action_args.perform()
    sleep(3)


def hover(driver_args, action_args):
    driver_args.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')
    register = driver_args.find_element_by_css_selector('button')
    action_args.move_to_element(register).perform()
    sleep(3)


def drag(driver_args, action_args):
    driver_args.get('file:///D:/phpStudy/WWW/auto/drag.html')
    source = driver_args.find_element_by_css_selector('#div1')
    target = driver_args.find_element_by_css_selector('#div2')
    action_args.drag_and_drop(source, target)
    action_args.perform()
    sleep(3)


if __name__ == '__main__':
    # 實例化瀏覽器
    driver = webdriver.Chrome()
    # 實例化一個鼠標行爲對象
    action = ActionChains(driver)

    right_mouse_click(driver, action)       # 1、右擊
    sleep(3)
    double_mouse_click(driver, action)      # 2、雙擊
    sleep(3)
    hover(driver, action)       # 3、懸停
    sleep(3)
    drag(driver, action)  # 4、拖動
    sleep(3)
    driver.quit()

'''

在WebDriver中將操作鼠標的方法封裝在ActionChains類中

    1. context_click()            右擊 --> 此方法模擬鼠標右鍵點擊效果
    2. double_click()            雙擊 --> 此方法模擬雙標雙擊效果
    3. drag_and_drop()            拖動 --> 此方法模擬雙標拖動效果
    4. move_to_element()        懸停 --> 此方法模擬鼠標懸停效果
    5. perform()                執行 --> 此方法用來執行以上所有鼠標方法
    
這些方法的返回值都是self,調用者

'''

設置元素等待

元素等待:WebDriver定位頁面元素時如果未找到,會在指定時間內一直等待的過程;

爲什麼會有元素等待?
    1. 由於網絡速度原因
    2. 電腦配置原因
    3. 服務器處理請求原因

元素等待類型:
    1. 顯式等待
    2. 隱式等待

顯式與隱式區別:
    1. 作用域:顯式等待爲單個元素有效,隱式爲全局元素
    2. 方法:顯式等待方法封裝在WebDriverWait類中,而隱式等待則直接通過瀏覽器實例化對象調用

顯示等待

from selenium import webdriver
from time import sleep
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Chrome()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')
driver.implicitly_wait(5)

username = WebDriverWait(driver, 20, 1).until(lambda x: x.find_element_by_css_selector('#userA'))
pwd = driver.find_element_by_css_selector('#passwordA')

username.send_keys('admin')
sleep(2)
pwd.send_keys('123321')


# 顯示等待:使WebDriver等待指定元素條件成立時,繼續執行,否則在達到最大時長時拋出超時異常(TimeoutException)
#
# WebDriverWait(driver, timeout, poll_frequency=0.5)
#     1). driver:瀏覽器對象
#     2). timeout:超時的時長,單位:秒
#     3). poll_frequency:檢測間隔時間,默認爲0.5秒

隱式等待

from selenium import webdriver
from time import sleep

# 實例化瀏覽器 輸入網址
driver = webdriver.Chrome()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')

driver.implicitly_wait(10)

username = driver.find_element_by_css_selector('#userA')
username.send_keys('admin')

sleep(3)
driver.quit()


'''
    隱式等待 :
        1 自動化腳本只需設置一次,便可作用於全局元素
        2 邏輯:定位到元素立即執行後續腳本;定位不到,等待最大時長內循環去定位,定位到執行後續腳本,仍沒定位到,拋出異常NoSuchElementException
'''

窗口截圖

import time
from time import sleep

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html')

sleep(3)

driver.get_screenshot_as_file('C:/Users/32022/Desktop/%s.png' % time.strftime('%Y%m%d_%H%M%S'))

驗證碼處理

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.implicitly_wait(10)

# 百度免登錄: 鍵 BDUSS    在項目中,找開發問,然後將它們添加到cookie中即可實現免登錄
driver.add_cookie({'name': 'BDUSS', 'value': 'jdwWmhiVDlkOGYzfjJQLXRwSXlIOUVEYVU3RmMwSzZ0bzRQVnoybHlxemdjeUZlSUFBQUFBJCQAAAAAAAAAAAEAAACdn5WGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODm-V3g5vldY'})
driver.refresh()







# cookie:   https://www.jianshu.com/p/9a561b36e9f3
#     1. Cookie是一小段的文本信息;格式:python中的字典(鍵值對組成)
#     2. Cookie產生:客戶端請求服務器,如果服務器需要記錄該用戶狀態,就向客戶端瀏覽器頒發一個Cookie格式
#     3. Cookie使用:當瀏覽器再請求該網站時,瀏覽器把請求的網址連同該Cookie一同提交給服務器,服務器檢查該Cookie,以此來辨認用戶狀態。
#
# WebDriver中對cookie操作提供相應的方法:
#     1. get_cookie(name) :name:爲鍵名      獲取指定cookie
#     2. get_cookies()                              獲取本網站所有本地cookies
#     3. add_cookie(str) :str:爲python中的字典格式       添加cookie
#
# WebDriver類庫中沒有對驗證碼處理的方法,驗證碼處理方式:
#     1 去掉驗證碼        測試環境下-採用
#     2 設置萬能驗證碼    生產環境-採用
#     3 驗證碼識別技術    通過Python-tesseract來識別圖片類型驗證碼;識別率很難達到100%
#     4 記錄cookie       通過記錄cookie進行登錄-推薦

# cookie是什麼?
#     1. Cookie是由Web服務器生成的,並且保存在用戶瀏覽器上的小文本文件,它可以包含用戶相關的信息。
#     2. Cookie數據格式:鍵值對組成(python中的字典)
#     3. Cookie產生:客戶端請求服務器,如果服務器需要記錄該用戶狀態,就向客戶端瀏覽器頒發一個Cookie
#     數據
#     4. Cookie使用:當瀏覽器再次請求該網站時,瀏覽器把請求的數據和Cookie數據一同提交給服務器,服務
#     器檢
#         查該Cookie,以此來辨認用戶狀態。
# 
# cookie的應用場景
#     1. 實現會話跟蹤,記錄用戶登錄狀態
#     2. 實現記住密碼和自動登錄的功能
#     3. 用戶未登錄的狀態下,記錄購物車中的商品

By

from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get('http://127.0.0.1/auto/%E6%B3%A8%E5%86%8CA.html')

driver.find_element(By.ID, "userA").send_keys("admin")
sleep(3)
driver.find_element(By.NAME, "passwordA").send_keys("123456")
sleep(3)
driver.find_element(By.CLASS_NAME, "telA").send_keys("18611111111")
sleep(3)
driver.find_element(By.TAG_NAME, 'input').send_keys("123")
sleep(3)
driver.find_element(By.LINK_TEXT, '訪問 新浪 網站').click()
sleep(3)
driver.find_element(By.PARTIAL_LINK_TEXT, '訪問').click()
sleep(3)
driver.find_element(By.XPATH, '//*[@class="emailA dzyxA"]').send_keys('[email protected]')
sleep(3)
driver.find_element(By.CSS_SELECTOR, '.emailA').send_keys("[email protected]")
sleep(3)

driver.quit()


# find_element_by_XXX 底層是調用的By類方法進行的封裝的
# 雖然方法一樣,但WebDriver推薦 find_element_by_xxx()這種方法

def find_element_by_id(self, id_):
    """Finds an element by id.

    :Args:
     - id\_ - The id of the element to be found.

    :Usage:
        driver.find_element_by_id('foo')
    """
    return self.find_element(by=By.ID, value=id_)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章