selenium教程:
http://www.testclass.net/selenium_python
一、selenium安装
1、安装:
pip install selenium
2、安装后,出现下图错误:
解决办法:安装Selenium3浏览器驱动,并设置环境变量。
驱动下载路径: http://chromedriver.storage.googleapis.com/index.html 或 http://npm.taobao.org/mirrors/chromedriver/ (版本必须对应)
将下载的zip包解压得到一个chromedriver.exe文件,该文件仅需放到Chrome浏览器安装目录下,无需安装。如下图,我的Chrome浏览器安装在C:\Program Files (x86)\Google\Chrome\Application目录,将解压后的chromedriver.exe驱动文件复制到该目录下即可。
然后将浏览器环境变量添加到path:打开开始菜单->计算机->属性->高级系统设置->高级->环境变量->系统变量里的path->编辑->在变量值的最后面添加;C:\Program Files (x86)\Google\Chrome\Application->确定保存配置。
若仍不行,则将chromedriver.exe复制到Python安装目录中与python.exe同级的目录中。
若还不行,则在打开Google浏览器的代码中将webdriver.Chrome()写成webdriver.Chrome(executable_path = ‘C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe’)即可。
二、selenium常用方法
1、打开浏览器,加载页面:
from selenium import webdriver
driver = webdriver.Firefox() # Firefox浏览器
driver = webdriver.Chrome() # Chrome浏览器
driver.get(www.baidu.com) # 打开百度
2、元素定位:
Selenium提供了8种定位方式:id,name,class name,tag name,link text,partial link text,xpath,css selector
这8种定位方式在Python selenium中所对应的方法为:find_element_by_id(),find_element_by_name(),find_element_by_class_name(),find_element_by_tag_name(),find_element_by_link_text(),find_element_by_partial_link_text(),find_element_by_xpath(),find_element_by_css_selector()
例如:
elem = driver.find_element_by_id('search') #找到id为search的元素
xpath = ""
title = driver.find_element_by_xpath(xpath).text #通过xpath找到一个元素的text
#同样可以定位一组元素,注意是elements,结果为一个list
texts = driver.find_elements_by_xpath('//div/h3/a')
3、浏览器操作:
driver.back() # 后退
driver.forward() # 前进
driver.quit() # 关闭所有窗口
driver.close() # 关闭单个窗口
driver.refresh() # 刷新页面
4、WebDriver方法:
input = driver.find_element_by_id("kw")
input.clear() # 清除文本
input.send_keys("selenium") # 模拟按键输入,在输入框中输入值
driver.find_element_by_id("su").click() # 单击元素
attribute = driver.find_element_by_id("tag_a").get_attribute('href') # 获取标签属性
5、键盘操作:
# 删除多输入的一个字符
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
# ctrl+a 全选输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'a')
# 通过回车键来代替单击操作
driver.find_element_by_id("su").send_keys(Keys.ENTER)
6、设置元素等待:
WebDriverWait类是由WebDirver 提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
element = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, "kw")))
element.send_keys('selenium')
driver.quit()
7、表单切换:
比如126邮箱登录,想要操作登录框必须要先切换到登录框的iframe表单。
from selenium import webdriver
driver = webdriver.Chrome() # 打开谷歌浏览器
driver.get("http://www.126.com") # 打开网站
driver.switch_to.frame('x-URS-iframe') # 切换到登录表单
driver.find_element_by_name("email").clear() # 清空账号框
driver.find_element_by_name("email").send_keys("username") # 输入账号
driver.find_element_by_name("password").clear() # 清空密码框
driver.find_element_by_name("password").send_keys("password") # 输入密码
driver.find_element_by_id("dologin").click() # 点击登录
driver.switch_to.default_content() # 跳回最外层页面
driver.quit() # 关闭所有窗口
8、窗口切换:
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
# 获得当前窗口句柄
sreach_windows = driver.current_window_handle
driver.find_element_by_link_text('登录').click() #点击链接文本“登录”
driver.find_element_by_link_text("立即注册").click()
# 获得当前所有打开的窗口的句柄
all_handles = driver.window_handles
# 进入注册窗口
for handle in all_handles:
if handle != sreach_windows:
driver.switch_to.window(handle) #用于切换到相应的窗口
print('now register window!')
driver.find_element_by_name("account").send_keys('username')
driver.find_element_by_name('password').send_keys('password')
time.sleep(2)
driver.quit()
9、警告框处理:
# switch_to_alert()方法获取当前页面上的警告框,accept()方法接受警告框
driver.switch_to.alert.accept()
当然,selenium还有文件上传、获取cookie、执行js等方法,如果需要可以搜索 http://www.testclass.net/selenium_python 。