微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

selenium设置等待时间

当写好selenium代码后运行发行无法定位元素,则这个时候就要考虑

  1. 程序运行太快导致 网页元素标签之类的还未加载成功
  2. 网速差劲

所以说要设置等待时间,等待元素加载出来

  1. 强制等待 即 sleep time.sleep(3) 显性的设置等待时间 有点傻
  2. 显性等待

webdriverwait(driver,20,0.5).until(expected_conditions.prosence_of_element_located(locator))

selenium 中的wait模块的webdriverwait() 方法,配合until或者until_not 方法,再辅助以一些判断条件,

每经过多少秒就查看locator元素是否可见,如果可见就停止等待,如果不可见就继续等待,直到报超时异常

实际例子

#! /opt/anaconda3/bin/@R_404_4402@
#脚本第一句声明采用什么解释器,然后直接将脚本放到PATH里面即可
import sys
#建议采用chrome比firefox启动快一点,也更好看点
#目前采用chromium-driver自动升级省去了配置升级的麻烦
#要不然还得下载相应版本的驱动,更新后又是麻烦
from selenium import webdriver
chrome_options = webdriver.ChromeOptions(); 
#隐私模式
chrome_options.add_argument("--incognito")
#新的设置忽略头部的chrome is auto controlled 信息
chrome_options.add_experimental_option("excludeSwitches", ['enable-automation']);
driver = webdriver.Chrome(options=chrome_options);  
#python接受参数
args=sys.argv[1]
if args=='all':
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import webdriverwait
    from selenium.webdriver.support import expected_conditions as EC

    driver.get("https://qiye.163.com")

    driver.find_element_by_id('accname').send_keys("alibaba.com")
    driver.find_element_by_id('accpwd').send_keys("alibaba")
    driver.find_element_by_xpath('//*[@id="loginForm"]/div[4]/button').click()
    
    #打开新的标签页,用selenium去执行打开新标签页的脚本
    newwindow = 'window.open("https://gitlab.com")'
    driver.execute_script(newwindow)
    #切换到第二个标签页
    driver.switch_to.window(driver.window_handles[1])
    
    #设置等待,因为i如果打开网页太快,而元素还没有加载出来,就会报找不到element error
    #每隔一段时间去查询元素是否出现,出现就填充,否则等待
    element = webdriverwait(driver,5,0.5).until( EC.presence_of_element_located((By.ID,"user_login")) )
    element.send_keys('alibaba')
    
    driver.find_element_by_id('user_password').send_keys("aliabow")
    driver.find_element_by_xpath('/html/body/div[1]/div/div[2]/div[1]/div/div[1]/div[2]/form/div[2]/input').click()
if args=='mail':
    driver.get("https://qiye.163.com")

    driver.find_element_by_id('accname').send_keys("alibaba")
    driver.find_element_by_id('accpwd').send_keys("alibaba")
    driver.find_element_by_xpath('//*[@id="loginForm"]/div[4]/button').click()
elif args=='git':
    driver.get("https://gitlab.com")
    driver.find_element_by_id('user_login').send_keys("alibaba")
    driver.find_element_by_id('user_password').send_keys("aaaaa")
    driver.find_element_by_xpath('/html/body/div[1]/div/div[2]/div[1]/div/div[1]/div[2]/form/div[2]/input').click()

自动登录方法

  1. selenium 自动填充密码登录(网易邮箱 邮箱之类的)
  2. 获取其cookie以便以后再次登录百度云之类的 浏览器的配置目录下)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐