selenium自动化(二)


1.元素定位和常用方法
wd=webdriver.Chrome()
element = wd.find_element(By.ID,'kw')//通过id查找画面元素
element1=wd.find_element(By.CLASS_NAME,'animal')//返回第一个元素,使用类名查询
elements = wd.find_elements(By.CLASS_NAME,'animal')//返回所有元素,使用类名查询
element2=wd.find_element(By.TAG_NAME,'div')//使用标签名查询
element.send_keys('我要offer\n')//输入查询关键字并且回车,回车是\n
element.click()//点击该元素

如果找不到元素,find_element方法会抛出selenium.common.exceptions.NoSuchElementException
的异常
异常处理可以使用try
try:
    element = wd.find_element(By.ID,'kw')/
except NoSuchElementException:
    print("找不到元素")
如果找不到元素,find_element方法会返回空列表

wd.quit()//退出webdriver

from selenium.webdriver.common.by import By

wd.find_element(By.ID, 'username').send_keys('byhy')
wd.find_element(By.CLASS_NAME, 'password').send_keys('sdfsdf')
wd.find_element(By.TAG_NAME, 'input').send_keys('sdfsdf')
wd.find_element(By.CSS_SELECTOR,'button[type=submit]').click()

webdriver对象选择范围是整个web页面
webelement对象选择元素的范围是该元素的内部

import time

time.sleep(2)//2是2秒

wd.implicitly_wait(10)//隐式等待或者全局等待

element.clear()//清除元素内容比如输入框等
element.get_attribute('class')//获取元素属性
element.get_attribute('outerHTML')//获取元素包括元素标签
element.get_attribute('innerHTML')//获取内部元素标签
element.get_attribute('value')//可以获取输入框里的文本
element.get_attribute('innerText')//获取文本
element.get_attribute('TextContent')//获取文本

elememnt=wd.find_elements(By.CSS_SELECTOR,'.plant')//class为plant的元素
elememnt=wd.find_elements(By.CSS_SELECTOR,'.#plant')//ID为plant的元素
elememnt=wd.find_elements(By.CSS_SELECTOR,'#container > div')//id为container 下面的标签为div的子元素
elememnt=wd.find_elements(By.CSS_SELECTOR,'#container > div')//id为container 下面的标签为div的子元素
elememnt=wd.find_elements(By.CSS_SELECTOR,'[href="http://www.miitbeian.gov.cn"]')//选择属性href的元素

css选择器可以组合表达选出子元素,表达式的验证可以使用chrome的F12后选中element标签然后再ctrl+f去验证是否正确
如果想要选择或条件的元素,可以使用逗号分隔
elements = wd.find_elements(By.CSS_SELECTOR, 'div,#BYHY')//选择所有tag名为div的元素 和 id为BYHY的元素

根据次序选择子节点
span:nth-child(2) //父元素的第二个元素并且为span的元素
:nth-child(2)//所有有父元素的第二个元素没有其它限定条件
p:nth-last-child(1)//最后一个p

span:nth-of-type(2)//第一个span类型的子元素
span:nth-last-of-type(2)//倒数第一个span类型的子元素

p:nth-child(even)//偶数节点

p:nth-child(odd)//奇数节点

nth-of-type(even)
nth-of-type(odd)

h3+span//h3标签后面紧跟着的span标签
h3 ~ span//h3标签后面的所有span
可以在前面加选择器限定
#t1 h3~span

2.切换窗口,切换到iframe文档对象操作

html中有iframe的时候需要切换webdriver的操作对象
wd.switch_to(iframe_reference)//参数可以使用iframe标签里id或者name的值
当iframe没有id或者name属性时可以定位
wd.switch_to.frame(wd.find_element(By.TAG_NAME,'iframe'))

从iframe里面切换出来
wd.switch_to.default_content()

切换到不同的窗口,同一个浏览器
wd.switch_to.window(handle)

handle的取得:
for handle in wd.window_handles:
    wd.switch_to.widnow(handle):
    if '必应' in wd.title:
        break
为了回到原来的窗口,我们需要在切换之前先保存原来的handle
mainhandle=wd.current_window_handle
执行完别的窗口的操作后回到原来的窗口就可以
wd.switch_to.window(mainhandle)


3.常用工具类Select,ActionChains

对于select选择框,selenium专门提供了一个Select类
from selenium.webdriver.support.ui import Select

select = Select(wd.find_element(By.ID, "ss_single"))

s.select_by_value('1')
s.select_by_index(2)
s.select_by_visible_text('小雷老师')
s.deselect_by_index(1)
s.deselect_by_value('2')
s.deselect_by_visible_text('小雷老师')
s.deselect_all()

鼠标右键点击,双击,移动鼠标到某个元素,鼠标拖拽
可以通过Selenium提供的ActionChains类来实现
from selenium.webdriver.common.action_chains import ActionChains
ac = ActionChains(wd)
ac.move_to_element(
    wd.find_element(By.NAME,'tj_briicon')
).perform()

定位元素技巧
在chrome的console里使用
setTimeout(function(){debugger}, 5000)
然后在页面停住前找到隐藏的元素

4.切换到alert去操作

alert的弹出框如何点击
wd.switch_to.alert.accept()//点击确定
wd.switch_to.alert.dismiss()//点击取消
wd.switch_to.alert.text//获取对话框文本
alert=wd.switch_to.alert
alert.send_keys()
alert.accept()
alert.dismiss()

driver.get_window_size()//获取窗口大小
driver.set_window_size(x, y)//改变窗口大小
diver.title//获取当前窗口标题
diver.curent_url//获取当前窗口URL地址
driver.get_screenshot_as_file('1.png')//截屏
ele.send_keys(r'h:\g02.png')//上传文件


5.Xpath选择器
基本使用
wd.find_element(By.XPATH,'/html/body/div/select[@class="single_choice"]/option[2]')
//div 从当前节点开始找到所有div元素
//div//p 找到所有div元素里面的p元素

//div/p  找到所有div下面的直接子节点是p的元素 

//div/* div下面的所有子元素

//*[@id='west']  不管标签名字选取id为west的元素

//div[@class="single_choice"] 根据class选取div元素

//*[@multiple] 找到有属性multiple的元素

a[href*="mlitbeian"]  属性值包含某个字符串

a[href^="http"] 属性以http开头

a[href$="gov.cn"] 属性以gov.cn结尾

//*[contains(@style,'color')] 属性值style包含color

//*[starts-with(@style,'color')]  属性值style以color字符串开头

//*[starts-with(@class,'m')] 属性值class以m开头

//p[2]选择p类型的第2个子元素

//p[last()-1] 选择p类型的倒数第2个

//option[position()<=2] 或者 //option[postion()<3] 选取option的第一到第二个子元素

//option[position()=last()]

组选择:
//option | //h4   使用 | 号隔开

/..  可以用来表示某个元素的父节点
//*[@id="china"]/..

继续找上层父节点
//*[@id="china"]/../../..


选择 class 为 single_choice 的元素的所有后续兄弟节点 //*[@class='single_choice']/following-sibling::*
等同于CSS选择器 .single_choice ~ *


选择 class 为 single_choice 的元素的 所有 前面的兄弟节点,这样写
//*[@class='single_choice']/preceding-sibling::*

xpath 常见坑
当你要在一个element对象里再去找一个element对象时,要在最前面加上一个./

china = wd.find_element(By.ID, 'china')
elements = china.find_elements(By.XPATH, './/p')

不加的话相当于啊还是全文档去找的而不是china里面去找

    

  • 10
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值