元素操作(一)
1|0一. 如何处理首次登陆的引导页面
refresh():页面刷新。可以再浏览器中刷新一下,就可以取消引导页
2|0二. 操作页面弹出框中的元素
2|11. 强制等待 sleep(秒)
比如百度首页的登录弹出框,在访问百度的时候,它就在html页面中出现了,只不过默认display:none,没有展示而已(这种弹出框只是修改display属性为block,所以系统响应应该非常快),对于这种情况,需要等待弹出框出现,才能进行下一步操作,所以需要设置等待时间
访问百度首页登录代码如下:
还有一种情况,提交表单数据后,会看到一个进度条,这意味着系统正与服务器进行交互,只有交互之后,才能看到页面的变化。这时候,就不能确定加载时间是多少,因为和网络、服务器的性能有关。这里就要用到隐性等待
2|22. 隐性等待 implicitly_wait(秒)
设置最长等待时间,在这个时间内加载完成,则执行下一步,比如设置30s隐性等待,在3s内就能切换到页面,就不会再继续等下去,而是进入下一步
整个driver的会话(从建立连接到断开连接 )周期内,设置一次即可,全局都可用
继续用上面的例子做修改,修改后的百度登录代码如下:
注意:观察到当python脚本运行结束时,进程中的chromedriver.exe会消失,但这并不意味着会话的结束,一个会话的结束是以关闭浏览器,断开连接为标准的(chromedriver.exe进程,在会话当中很重要,是一部分,但并不是全部。所以即便chromedriver.exe没了,会话仍然没有正确结束。因为除了启动chromedriver.exe之外,还有其它初始化的配置项)
另一种更高级的情况是,我在百度里搜索"selenium",需要等到另外一个页面的弹出框出现之后,才会对它进行操作,这时需要用到显性等待
2|33. 显性等待
明确等到某个条件满足之后,再去执行下一步的操作
程序每隔xx秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException
WebDriverWait类:显性等待类
WebDriverWait(driver, 等待时长, 轮询周期).until/until_not
-
driver:表示本次会话中的driver
-
等待时长:最长的等待时间
-
轮询周期:多久去看一眼
-
until:直到条件成立;until_not:直到条件不成立
Expected_conditions类:提供了一系列周期发生的条件
presence_of_element_located:元素存在
visibility_of_element_located:元素可见
element_to_be_clickable:元素可点击
ps:这个类有很多判断方法,具体自行了解
使用之前,引入相关的库:
使用方法:
1) 先确定元素的定位表达式 web_locator='XXXX'
2) 调用WebDriverWait类设置等待总时长、轮询周期,并调用其until、until_not方法
WebDriverWait(webdriver对象名, 等待总时长, 轮询周期).until(判断条件)
3) 使用expected_conditions对应的方法来生成判断条件
EC.方法名((定位方式, 定位表达式))
如:EC.presence_of_element_located((By.CSS_SELECTOR, web_locator))
继续修改上面的代码,如下所示:
__EOF__

本文链接:https://www.cnblogs.com/my_captain/p/9235233.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2017-06-27 《Advanced Bash-scripting Guide》学习(八):从一个目录移动整个目录树到另一个目录