标签:tps 信息 pass 工具 poll exce 原理 text href
在dos窗口用pip命令安装selenium(Python3用pip3)
命令: pip3 install
配置谷歌驱动文件 : 把chromedriver.exe放置在python的Scripts目录下面
# 1.id定位
# 写法1
driver.find_element_by_id(‘kw‘).send_keys(‘aa‘)
# 写法2
element=driver.find_element_by_id(‘kw‘)
element.send_keys(‘aa‘)
# 2.name定位
driver.find_element_by_name(‘wd‘).send_keys(‘bb‘)
# 3.class定位
driver.find_element_by_class_name(‘s_ipt‘).send_keys(‘cc‘)
# 4.js定位(js脚本定位)
# 定义js变量
js=‘var a = document.getELementById("kw").value="dd"‘
driver.execute(js)
# 5.link定位(链接定位)
driver.find_element_by_link_text(‘hao123‘).click()
# 6.partial_link定位(模糊链接定位)
driver.find_element_by_partial_link_text(‘ao1‘).click()
# 7.tag_name定位(标签名定位)
driver.find_element_by_tag_name("input").send_keys(‘aa‘)
all_element=driver.find_elements_by_tag_name("input")
print(all_element)
print(type(all_element))
print(len(all_element))
#注意点:使用单独的标签名很难一次性定位到我们想要的元素,有的时候需要跟for循环组合使用
for i in all_element: #遍历获取出来的input标签
if i.get_attribute(‘id‘)==‘kw‘: #通过get_attribute获取每一个标签的的id属性
i.send_keys(‘aa‘)
# 8.xpath定位
driver.find_element_by_xpath(‘//*[@id="kw"]‘).send_keys(‘bb1‘)
driver.find_element_by_xpath(‘//input[@id="kw"]‘).send_keys(‘bb2‘)
driver.find_element_by_xpath(‘//*[@name="wd"]‘).send_keys(‘bb3‘)
driver.find_element_by_xpath(‘//*[@class="s_ipt"]‘).send_keys(‘bb4‘)
driver.find_element_by_xpath(‘//*[@class="s_ipt" and @name="wd"]‘).send_keys(‘bb5‘)
driver.find_element_by_xpath(‘//*[@id="form"]/span[1]/input[1]‘).send_keys(‘bb6‘)
# 9.css定位
driver.find_element_by_css_selector(‘#kw‘).send_keys(‘cc1‘)
driver.find_element_by_css_selector(‘.s_ipt‘).send_keys(‘cc2‘)
driver.find_element_by_css_selector(‘[id=kw]‘).send_keys(‘cc3‘)
driver.find_element_by_css_selector(‘[name=wd]‘).send_keys(‘cc4‘)
driver.find_element_by_css_selector(‘[name=wd][id=kw]‘).send_keys(‘cc5‘)
driver.find_element_by_css_selector(‘form>span>input‘).send_keys(‘cc6‘)
在这9种常用的定位方法中,优先顺序
1)有id优先使用id定位
2)没有id,考虑使用name或者class定位。
3)如果没有id,name,class再考虑用xpath,css定位。
4)如果是链接可以考虑使用link_text,partial_link_text 定位。
5)tag_name和JavaScript还是用的比较少的。 我们根据实际情况,具体问题具体分析
time.sleep(n)
from selenium import webdriver #从selenium库导入webdriver包
from time import sleep
driver=webdriver.Chrome()
driver.get(‘http://www.baidu.com‘)
# driver.maximize_window()
sleep(2) #强制等待,线程等待,通过time模块导入
隐式等待是全局的针对所有元素,设置等待时间如n秒,如果n秒内出现,则继续向下,否则抛异常。
可理解为在n秒内,不停刷新看元素是否加载出来
driver.implicitly_wait(5)
driver.implicitly_wait(5) #隐式等待,是webdriver里面的方法,作用于全局,在5秒内任何时间元素加载完成,就可以继续往下走,超时则报错
单独针对某个元素,设置一个等待时间如n秒,每隔m秒检查一次是否出现,如果在n秒之前任何时候出现,则继续向下,超过n秒尚未出现则抛异常
WebDriverWait(driver,n,m)
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located(By.ID,‘kw‘)).send_keys(‘666‘) # 显式等待,作用与某个元素,等待5秒,每隔0.5秒轮询一次,只要所需的元素出现则继续往下走,否则会报错
#详细解释
‘‘‘
from selenium.webdriver.support.wait import WebDriverWait #导入模块
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
driver:浏览器驱动
timeout:最长超时时间,默认以秒为单位
poll_frequency:检测的间隔步长,默认为0.5s
ignored_exceptions:超时后的抛出的异常信息,默认抛出
NoSuchElementException异常。
‘‘‘
只能对input标签起作用
driver=webdriver.Chrome()
driver.get(‘https://passport.jd.com/new/login.aspxReturnUrl=https%3A%2F%2Fwww.jd.com%2F‘) #京东操作
sleep(1)
driver.find_element_by_xpath(‘//*[@id="content"]/div[2]/div[1]/div/div[3]‘).click()
sleep(2)
driver.find_element_by_id(‘loginname‘).send_keys(‘13388888888‘)
driver.find_element_by_id(‘nloginpwd‘).send_keys(‘123456‘)
from selenium import webdriver #从selenium库中导入webdriver包
from time import sleep
driver = webdriver.Chrome()
url = ‘https://www.baidu.com/‘
driver.get(url)
driver.maximize_window()
driver.find_element_by_xpath(‘//[@id="form"]/span[1]/span[1]‘).click()
sleep(3)
element = driver.find_element_by_class_name(‘upload-pic‘) #定位到上传文件框 (不需要点击)
element.send_keys(r‘D:\kxz\aa.jpg‘) #上传文件
from selenium.webdriver.common.action_chains import ActionChains
---导入相关库ActionChains(driver).move_to_element(mouse).perform()
---移动到指定元素,进行悬停perform
from selenium import webdriver #从selenium库导入webdriver包
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains
driver=webdriver.Chrome()
driver.get(‘http://www.baidu.com‘)
# driver.maximize_window()
sleep(2)
# 方法1
driver.find_element_by_id(‘s-usersetting-top‘).click()
driver.find_element_by_link_text(‘搜索设置‘).click()
# 方法2:类似rf的鼠标悬停
mouse=driver.find_element_by_id(‘s-usersetting-top‘) # 定位到某个元素
ActionChains(driver).move_to_element(mouse).perform() # 把鼠标移动到某个元素,进行悬停
sleep(5)
driver.find_element_by_link_text(‘搜索设置‘).click()
driver.close()
from selenium import webdriver #从selenium库导入webdriver包
from time import sleep
from selenium.webdriver.support.select import Select
driver=webdriver.Chrome()
driver.get(‘https://www.ctrip.com/‘)
# driver.maximize_window()
sleep(2)
ele=driver.find_element_by_id(‘id="J_roomCountList"‘)
Select(ele).select_by_index(4) #通过索引进行选择
sleep(2)
Select(ele).select_by_value(‘6‘) #通过标签种的value进行选择
sleep(2)
Select(ele).select_by_visible_text(‘7间‘) #通过文本进行选择
警告型弹框,确认型弹框,输入型弹框
# 1.alert警告型弹框处理
from selenium import webdriver #从selenium库导入webdriver包
from time import sleep
driver=webdriver.Chrome()
driver.get(‘file:///D:/kxz/DCS/%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%9C%88%E8%AF%BE%E4%BB%B6/alert.html‘)
# driver.maximize_window()
t=driver.switch_to.alert # 切换到alert框中
sleep(2)
t.accept() #点击确定
sleep(2)
t.accept() #点击确定
sleep(2)
driver.refresh() #刷新页面
t=driver.switch_to.alert #经过刷新页面以后也要重新进入alert框中
print(t.text) #打印alert框中的信息
sleep(2)
t.dismiss() #点击取消
sleep(2)
t.accept()
sleep(2)
# 2.确认型弹框处理
from selenium import webdriver #从selenium库导入webdriver包
from time import sleep
driver=webdriver.Chrome()
driver.get(‘file:///D:/kxz/DCS/%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%9C%88%E8%AF%BE%E4%BB%B6/enter.html‘)
sleep(2)
# driver.maximize_window()
driver.find_element_by_class_name(‘alert‘).click()
sleep(2)
t=driver.switch_to.alert # 切换到alert框中
t.dismiss()
sleep(2)
driver.refresh()
driver.find_element_by_class_name(‘alert‘).click()
sleep(2)
t=driver.switch_to.alert # 切换到alert框中
t.accept()
from selenium import webdriver #从selenium库导入webdriver包
from time import sleep
driver=webdriver.Chrome()
driver.get(‘file:///D:/kxz/DCS/%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%9C%88%E8%AF%BE%E4%BB%B6/prompt.html‘)
sleep(2)
# driver.maximize_window()
driver.find_element_by_class_name(‘alert‘).click()
t=driver.switch_to.alert
t.send_keys(‘666‘)
sleep(3)
t.accept()
sleep(2)
driver.find_element_by_class_name(‘alert‘).click()
t=driver.switch_to.alert
sleep(2)
t.send_keys(‘777‘)
sleep(3)
t.dismiss()
driver.close()
#iframe框处理
from selenium import webdriver #从selenium库导入webdriver包
from time import sleep
driver=webdriver.Chrome()
driver.get(‘https://www.jd.com/‘)
sleep(2)
# driver.maximize_window()
driver.find_element_by_class_name(‘link-login‘).click()
sleep(2)
driver.find_element_by_xpath(‘//*[@id="kbCoagent"]/ul/li[1]/a‘).click()
sleep(2)
# 方法1:
iframe=driver.find_element_by_id(‘ptlogin_iframe‘) #通过id定位到iframe框
driver.switch_to.frame(iframe)
sleep(2)
driver.find_element_by_id(‘img_out_1121234835‘).click()
#方法2
iframe=driver.find_element_by_tag_name(‘iframe‘) #通过标签名定位到iframe框
driver.switch_to.frame(iframe)
sleep(2)
driver.find_element_by_id(‘img_out_1121234835‘).click()
# 方法3:
driver.switch_to.frame(0) #通过索引定位到iframe框,索引从0开始
sleep(2)
driver.find_element_by_id(‘img_out_1121234835‘).click()
from selenium import webdriver #从selenium库导入webdriver包
from time import sleep
driver=webdriver.Chrome()
driver.get(‘http://www.baidu.com‘)
text1=driver.find_element_by_xpath(‘//*[@id="s-top-left"]/a[2]‘).text
print(text1)
# 方法1:if判断
if text1==‘hao123‘:
print(‘断言成功‘)
else:
print(‘断言失败‘)
# 方法2:assert [如果断言失败直接报错,断言成功也没结果]
title=driver.title
assert title==‘百度一下,你就知道‘
from selenium import webdriver #从selenium库导入webdriver包
from time import sleep
driver=webdriver.Chrome()
driver.get(‘http://www.baidu.com‘)
# driver.maximize_window()
text1=driver.find_element_by_xpath(‘//*[@id="s-top-left"]/a[2]‘).text
print(text1)
title=driver.title #不用加()调用
driver.refresh() #页面刷新
driver.back() #页面返回
size = driver.get_window_size()
print(size)
#获取当前窗口,获取所有窗口
from selenium import webdriver #从selenium库导入webdriver包
from time import sleep
driver=webdriver.Chrome()
driver.get(‘http://www.baidu.com‘)
# driver.maximize_window()
sleep(2)
driver.find_element_by_link_text(‘hao123‘).click()
title=driver.title
print(title)
handle=driver.current_window_handle #获取当前窗口的句柄
print(handle)
all_handle=driver.window_handles #获取所有窗口的句柄
print(all_handle)
# 切换窗口
# 方法1:
driver.switch_to.window(all_handle[-1])
title1=driver.title
print(title1)
# 方法2: for循环切换
for i in all_handle:
if i!=handle:
driver.switch_to.window(i)
title2=driver.title
print(title2)
driver.close() # 关闭当前的窗口
driver.quit() # 关闭整个浏览器,关闭所有的窗口
from selenium import webdriver
from time import sleep
driver=webdriver.Chrome()
driver.get(‘https://www.jd.com/‘)
driver.maximize_window()
js1=‘window.scrollTo(0,20000)‘ #向下滑动
driver.execute_script(js1)
sleep(3)
js2=‘window.scrollTo(0,0)‘ #向下滑动
driver.execute_script(js2)
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.keys import Keys
driver=webdriver.Chrome()
driver.get(‘https://www.baidu.com/‘)
driver.maximize_window()
driver.find_element_by_id(‘kw‘).send_keys(‘aa‘)
sleep(2)
driver.find_element_by_id(‘kw‘).send_keys(Keys.BACK_SPACE) #模拟删除键操作
sleep(2)
driver.find_element_by_id(‘kw‘).send_keys(Keys.CONTROL,‘a‘) #模拟键盘全选操作(ctrl+A)
driver.find_element_by_id(‘kw‘).send_keys(Keys.CONTROL,‘x‘) #模拟键盘剪切操作(ctrl+X)
driver.find_element_by_id(‘kw‘).send_keys(Keys.CONTROL,‘v‘) #模拟键盘粘贴操作(ctrl+v)
driver.find_element_by_id(‘kw‘).send_keys(Keys.ENTER) #模拟键盘回车操作
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get(‘https://www.baidu.com/‘)
driver.maximize_window()
def find_element_id(localId,*value):
‘‘‘对id元素定位后的send_keys()进行封装‘‘‘
sleep(2)
driver.find_element_by_id(localId).send_keys(*value) # 模拟删除键操作
find_element_id(‘kw‘,‘aa‘,Keys.BACK_SPACE) #调用
标签:tps 信息 pass 工具 poll exce 原理 text href
原文地址:https://www.cnblogs.com/zz-winkie/p/14753071.html