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、超时则抛出异常

  • 相关阅读:
    分区助手怎么调整磁盘分区的大小
    3dsmax2014的下载、安装与注册激活教程详解
    U深度U盘启动盘制作工具怎么用?U深度U盘启动盘制作工具使用教学
    CAD出现向程序发送命令时出现问题提示解决方法分享
    TeamViewer——可以实现在手机上随时远程控制你的电脑
    CPU-Z五大主要功能及使用方法初步了解
    vs中更改项目名称注意事项
    Oracle 存储过程例子返回记录集
    oracle 调用包体的函数并返回return值
    oracle 中更新update不成功的原因
  • 原文地址:https://www.cnblogs.com/cllovewxq/p/5481901.html
Copyright © 2011-2022 走看看