import time time.sleep(5) # 固定休眠5秒
创建driver时,为浏览器对象创建一个等待时间,整个 driver 的会话周期内设置一次即可。它并不影响脚本的执行速度,若元素可以定位到则继续执行,若定位不到则以轮询的方式不断判断元素是否被定位到。
from selenium import webdriver driver = webdriver.Chrome() driver.get("http://localhost:63342/webtest/demo.html") driver.implicitly_wait(10) driver.quit()
等到某个条件满足后,再执行操作(程序每隔 x 秒查询一次,若条件成立则执行下一步,否则继续等待,超过设置的最长时间条件仍不成立则抛出 TimeoutException)
WebDriverWait 显示等待类:WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None):
WebDriverWait 一般和 until()、until_not() 方法配合使用:
expected_condition 模块提供了希望发生的条件,如 presence_of_element_located 元素存在、visibility_of_element_located 元素可见、element_to_be_clickable 元素可点击,常用操作如下:
方法 | 说明 |
title_is | 判断当前页面的 title 是否完全等于(==)预期字符串,返回布尔值 |
title_contains | 判断当前页面的 title 是否包含预期字符串,返回布尔值 |
presence_of_element_located | 判断某个元素是否被加到了 dom 树里,并不代表该元素一定可见 |
visibility_of_element_located | 判断某个元素是否可见. 可见代表元素非隐藏,并且元素的宽和高都不等于 0 |
visibility_of | 跟上面的方法做一样的事情,只是上面的方法要传入 locator,这个方法直接传定位到的 element 就好了 |
presence_of_all_elements_located | 判断是否至少有 1 个元素存在于 dom 树中 |
text_to_be_present_in_element | 判断某个元素中的 text 是否 包含 了预期的字符串 |
text_to_be_present_in_element_value | 判断某个元素中的 value 属性是否包含 了预期的字符串 |
frame_to_be_available_and_switch_to_it | 判断该 frame 是否可以 switch进去,如果可以的话,返回 True 并且 switch 进去,否则返回 False |
invisibility_of_element_located | 判断某个元素中是否不存在于dom树或不可见 |
element_to_be_clickable | 判断某个元素中是否可见并且是 enable 的,这样的话才叫 clickable |
staleness_of | 等某个元素从 dom 树中移除,注意,这个方法也是返回 True或 False |
element_to_be_selected | 判断某个元素是否被选中了,一般用在下拉列表 |
element_selection_state_to_be | 判断某个元素的选中状态是否符合预期 |
element_located_selection_state_to_be | 跟上面的方法作用一样,只是上面的方法传入定位到的 element,而这个方法传入 locator |
alert_is_present | 判断页面上是否存在 alert |
示例代码:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get(‘http://www.baidu.com‘) WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, "kw"))) driver.find_element(By.ID, "kw").send_keys("test")
from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get(‘http://www.baidu.com‘) WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, "kw"))) ele = driver.find_element(By.ID, "kw") # 输入 ele.send_keys("test") sleep(1) # 清空输入框文本 ele.clear() # 获取元素标签类型 print(ele.tag_name) # 点击 driver.find_element(By.ID, "su").click() ele = driver.find_element(By.LINK_TEXT, "新闻") # 获取元素 text 属性 print(ele.text) ele.get_property() # # 获取元素标签的内容 # ele.get_attribute(‘textContent‘) # # # 获取元素内的全部HTML # ele.get_attribute(‘innerHTML‘) # # # 获取包含选中元素的HTML # ele.get_attribute(‘outerHTML‘) # ele.is_displayed() # ele.is_enabled() # ele.is_selected() # ele.location # ele.location_once_scrolled_into_view # ele.parent # ele.rect # ele.screenshot() # ele.screenshot_as_base64 # ele.screenshot_as_png # ele.submit() # ele.value_of_css_property()
Selenium系列教程(五)元素等待与操作(基于 Python)
原文:https://www.cnblogs.com/sharef/p/13633628.html