selenium的驱动方法
先说驱动,若没有驱动,则万事不能开始。看下面代码:
驱动下载及配置请看第一篇相关博客:
http://blog.csdn.net/s740556472/article/details/78150666
#导入selenium下的webdriver
from selenium import webdriver
#IE的驱动位置
iedriver = "D:\python3.6\Scripts\IEDriverServer.exe"
#加载ie驱动的方法
driver = webdriver.Ie(iedriver)
#加载Chrome驱动的位置
chromedriver = "D:\python3.6\Scripts\chromedriver.exe"
#将Chrome的驱动通过路径直接放入方法中
driver = webdriver.Chrome(chromedriver)
驱动成功后,通过下面的方法调用浏览器打开对应的网址:
#访问对应的地址,例如打开百度,此时一般
会弹出cmd黑框,那个是驱动的黑框,不要关闭
driver.get('www.baidu.com')
各种API
获取html源代码中的焦点
所有方法都是通过driver作为对象而进行驱动的,所以要是模块化方法,必须将driver传入其中,例如下面:
#登录方法
def login(driver):
#通过节点名称获取焦点
driver.find_element_by_name('userName')
#通过节点id获取焦点
driver.find_element_by_id('userName')
#通过xpath获取焦点
driver.find_element_by_xpath('/html/frameset/frameset/frame[1]')
这里要说的是xpath,我们可以通过F12调用浏览器自带的工具取查看,右键节点->copy->copy xpath 即可。
捕获焦点点击按钮
#点击添加按钮
driver.find_element_by_name('buttonInsert').click()
#各种组合都可以
driver.find_element_by_id('buttonInsert').click()
driver.find_element_by_xpath('/xxx/xxx/xx').click()
捕获焦点填充值
结合上面的方法,获取焦点后填充值的api
#方法一:
a = driver.find_element_by_name('userName')
a.send_keys('root')
#方法二:
driver.find_element_by_name('userName').send_keys('root')
切换Iframe
#通过xpath加载frame
frameset = driver.find_element_by_xpath('/html/frameset/frameset/frame[1]')
#跳入frame中
driver.switch_to.frame(frameset)
跳出iframe
#回到默认的frame
driver.switch_to.default_content()
#回到父级的frame
driver.switch_to.parent_frame()
触发双击事件
#鼠标事件,导入ActionChains
from selenium.webdriver.common.action_chains import ActionChains
#分组双击
jobGroup = driver.find_element_by_name('jobDetailDto.jobGroup')
ActionChains(driver).double_click(jobGroup).perform()
下拉框选项
#下拉框
from selenium.webdriver.support.select import Select
#定位到codeselect下
codeselect = driver.find_element_by_name('codeselect')
#获取焦点后,根据值点击对应的选项
Select(codeselect).select_by_value('xxx')
对浏览器新打开的窗口进行焦点获取
#新弹出来的框进行查询点击操作
#获取所有窗口的handle,若handle不是当前窗口则切换
handles = driver.window_handles
for handle in handles:
if handle != driver.current_window_handle:
driver.switch_to_window(handle)
break
若需要切回其实的窗口,执行下面语句即可:
driver.switch_to_window(handles[0])
Tips
若执行脚本的过程中,提示找不到元素对应的焦点,这种错误多数出在:
frame未进入正确,请检查当前想获取节点处于哪个frame下,先进行跳转frame,在进行获取元素焦点的操作
检查是否是新弹出来的浏览器窗口,若是,则需要将handle切入到最新浏览器中获取元素焦点进行操作
当通过名字获取不到对应元素焦点的时候,可以考虑换一种方式获取,我在写脚本的时候发现,xpath这种方式获取元素焦点是比较靠谱的,有的时候通过by_name获取不到对应元素的焦点。
细心、耐心,一步一步来,最终将脚本的每一步执行想成人去操作浏览器即可