<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Selenium:設置元素等待、上傳文件、下載文件

      前言:在工作和學習selenium自動化過程中記錄學習知識點,深化知識點

      1. 設置元素等待

      元素定位之元素等待--

      WebDriver提供了兩種類型的等待:顯示等待和隱式等待。

      1.1 顯示等待

      顯式等待使WebDriver等待某個條件處理時繼續執行,否則在達到最大時長時拋棄超時異常(TimeoutException)。

      from selenium import webdriver
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.support import expected_conditions as EC
      
      wd = webdriver.Chrome()
      
      wd.get('https://www.baidu.com/')
      a = WebDriverWait(wd,10).until(EC.presence_of_element_located((By.ID,"kw")))
      a.send_keys('selenium')

      WebDriverWait類是由WebDriver提供的等待方法。在設置時間內,默認每隔一段時間檢測一次當前頁面元素是否存在,如果超過設置時間檢測不到則拋出異常。

      WebDriverWait(driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None)

      driver:瀏覽器驅動

      timeout:最長超時時間,默認以秒為單位

      poll_frequency:檢測的間隔(步長)時間,默認為0.5S

      ignored_exceptions:超時后的異常信息,默認情況下拋NoSuchElementException異常

      WebDriverWait()一般和until()或until_not()方法配合使用。

      until(method, message='')

      調用該方法提供的驅動程序作為一個參數,直到返回值為True。

      until_not(method, message='')

      調用該方法提供的驅動程序作為一個參數,直到返回值為False。

      在上面那個例子中,通過as關鍵字將expected_conditions重命名為EC,并調用presence_of_element_located()方法判斷元素是否存在。

      expected_conditions類提供的預期條件判斷的方法如下所示:

      title_is:判斷當前頁面的標題是否等于預期

      title_contains:判斷當前頁面的標題是否包含預期字符串

      presence_of_element_located:判斷元素是否被加在DOM樹里,并不代表元素一定可見

      visibility_of_element_located:判斷元素是否可見(可見代表元素非隱藏,并且元素的寬和高都不等于0)

      visibility_of:與上一個方法作用相同,只是上一個方法參數為,該方法接收的參數為定位后的元素

      presence_of_all_elements_located:判斷是否至少有一個元素存在于DOM樹中。例如,在頁面中有n個元素的class為“wp”,那么只要有一個存在就返回True

      text_to_be_present_in_element:判斷某個元素中的text是否包含了預期的字符串

      text_to_be_present_in_element_value:判斷某個元素的value屬性是否包含了預期的字符串

      frame_to_be_available_and_switch_to_it:判斷該表單是否可用切換進去,如果可用,返回True并且switch進去,否則返回False

      invisibility_of_element_located:判斷某個元素是否不存在于DOM樹或不可見

      element_to_be_clickable:判斷元素是否可見并且是可以點擊的

      staleness_of:等到一個元素從DOM樹中移除

      element_to_be_selected:判斷某個元素是否被選中,一般用在下拉列表

      element_selection_state_to_be:判斷某個元素的選擇狀態是否符合預期

      element_located_selection_state_to_be:與上一個方法作用相同,只是上一個方法參數為單位后的元素,該方法接收的參數為定位

      alert_is_present:判斷頁面上是否存在alert

       

      除expected_conditions所提供的豐富的預期條件判斷方法外,還可以使用is_displayed()方法來判斷元素是否可見。 

      from selenium import webdriver
      from time import  sleep,ctime
      
      wd = webdriver.Chrome()
      
      wd.get('https://www.baidu.com/')
      
      print(ctime())
      for i in range(10):
          try:
              el = wd.find_element_by_id("kw22")
              if el.is_displayed():
                  break
          except:pass
          sleep(1)
      else:
          print("time out")
      wd.close()
      print(ctime())

      相對來說,這種方式更容易理解,通過for循環10次,每次循環判斷元素的is_displayed()狀態是否為True。如果為True,則break跳出循環;否則sleep(1)后繼續循環判斷,直到10次循環結束后,打印“time out”信息。

      執行結果如下:

       

      1.2 隱式等待

      隱式等待是通過一定的時長等待頁面上某元素加載完成。如果超出了設置的時長元素還沒有被加載,則拋出NoSuchElementException異常。WebDriver提功力implicitly_wait()方法來實現隱式等待,默認設置為0。它的用法相對來說要簡單得多。 

      from selenium import webdriver
      from selenium.common.exceptions import  NoSuchElementException
      from time import ctime
      
      wd = webdriver.Chrome()
      
      #設置隱式等待為10秒
      wd.implicitly_wait(10)
      wd.get('https://www.baidu.com/')
      
      try:
          print(ctime())
          wd.find_element_by_id("kw22").send_keys('selenium')
      except NoSuchElementException as e:
          print(e)
      finally:
          print(ctime())

      Implicitly_wait()默認參數的單位為秒,本例中設置等待時長為10秒。首先這10秒并非一個固定的等待時間。它并不影響腳本的執行速度。其次,它并不針對頁面上的某一個元素進行等待。當腳本執行到某個元素定位時,如果元素可以定位,則繼續執行;如果元素定位不到,則它將以循環查詢的方式不斷地判斷元素是否被定位到。假設在第3秒定位到了元素,則繼續執行,若知道超出設置時長(10秒)還沒有定位到元素,則拋出異常。

      在上面的例子中,顯然百度輸入框的定位id=kw22是有誤的,通過打印的兩次時間可以看出,當執行對百度輸入框的操作時,超過了10秒的等

       

      1.3 sleep休眠方法

      在前面我們就使用過sleep方法了,只不過沒有詳細的介紹,現在就把這個歸入到這個大標題中來介紹下。

      有時候我們希望腳本在執行到某一個位置時做固定時間的休眠,尤其是在腳本調試中。這時可以使用sleep()方法,需要說明的是,sleep()方法由python的time模塊提供。 

      from selenium import webdriver
      from time import sleep
      
      wd = webdriver.Chrome()
      
      wd.get('https://www.baidu.com/')
      
      sleep(2)
      wd.find_element_by_id("kw").send_keys("selenium")
      wd.find_element_by_id("su").click()
      sleep(5)
      
      wd.quit()

      當執行到sleep()方法時會固定休眠一定的時長,然后再繼續執行。sleep()方法默認參數以秒為單位,如果設置時長小于1秒,則可以用小數表示,如果sleep(0.5)表示休眠0.5秒。

      2. 上傳文件

      上傳文件是比較常見的Web功能之一,但WebDriver并沒有提供專門用于上傳的方法,如何實現上傳操作關鍵在于上傳文件的思路。

      一般Web頁面的上傳功能的操作需要點擊“上傳”按鈕后打開本地的Window窗口,從窗口中選擇本地文件進行上傳。而WebDriver是無法操作Windows控件的,所以,對于初學者來說,一般思路會卡在如何識別Window控件這個問題上。

      對于Web頁面的上傳功能實現一般有一下兩種方式。

      普通上傳:普通的附件上傳是將本地文件的路徑作為一個值放在input標簽中,通過form表單將這個值提交給服務器。

      插件上傳:一般是指基于Flash、JavaScript或Ajax等技術所實現的上傳功能。

      插件上傳不適合放在自動化里面講解,可能會放在python高級編程里面講解。對于通過input標簽實現的上傳功能,可以將其看作是一個輸入框,通過send_keys()指定本地文件路徑的方式實現文件上傳。

      html代碼:

      <!DOCTYPE html>
      <html lang="en">
          <head>
              <meta charset="UTF-8">
              <title></title>
          </head>
          <body>
              <div class="row-fluid">
                  file:<input type="file" name="file" />
              </div>
          </body>
      </html>

      通過瀏覽器打開,效果如下圖所示:

       

      from selenium import webdriver
      
      wd = webdriver.Chrome()
      
      wd.get('http://127.0.0.1:8020/day01/index.html')
      
      #定位上傳按鈕,添加本地文件
      wd.find_element_by_name("file").send_keys('E:\1.png')

      通過這種方法上傳,就避免了操作Windows控件的步驟。如果能找到上傳的input標簽,那么基本上就可以通過send_keys()方法向其輸入一個文件地址來實現上傳。

      3. 下載文件 

      WebDriver允許我們設置默認的文件下載路徑,也就是說,文件會自動下載并且存放到設置的目錄中。下面以谷歌瀏覽器為例,執行文件的下載。

      from selenium import webdriver
      import os
      
      options = webdriver.ChromeOptions()
      
      prefs = {'profile.default_content_settings.popups':0,'download.default_directory':'E:\'}
      options.add_experimental_option('prefs',prefs)
      
      wd = webdriver.Chrome(executable_path=r'E:webdriverschromedriver.exe',chrome_options=options)
      
      wd.get('')#輸入要下載的文件所在網頁
      wd.find_element_by_xpath('').click()#點擊文件所在位置的元素

      download.default_directory:指定路徑
      profile.default_content_settings.popups:0 為屏蔽彈窗,1 為開啟彈窗

      不同的瀏覽器設置方法也不同,以上例子值針對谷歌瀏覽器。火狐瀏覽器的下載設置就是其他類型的方法了。

       

      posted @ 2022-09-13 17:14  一顆卷心菜QAQ  閱讀(546)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产怡春院无码一区二区| 久久人人97超碰国产精品| 国产久9视频这里只有精品| 久久精品国产2020| 国产自产一区二区三区视频| 在国产线视频A在线视频| 国产妇女馒头高清泬20p多| 久热久热久热久热久热久热| 亚洲日韩精品无码一区二区三区| 美女高潮黄又色高清视频免费| 亚洲国产成人精品女久久| 国产午夜成人无码免费看| 丰满少妇内射一区| 久久99日韩国产精品久久99| 办公室强奷漂亮少妇视频| 国内少妇人妻偷人精品| 国产一区二区三区精品片| 制服丝袜国产精品| 国产免费又黄又爽又色毛| 熟女视频一区二区三区嫩草| 亚洲精品麻豆一二三区| 亚洲熟女乱色综一区二区| 国产超碰无码最新上传| 国精一二二产品无人区免费应用| 日韩人妻无码精品专区综合网| 乱码中字在线观看一二区| 欧美人与禽2o2o性论交| 免费看的一级黄色片永久| 欧美三级中文字幕在线观看| 久久大香萑太香蕉av黄软件 | 青春草在线视频观看| 亚洲国产成人综合熟女| 成人啪精品视频网站午夜| 变态另类视频一区二区三区| 丝袜美腿一区二区三区| 成人av专区精品无码国产| 午夜免费无码福利视频麻豆| 日韩少妇人妻vs中文字幕| 99久久免费精品国产色| 亚洲综合一区二区三区| 农民人伦一区二区三区|