前言:之前写了个脚本,要在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。