一、常用知识:
一、强制等待 time.sleep(3) 二、隐式等待 语法:driver.implicitly_wait(s) 1、整个会话只执行一次,全局起作用,后面的每一次元素查找都会进行等待,在设置的时间内元素找到就执行下一行代码,元素未找到就会报错 三、显式等待(等待[WebDriverWait]+条件[expected_conditions]) 1、导包 from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC 2、WebDriverWait参数说明 2.1、timeout:最长超时时间,默认以秒为单位 2.2、poll_frequency:轮询频率,检测的间隔步长,默认为0.5s,这里会每隔 0.5 秒调用一次 method 的临时函数 2.3、ignored_exceptions:超时后的抛出的异常信息,默认抛出NoSuchElementExeception异常。 3.until()结合使用 from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC "写法一:分开写" "等待,默认0.5秒检查一次元素是否出现" "等待条件为找到某个元素结合until使用" wait = WebDriverWait(driver=drive,timeout=10) element_locator = (By.XPATH,'//div[@id="kw"]') element = wait.until(EC.visibility_of_element_located(locator=element_locator)) "写法二:组合写法" EC.presence_of_element_located():元素存在的位置 element=WebDriverWait(driver=driver,timeout=10,poll_frequency=1).until(EC.presence_of_element_located((By.ID,'//div[@class="target_id"'))) "等待多个元素出现" wait = WebDriverWait(driver=drive,timeout=10) wait.until(EC.visibility_of_all_elements_located(locator=location)) 4、until_not()结合使用 5、expected_conditions结合使用 四、from selenium.webdriver.support import expected_conditions类 https://www.cnblogs.com/surewing/p/9639855.html "常用" 1、visibility_of_element_located : 判断某个元素是否可见. 可见代表元素非隐藏,并且元素的宽和高都不等于0 2、visibility_of_all_elements_located:判断多个元素是否可见,可见代表元素非隐藏,并且元素的宽和高都不等于0 3、visibility_of :跟上面的方法做一样的事情,只是上面的方法要传入locator,这个方法直接传定位到的element就好了 4、frame_to_be_available_and_switch_to_it : 判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False 5、alert_is_present : 判断页面上是否存在alert 6、element_to_be_selected:判断某个元素是否被选中了,一般用在下拉列表 7、element_to_be_clickable : 判断某个元素中是否可见并且是enable的,这样的话才叫clickable 8、presence_of_element_located: 判断某个元素是否被加到了dom树里,【并不代表该元素一定可见】 9、presence_of_all_elements_located : 等待所有元素存在dom树中【并不代表该元素一定可见】 "不常用" 6、title_is:判断当前页面的title是否完全等于(==)预期字符串,返回是布尔值 7、title_contains 判断当前页面的title是否包含预期字符串,返回布尔值 8、text_to_be_present_in_element : 判断某个元素中的text是否包含了预期的字符串 9、text_to_be_present_in_element_value:判断某个元素中的value属性是否包含了预期的字符串 10、invisibility_of_element_located : 判断某个元素中是否不存在于dom树或不可见 11、staleness_of :等某个元素从dom树中移除,注意,这个方法也是返回True或False 12、element_selection_state_to_be:判断某个元素的选中状态是否符合预期 13、element_located_selection_state_to_be:跟上面的方法作用一样,只是上面的方法传入定位到的element,而这个方法传入locator """
二、测试代码:
# 导入selenium包 from selenium import webdriver from time import sleep from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 打开一个浏览器 # 1、启动chromedriver驱动程序 # 2、通过驱动程序,与chrome之间创建一个会话(会话Id)。打开chrome浏览器。 driver = webdriver.Chrome() #调整为最大窗口: driver.maximize_window() #打开百度地址 driver.get("https://www.baidu.com/") # id # element=driver.find_element(By.ID,"kw") # print(element) element = driver.find_element(By.XPATH,'//input[@id="kw"]') print(element) #点击操作 element.click() #输入操作 element.send_keys("陈然") #点击百度按钮查询 element1 =driver.find_element(By.ID,"su") element1.click() sleep(3) #获取元素的标签名 print(element.tag_name) #获取元素的value属性 print(element.get_attribute("value")) #获取元素的文本内容 print(element.text) #将元素滚动到可见区域 print(element.location_once_scrolled_into_view) #判断元素是否被选中 print(element.is_selected()) #判断元素是否已启用 print(element.is_enabled()) #判断元素是否对用户可见 print(element.is_displayed()) #元素存在:页面存在 #元素可见:元素在页面上占据一定的大小 #元素可用:按钮置灰(不可用) #1.强制等待(把握不了等待的时间) sleep #2.隐性等待(implicitly_wait) -智能等待(全局作用) #在等待时间内元素找到了就不再等待,如果没找到就抛出异常 --等待元素,driver.find_element driver.implicitly_wait(10) #3.显性等待 -智能等待 #等待时间内任何条件成立了就不再等待,超出时间没找到就抛出异常 loc=(By.XPATH,'//input[@id="kw"]') EC.visibility_of_any_elements_located(loc) #结合起来使用场景: WebDriverWait(driver,10).until(EC.visibility_of_any_elements_located(loc)) #不成立场景: WebDriverWait(driver, 10).until_not() sleep(3) driver.quit()
标签:web,--,selenium,元素,driver,element,located,自动化,import From: https://www.cnblogs.com/crdhm12040605/p/17161779.html