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。