一、元素的定位,webdriver 提供了一系列的对象定位方法,常用的有以下几种
· id
· name
· class name
· link text
· partial link text
· tag name
· xpath
· css selector
<<<<<<<<<<<<<input id="kw" class="s_ipt" type="text" maxlength="100" name="wd"
autocomplete="off">>>>>>>>>>>
#coding=utf-8
from selenium import webdriver
browser = webdriver.Firefox()
browser.get("http://www.baidu.com")
#########百度输入框的定位方式##########
#通过 id 方式定位
browser.find_element_by_id("kw").send_keys("selenium")
#通过 name 方式定位
browser.find_element_by_name("wd").send_keys("selenium")
#通过 tag name 方式定位
browser.find_element_by_tag_name("input").send_keys("selenium")
#通过 class name 方式定位
browser.find_element_by_class_name("s_ipt").send_keys("selenium")
#通过 CSS 方式定位
browser.find_element_by_css_selector("#kw").send_keys("selenium")
#通过 xphan 方式定位
browser.find_element_by_xpath("//input[@id='kw']").send_keys("selenium")
############################################
browser.find_element_by_id("su").click()
time.sleep(3)
browser.quit()
添加等待时间
import time 智能等待:通过添加 implicitly_wait() 方法就可以方便的实现智能等待;implicitly_wait(30) 的用法应该比 time.sleep() 更智能,后者只能选择一个固定的时间的等待,前者可以 在一个时间范围内智能的等待。
浏览器最大化
driver.maximize_window() print "设置浏览器宽480、高800显示" driver.set_window_size(480, 800
操作浏览器的前进、后退
browser.back() 后退
browser.forward() 前进
操作测试对象,webdriver 中比较常用的操作对象的方法有下面几个
click 点击对象 send_keys 在对象上模拟按键输入 clear 清除对象的内容,如果可以的话 submit 清除对象的内容,如果可以的话 text 用于获取元素的文本信息 =============================== from selenium import webdriver import time driver = webdriver.Firefox() driver.get("http://www.baidu.com") driver.find_element_by_id("kw").clear() driver.find_element_by_id("kw").send_keys("selenium") time.sleep(2) #通过 submit() 来操作 driver.find_element_by_id("su").submit() time.sleep(3) driver.quit()
send_keys("xx") 用于在一个输入框里输入 xx 内容。
click() 用于点击一个按钮。
clear() 用于清除输入框的内容,比如百度输入框里默认有个“请输入关键
字”的信息,再比如我们的登陆框一般默认会有“账号”“密码”这样的默认信息。
clear 可以帮助我们清除这些信息。
submit 提交表单
我们把“百度一下”的操作从 click 换成 submit 可以达到相同的效果: from selenium import webdriver import time driver = webdriver.Firefox() driver.get("http://www.baidu.com") driver.find_element_by_id("kw").send_keys("selenium") time.sleep(2) #通过 submit() 来操作 driver.find_element_by_id("su").submit() time.sleep(3) driver.quit() =========================
text获取元素信息
text获取元素信息 #id = cp 元素的文本信息 data=driver.find_element_by_id("cp").text get_attribute 获取属性值 select = driver.find_element_by_tag_name("select") allOptions = select.find_elements_by_tag_name("option") for option in allOptions: print "Value is: " + option.get_attribute("value") option.click()
键盘输入乱码事件
selenium2 python 在 send_keys()中输入中文一直报错,其实前面加个小 u 就解决了:
coding=utf-8
send_keys(u"输入中文")
需要注意的是 utf-8并不是万能的,我们需要保持脚本、浏览器、程序三者编码之
间的转换;如果 utf-8不能解决,可以尝试 GBK 或修改浏览器的默认编码。
from selenium import webdriver from selenium.webdriver.common.keys import Keys #需要引入 keys 包 import os,time driver = webdriver.Firefox() driver.get("http://passport.kuaibo.com/login/?referrer=http%3A%2F%2Fwebcloud .kuaibo.com%2F") time.sleep(3) driver.maximize_window() # 浏览器全屏显示 driver.find_element_by_id("user_name").clear() driver.find_element_by_id("user_name").send_keys("fnngj") #tab 的定位相相于清除了密码框的默认提示信息,等同上面的 clear() driver.find_element_by_id("user_name").send_keys(Keys.TAB) time.sleep(3) driver.find_element_by_id("user_pwd").send_keys("123456") #通过定位密码框,enter(回车)来代替登陆按钮 driver.find_element_by_id("user_pwd").send_keys(Keys.ENTER) ''' #也可定位登陆按钮,通过 enter(回车)代替 click() driver.find_element_by_id("login").send_keys(Keys.ENTER) ''' time.sleep(3) driver.quit()
要想调用键盘按键操作需要引入 keys 包:
from selenium.webdriver.common.keys import Keys
通过 send_keys()调用按键:
send_keys(Keys.TAB) # TAB
send_keys(Keys.ENTER) # 回车
注意:这个操作和页面元素的遍历顺序有关,假如当前定位在账号输入框,按键
盘的 tab 键后遍历的不是密码框,那就不法输入密码。 假如输入密码后,还有
需要填写验证码,那么回车也起不到登陆的效果。
鼠标事件 重点
ActionChains 类
context_click() 右击
double_click() 双击
drag_and_drop() 拖动
1 from selenium import webdriver 2 from selenium.webdriver.common.action_chains import ActionChains 3 import time 4 driver = webdriver.Firefox() 5 driver.get("http://passport.kuaibo.com/login/?referrer=http%3A%2F%2Fwebcloud 6 .kuaibo.com%2F") 7 #登陆快播私有云 8 driver.find_element_by_id("user_name").send_keys("username") 9 driver.find_element_by_id("user_pwd").send_keys("123456") 10 driver.find_element_by_id("dl_an_submit").click() 11 time.sleep(3) 12 #定位到要右击的元素 13 qqq 14 =driver.find_element_by_xpath("/html/body/div/div[2]/div[2]/div/div[3]/table 15 /tbody/tr/td[2]") 16 #对定位到的元素执行鼠标右键操作 17 ActionChains(driver).context_click(qqq).perform() 18 #你也可以使用三行的写法,但我觉得上面两行写法更容易理解 19 chain = ActionChains(driver) 20 implement = 21 driver.find_element_by_xpath("/html/body/div/div[2]/div[2]/div/div[3]/table/ 22 tbody/tr/td[2]") 23 chain.context_click(implement).perform() 24 ''' 25 time.sleep(3) #休眠3秒 26 driver.close()

浙公网安备 33010602011771号