1. 程式人生 > 其它 >python實現WEB自動化(python+selenium )

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()


————————————————