Selenium学习笔记-webDriver API

定位元素

web Driver提供了8种页面元素定位的方式,在此总结:

ID

HTML规定id属性在文档中必须是唯一的,web Driver提供的id定位就是通过元素的 id属性来查找元素。
比如说我们要获取一下百度的首页的输入框和搜索按键:

# coding = utf-8
from selenium import webdriver
browser = webdriver.Firefox ()
browser.get("http://www.baidu.com")
browser.find_element_by_id("kw").send_keys("selenium")
browser.find_element_by_id("su").click()
browser.quit()

对以上代码做以解释:

  • coding=utf-8:指定编码格式
  • from selenium import webdriver:需要包含selenium里的webdriver模块
  • browser = webdriver.Firefox ():需要操纵那个浏览器,这里使用firefox,如果使用chrome需要下载chrome的webdriver。
  • browser.get(“http://www.baidu.com“):获取那个页面
  • browser.find_element_by_id(“kw”):根据id获取页面元素,kw是百度输入框的id
  • browser.find_element_by_id(“su”):根据id获取页面元素,su是百度首页搜索按钮

如何得知页面的id呢,在chrome或是Firefox都有开发者模式,可以帮助我们定位元素非常好用。

name

HTML规定name来指定元素的名称,在当前页面不一定唯一。

browser.find_element_by_name("wd")

class

HTML规定class来指定元素的类名。

browser.find_element_by_class_name("s_ipt").send_keys("selenium")

tag定位

HTML的本质就是通过tag来定义实现不同的功能,每一个元素本质上是一个tag,由于每一个文档里tag的重复率会特别高,并不会助于我们定位某一个元素。比如input,每个HTML文档里都会有很多input标签。

browser.find_element_by_tag_name("input").send_keys("selenium")

link用来定位文本链接。

browser.find_element_by_link_text("新闻").click()

是对link的一种补充,有些文本链接比较长,可以取文本链接的一部分,就可以定位到该元素。

browser.find_element_by_partial_link_text("hao").click()
browser.find_element_by_partial_link_text("123").click()

Xpath

Xpath是一种在XML文档中定位元素的语言,所以可以在html使用这种语言在web中定位元素。

利用绝对路径:
browser.find_element_by_xpath("/html/body/div[1]/div[1]/div/div[1]/div/form/span[1]/input").send_keys("end")

在Firebug前端调试工具和Firepath插件可以帮助我们获得元素的xpath。

CSS定位

CSS使用选择器来为页面元素绑定元素。

通过id定位:
browser.find_element_by_css_selector("#kw").send_keys("selenium")
通过class属性定位:
browser.find_element_by_css_selector(".s_ipt").send_keys("selenium")

控制浏览器

控制浏览器大小

dirver.set_window_size(480,800)

浏览器最大化

browser.maximize_window() #将浏览器最大化显示

控制浏览器后退,前进

driver.back()
driver.forward()

模拟浏览器刷新

driver.refresh()

简单元素操作

  • clear():清除文本
  • send_keys(“”):模拟按键输入
  • click():单击元素
  • submit():提交表单,就好像我们填写表单时敲得回车

鼠标事件

  • perform():执行所有ActionChains中存储的行为
  • context_click():右击
  • double_click():双击
  • drag_and_drop():拖动
  • move_to_element():鼠标悬停

键盘事件

  • send_keys(Keys.BACK_SPACE)
  • send_keys(Keys.SPACE)
  • send.keys(Keys.TAB)
  • send_keys(Keys.ESCAPE)
  • send_keys(Keys.ENTER)
  • send_keys(Keys.CONTROL,‘a’)
  • send_keys(Keys.CONTROL,‘c’)
  • send_keys(Keys.CONTROL,‘x’)
  • send_keys(Keys.CONTROL,‘v’)
  • send_keys(Keys.CONTROL.F1)

设置元素等待

智能等待
通过添加implicitly_wait() 方法就可以方便的实现智能等待;implicitly_wait(30)的用法应该比time.sleep() 更智能,后者只能选择一个固定的时间的等待,前者可以在一个时间范围内智能的等待。

selenium.webdriver.remote.webdriver.implicitly_wait(time_to_wait)

等待3秒

time.sleep(3)

打印辅助信息

print driver.title # 把页面title 打印出来
print driver.current_url #打印url

多表单切换

switch_to_frame()把当前定位的主体切换了frame里。。
frame中实际上是嵌入了另一个页面,而webdriver每次只能在一个页面识别,因此才需要用switch_to_frame方法去获取frame中嵌入的页面,对那个页面里的元素进行定位。
switch_to_default_content:从frame中嵌入的页面里跳出,跳回到最外面的原始页面中。

上传文件

上传文件:

#coding=utf-8
from selenium import webdriver
import os,time
driver = webdriver.Firefox()
#脚本要与upload_file.html 同一目录
file_path = 'file:///' + os.path.abspath('upload.html')
driver.get(file_path)
#定位上传按钮,添加本地文件
driver.find_element_by_name("file").send_keys('D:\\PycharmProjects\\test\\upload.txt')
time.sleep(2)
driver.quit()

控制浏览器滚动

#coding=utf-8
from selenium import webdriver
import time
#访问百度
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
#搜索
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
time.sleep(3)
#将页面滚动条拖到底部
js="var q=document.documentElement.scrollTop=10000"
driver.execute_script(js)
time.sleep(3)
#将滚动条移动到页面的顶部
js="var q=document.documentElement.scrollTop=0"
driver.execute_script(js)
time.sleep(3)
driver.quit() 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值