zoukankan      html  css  js  c++  java
  • selenium学习笔记(智能等待)

    博主在尝试对百度首页用selenium完成自动登录的功能

    反复多次尝试元素定位方法也未写错、最后发现问题原因:

    脚本运行速度快于页面加载速度

    如百度首页登录例子、脚本已经开始寻找登录弹窗

    但是页面仍在加载、导致程序报错

    博主就整理下智能等待的方法

    首先是显示等待:即等待页面某个元素出现、超时则抛出错误

     1 #!/usr/bin/env python
     2 # -*- coding: utf_8 -*-
     3 
     4 from learn_webdriver import Webdriver
     5 from selenium import webdriver
     6 from selenium.webdriver.support.ui import WebDriverWait
     7 from time import sleep
     8 
     9 browser_chrome = webdriver.Chrome(Webdriver.chrome())
    10 browser_chrome.get("http://www.baidu.com")
    11 
    12 browser_chrome.find_element_by_css_selector("html body div#wrapper div#head div.head_wrapper div#u1 a.lb").click()
    13 # 定位百度首页中登录按钮元素
    14 WebDriverWait(browser_chrome, 10).until(lambda the_driver:
    15                                         browser_chrome.find_element_by_class_name("tang-foreground").is_displayed())
    16 browser_chrome.find_element_by_class_name("tang-foreground").find_element_by_name("userName").send_keys(u"baidu用户名")
    17 # 定位到登录窗口后再定位到用户名输入框
    18 browser_chrome.find_element_by_name("password").send_keys(u"baidu密码")
    19 sleep(2)
    20 print browser_chrome.title
    21 browser_chrome.quit()

    这里主要是使用 WebDriverWait() 类构建方法、直到找到登录弹窗元素为止

    下面是隐形等待:即设置等待时间、等待页面完成新的操作后、若超时则抛出错误

     1 #!/usr/bin/env python
     2 # -*- coding: utf_8 -*-
     3 
     4 from learn_webdriver import Webdriver
     5 from selenium import webdriver
     6 from selenium.webdriver.support.ui import WebDriverWait
     7 from time import sleep
     8 
     9 browser_chrome = webdriver.Chrome(Webdriver.chrome())
    10 browser_chrome.get("http://www.baidu.com")
    11 
    12 browser_chrome.find_element_by_css_selector("html body div#wrapper div#head div.head_wrapper div#u1 a.lb").click()
    13 # 定位百度首页中登录按钮元素
    14 browser_chrome.implicitly_wait(30)
    15 # 添加智能等待时间
    16 div_user = browser_chrome.find_element_by_class_name("tang-foreground").find_element_by_name("userName")
    17 div_user.send_keys(u"baidu用户名")
    18 div_pass = browser_chrome.find_element_by_name("password").send_keys(u"baidu密码")
    19 sleep(2)
    20 print browser_chrome.title
    21 browser_chrome.quit()

     implicitly方法智能设置等待时间30S、超时则抛出异常

  • 相关阅读:
    kendoGrid edit功能
    kendoGrid Event事件
    你不得不看的81条JavaScript编码小技巧,吐血整理,建议收藏
    H265编码视频流媒体播放器EasyPlayer.js支持9宫格视频同屏播放的写法
    EasyNTS 交叉编译海思系统下的可执行程序实现及测试过程
    EasyNTS在Go1.15版本下linux下无法编译的问题优化
    TSINGSEE青犀视频开发Python3行人分析功能运行一段时间后崩溃是什么原因?
    Mysql数据库导入excel和乱码问题
    聊聊5G:5G技术的落地能给视频娱乐、VR直播带来怎样的潜力?
    企业直播的核心点在哪里?未来将如何发展?
  • 原文地址:https://www.cnblogs.com/cllovewxq/p/5481901.html
Copyright © 2011-2022 走看看