1. 程式人生 > >selenium設定元素髮現超時等待時間-python

selenium設定元素髮現超時等待時間-python

前言:之前寫了個指令碼,要在ip站點網站查詢一千多個域名的備案資訊,但是有些域名是沒有備案的,所以就找不到元素,雖然我已經設定了異常判斷,但是預設等待的30秒時間讓我無法忍受。然後經過各種百度找到了解決的辦法。

外話:一同事用nodejs非同步發包的方式2分鐘就解決了一千多個數據。

先說說JAVA里加的語句

在  Webdirver driver = new FirefoxDriver();(可能是其他瀏覽器驅動,沒關係。) 後,加上。
driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS); 預設是30秒,可以改小點
然後是我們的python環境下:

#匯入 WebDriverWait 包

​from  selenium.webdriver.support.ui import WebDriverWait

​#匯入 time 包import time

sleep()    設定固定等待時間

——如:time.sleep(5)  #等待5秒

implicitly_wait()    等待一個元素被發現,或一個命令完成,超出了設定時間則丟擲異常

——如:driver.implicitly_wait(30)

           driver.find_element_by_id("id").click()

WebDriverWait()    在設定時間內,預設每隔一段時間檢測

檢測一次當前頁面元素是否存在,如果超過設定時間檢測不到則丟擲異常

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

——driver:WebDriver 的驅動程式(Ie, Firefox, Chrome 或遠端)

——timeout:最長超時時間,預設以秒為單位

——poll_frequency:休眠時間的間隔(步長)時間,預設為 0.5 秒

——ignored_exceptions:超時後的異常資訊,預設情況下拋 NoSuchElementException 異常

——如1:element = WebDriverWait(driver, 10).until(lambda

 x : x.find_element_by_id("id"))

           element.send_keys("selenium")

——如2:element = WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id(“Id”))

            is_disappeared = WebDriverWait(driver, 30, 1, (ElementNotVisibleException)).until_not(lambda

 x: x.find_element_by_id(“someId”).is_displayed())

WebDriverWai()一般由 unit()或 until_not()方法配合使用:

——until(method, message=’’)      呼叫該方法提供的驅動程式作為一個引數,直到返回值不為 False。——until_not(method, message=’’)      呼叫該方法提供的驅動程式作為一個引數,直到返回值為 False。