当写好selenium代码后运行发行无法定位元素,则这个时候就要考虑
- 程序运行太快导致 网页元素标签之类的还未加载成功
- 网速差劲
所以说要设置等待时间,等待元素加载出来
- 强制等待 即 sleep time.sleep(3) 显性的设置等待时间 有点傻
- 显性等待
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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。