兖矿东华建设网站,正能量视频素材免费下载网站,合肥网站建设索q479185700,网站服务器上线后要怎么做1、三大等待
1、硬性等待
1、概述
硬性等待也可以称之为强制等待#xff0c;写法如下#xff1a;
time.sleep()
优点#xff1a;使用简单
缺点#xff1a;等待时间把握不准#xff0c;容易造成时间浪费或者等待时间不足
2、实战
from time import sleep
from sele…1、三大等待
1、硬性等待
1、概述
硬性等待也可以称之为强制等待写法如下
time.sleep()
优点使用简单
缺点等待时间把握不准容易造成时间浪费或者等待时间不足
2、实战
from time import sleep
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWaitdriver webdriver.Firefox()
driver.get(http://mall.hahahah.com:VVVV/)
driver.maximize_window()第一类等待强制等待sleep(5)
driver.find_element(By.XPATH,//div[text()小熊摊手]).click()
2、隐式等待
1、概述
在设置的超时时间范围内不断查找元素直到找到元素或者超时为止设置方式如下
driver.implicitly_wait(5)
优点全局应用它适用于WebDriver会话期间中所有查找的Web元素通过findElement方法 缺点只能等待元素存在不能适用条件更复杂的情况如元素可点击、元素可见
其他特点 1、如果超过隐式等待的设置时间还是找不到元素就会抛出了NoSuchElementException-找不到元素异常 2、放置的位置一般我们会将其放置到driver的初始化之后 3、全局生效只需要设置一次之后通过find_element去找元素都会有隐式等待的效果 4、等待条件的区别只能等待元素存在
2、实战
driver webdriver.Firefox()
driver.get(http://mall.lemonban.com:3344/)
driver.maximize_window()第二类隐式等待
driver.implicitly_wait(5)
driver.find_element(By.XPATH,//div[text()小熊摊手]).click()
3、显式等待
1、概述
在设置的超时时间范围内根据特定条件不断查找元素直到找到元素为止。如元素存在、元素可点 击、元素可见等 使用方式
from selenium.webdriver.support import expected_conditions as EC
WebDriverWait(driver, 20,0.5).until(EC.presence_of_element_located((By.LINK_TEXT, 好123)))
优点可以设置更加丰富的特定条件
缺点仅对指定的元素生效代码略复杂
等待条件解释presence_of_element_located页面元素在页面源代码中存在visibility_of_element_located页面元素在页面存在并且可见element_to_be_clickable页面元素是否在页面上可被单击
其他 1、如果超过显式等待的设置时间还是找不到元素就会抛出了TimeoutException-超时异常 2、局部生效的只能针对单个元素生效 3、设置的时候是针对单个元素的并不是全局的 4、等待更多丰富的条件等待元素可见、可被点击、等待元素存在...
2、实战
driver webdriver.Firefox()
driver.get(http://mall.lemonban.com:3344/)
driver.maximize_window()driver.find_element(By.XPATH,//div[text()小熊摊手]).click()
# sleep(2)
第三类显示等待driver,5,0.5 是5秒钟内每0.5s轮循一次
WebDriverWait(driver,5,0.5).until(EC.element_to_be_clickable((By.CLASS_NAME,buy-now))).click()
注意EC.element_to_be_clickable()函数中的参数是元组形式哦因此是这样的EC.element_to_be_clickable((By.XPATH, //a[text()ceshi]))这样子
2、三大切换
1、切换Iframe-内联框架-内嵌的网页
1、概述
当想要定位iframe中的元素时由于driver的焦点还停留在原页面我们在iframe新的页面上定位元素 时自然会产生错误所以我们需要将driver的焦点切换到iframe页面中。
切换方式
driver.switch_to.frame(XXX);跳转到父级iframe中
driver.switch_to.parent_frame(XXX);回到默认内容页面
driver.switch_to.default_content(XXX)
2、实战
from time import sleepfrom selenium import webdriver
from selenium.webdriver.common.by import Bydriver webdriver.Firefox()
# driver.get(https://qzone.qq.com/)
# driver.get(https://www.126.com/)# 切换iframe
QQ空间案例
# driver.switch_to.frame(driver.find_element(By.XPATH,//iframe[idlogin_frame]))
# # sleep(2)
# driver.find_element(By.ID,switcher_plogin).click()
# driver.find_element(By.ID,u).send_keys(1425301899)
# driver.find_element(By.ID,p).send_keys(123456)
# driver.find_element(By.ID,login_button).click()
# sleep(2)
# # 返回上一个页面即跳出当前的iframe
# driver.switch_to.default_content()selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [idu]
会报错因为有iframe
driver.find_element(By.ID,u)
126邮箱案例
# 切换
# driver.switch_to.frame(driver.find_element(By.XPATH,//iframe[contains(id,x-URS-iframe)] ))
# driver.find_element(By.XPATH,//input[placeholder邮箱账号或手机号码]).send_keys(123456)
# driver.find_element(By.NAME,password).send_keys(123456)
# driver.find_element(By.ID,dologin).click()
# sleep(6)
# # 返回默认iframe页面
# driver.switch_to.default_content()
# driver.close()多层iframe嵌套的案例
driver.get(file:///D:/%E6%9F%A0%E6%AA%AC%E7%8F%AD%E8%AF%BE%E7%A8%8B/web%E8%87%AA%E5%8A%A8%E5%8C%96/lemon/Python%E8%87%AA%E5%8A%A8%E5%8C%96VIP%E5%BD%95%E6%92%AD%E8%A7%86%E9%A2%91/py%E5%85%A8%E6%A0%8864%E6%9C%9F/%E5%8A%A0%E5%AF%86%E5%90%8E%E8%A7%86%E9%A2%91/iframe%E5%A4%9A%E5%B1%82%E5%B5%8C%E5%A5%97/a.html)
driver.maximize_window()
driver.find_element(By.ID,aa).send_keys(hhh)
sleep(3)
# 切换到第一层iframe
driver.switch_to.frame(driver.find_element(By.ID,bframe))
driver.find_element(By.ID,bb).send_keys(你好今天和明天)
sleep(5)
# 切换到第二层iframe
driver.switch_to.frame(driver.find_element(By.ID,cframe))
driver.find_element(By.ID,cc).send_keys(人生美好)
sleep(2)
# 回到默认页面
# 方法一
driver.switch_to.default_content()
# 方法二
driver.switch_to.parent_frame()
driver.switch_to.parent_frame()# 清楚原来写入输入框的元素
driver.find_element(By.ID,aa).clear()
driver.close()
2、弹窗切换
1、概述
弹窗有三种不同类型 alert警告消息框、 confirm确认消息框、 prompt提示消息对话框 通过switch_to.alert()切换到弹窗再使用accept、dismiss、send_keys、text方法进行操作
2、实战
from time import sleepfrom selenium import webdriver
from selenium.webdriver.common.by import By 弹窗切换
driver webdriver.Firefox()
driver.get(file:///D:/%E6%9F%A0%E6%AA%AC%E7%8F%AD%E8%AF%BE%E7%A8%8B/web%E8%87%AA%E5%8A%A8%E5%8C%96/lemon/Python%E8%87%AA%E5%8A%A8%E5%8C%96VIP%E5%BD%95%E6%92%AD%E8%A7%86%E9%A2%91/py%E5%85%A8%E6%A0%8864%E6%9C%9F/%E5%8A%A0%E5%AF%86%E5%90%8E%E8%A7%86%E9%A2%91/%E5%BC%B9%E7%AA%97%E4%B8%8B%E6%8B%89%E6%A1%86demo.html)
driver.maximize_window()
sleep(2)1、警告窗,比较常见不需要切换
# driver.find_element(By.ID,alert).click()
# sleep(5)2、确认窗
# 点击确认框
# driver.find_element(By.ID,confirm).click()
# sleep(2)
# 切换弹窗
# driver.switch_to.alert.accept() 确认
# print(driver.switch_to.alert.text) 输出confirm弹窗演示
# driver.switch_to.alert.dismiss() 取消
3、提示窗比较少见
driver.find_element(By.ID,prompt).click()
sleep(2)
driver.switch_to.alert.send_keys(测试测试测试)
sleep(3)driver.close()3、切换windows
1、概述
当我们点击了 a 标签元素超链接时会触发打开链接页面的事件有两种情形 1. 在当前窗口加载新页面内容 2. 新建一个窗口加载新页面内容这种情况在 a 标签有 target_blank 时触发
当发生第2种情况时同iframe类似我们需要切换窗口 切换方式 传入要操作窗口的handle句柄 --窗口的标识唯一
driver.switch_to.window()如何获取到窗口的句柄
driver.current_window_handle(); #获取当前操作窗口的句柄
driver.window_handles(); #获取所有打开的窗口句柄备注窗口的句柄并不是固定的而是由浏览器分配的
2、实战
from time import sleepfrom selenium import webdriver
from selenium.webdriver.common.by import Bydriver webdriver.Firefox()
driver.get(https://www.baidu.com/)
driver.maximize_window()
#有一个问题点击超链接时超链接元素有属性target_blank就会重新打开一个页面
print(driver.window_handles) # 输出[b9ddb693-1b03-4e62-981f-f432e01cfe2d]
driver.find_element(By.LINK_TEXT,地图).click()
driver.find_element(By.LINK_TEXT,hao123).click()
print(driver.window_handles) # 最开始打开的页面有一个句柄如果再打开2个那么就会增加2个新的句柄输出
[d18c1856-8718-4ec8-9541-665d9605c402, 6a90cdf8-20c6-42e7-a55e-397ecf6e5fa6, 8f90fcc2-633b-4b77-9489-982d9e1a9c4b]handles driver.window_handles
# 切换窗口可以根据下标或者用标题去切换
driver.switch_to.window(handles[-1]) # 用下标
#如果是同时打开了多个窗口要去切换到目标窗口中for handle in handles:#判断是否符合目标窗口通过url地址或者title确定if driver.title hao123_上网从这里开始:# url地址# if driver.current_url https://www.hao123.com/?srcfrom_pc:# 符合的话就说明当前driver是在目标窗口里面所以就退出循环breakelse:# 否则我们就需要切换窗口driver.switch_to.window(handle)
driver.find_element(By.LINK_TEXT,携程旅行网).click()
#需要注意窗口的句柄并不是固定的而是由浏览器分配的类似于进程号
#窗口句柄是唯一但是并不固定
sleep(5)
driver.close()3、下拉框的定位
1、select标签的下拉框
有3种方法 1、通过索引来选择选项。索引从0开始 2、通过value属性来选择 3、通过选项的文本来选择 - 也是最常用的方法
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Selectdriver webdriver.Firefox()
driver.get(file:///D:/%E6%9F%A0%E6%AA%AC%E7%8F%AD%E8%AF%BE%E7%A8%8B/web%E8%87%AA%E5%8A%A8%E5%8C%96/lemon/Python%E8%87%AA%E5%8A%A8%E5%8C%96VIP%E5%BD%95%E6%92%AD%E8%A7%86%E9%A2%91/py%E5%85%A8%E6%A0%8864%E6%9C%9F/%E5%8A%A0%E5%AF%86%E5%90%8E%E8%A7%86%E9%A2%91/%E5%BC%B9%E7%AA%97%E4%B8%8B%E6%8B%89%E6%A1%86demo.html)
driver.maximize_window()
一、当下拉框是Select标签的时候处理方法如下
ele driver.find_element(By.ID,select)sleep(3)方法一通过索引来选择选项。索引从0开始# Select(ele).select_by_index(3)方法二通过value属性来选择# Select(ele).select_by_value(o4)方法三通过选项的文本来选择- 最常用
Select(ele).select_by_visible_text(浙江省)sleep(5)
driver.close()
2、一般的下拉框 一、非Select标签,处理方法为直接去点击对应下拉框
以百度页面的“设置”按钮为例driver.get(https://www.baidu.com/)
driver.find_element(By.ID,s-usersetting-top).click()
driver.find_element(By.XPATH,//span[text()高级搜索]).click()
driver.find_element(By.XPATH,//span[text()时间不限]).click()
sleep(3)
driver.find_element(By.XPATH,//p[text()一月内]).click()
sleep(5)
driver.close()
4、扩展
如果元素定位不到有哪些原因
1、检查我们的元素定位表达式是否写错可以F12搜索验证
2、检查是否是需要加等待
3、检查是否元素在iframe中如果是的话就需要切换iframe
4、检查元素是否在新的窗口中如果是的话我们就需要切换窗口