1. 安装selenium
首先确保python安装成功,输入python -V
在windows下使用pip安装selenium,详情如图所示:
在ubuntu下使用pip install selenium
2. 在ubuntu下使用selenium打开firefox浏览器
from selenium import webdriver b = webdriver.Firefox()
运行提示错误:
错误原因是因为没有安装firefox的selenium驱动程序
下载geckodriver并安装即可
下载地址为https://github.com/mozilla/geckodriver/releases
下载后解压并放在/usr/local/bin/下即可
如图所示:
再次运行代码,成功启动firefox浏览器
3.ubuntu下使用selenium打开chrome浏览器
代码如下所示:
from selenium import webdriver b = webdriver.Chrome()
运行报错如下:
去 https://sites.google.com/a/chromium.org/chromedriver/home下载对应的驱动程序
4. 使用selenium定位元素
例如:
from selenium import webdriver b = webdriver.Firefox() b.get("http://www.baidu.com") if "baidu" in b.current_url: ele = b.find_element_by_id("kw") ele.send_keys("selenium") ele.submit()
该代码完成了打开火狐浏览器,进入百度,并搜索selenium回车
注意:
查找元素可以使用更多的方法
b.find_element_by_id()
b.find_element_by_tag_name()
b.find_element_by_class_name()
b.find_element_by_name()
b.find_element_by_link_text()
b.find_element_by_partial_link_text()
b.find_element_by_css_selector()
b.find_element_by_xpath()
浏览器回退的方法:
b.back()
清空输入框的方法:
ele.clear()
5. selenium鼠标和键盘事件
例如:进入麦子学院的Python Web 开发页面
# /usr/bin/python # -*- encoding:UTF-8 -*- from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains #打开浏览器 b = webdriver.Firefox() #窗口最大化 b.maximize_window() #访问麦子学院 b.get('http://www.maiziedu.com') #查找元素 ele = b.find_element_by_link_text('Python Web 开发') #执行动作 ActionChains(b).move_to_element(ele).perform() ele.click()
注意:
常用的鼠标事件还有
ActionChains(b).hold_and_click(ele).perform() 单击事件
ActionChains(b).context_click(ele).perform() 右击事件
ActionChains(b).double_click(ele).perform() 双击事件
ActionChains(b).drag_and_drop(ele).perform() 拖动事件
ActionChains(b).move_to_element(ele).perform() 停留事件
例如:selenium的键盘事件
# /usr/bin/python # -*- encoding:UTF-8 -*- from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.keys import Keys #打开firefox浏览器 driver = webdriver.Firefox() #firefox浏览器窗口最大化 driver.maximize_window() #打开麦子学院 driver.get('http://www.maiziedu.com') #获取页面中的搜索框 ele_search = driver.find_element_by_id('data-search') #执行相关动作 ele_search.clear() ele_search.send_keys('python1') ele_search.send_keys(Keys.BACKSPACE) #ele_search.send_keys(Keys.CONTROL, 'a') #ele_search.send_keys(Keys.CONTROL, 'x') #ele_search.send_keys(Keys.CONTROL, 'v') ele_search.send_keys(Keys.ENTER)
6. 使用selenium登录无验证码网站
例如登录github,代码如下:
# !/usr/bin/python # -*- coding:UTF-8 -*- from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.action_chains import ActionChains #基本变量 url = 'http://github.com' username = 'liudaoqiang' password = '***********' #打开firefox浏览器 driver = webdriver.Firefox() #窗口最大化 driver.maximize_window() #打开网页 driver.get(url) #找到对应的元素 ele_login = driver.find_element_by_link_text('Sign in') #执行点击动作 ele_login.click() #用户名输入框 ele_username = driver.find_element_by_id('login_field') ele_username.send_keys(username) #密码输入框 ele_password = driver.find_element_by_id('password') ele_password.send_keys(password) #提交按钮 ele_submit = driver.find_element_by_name('commit') ele_submit.click()
7. 实现多窗口切换
例如:
# !/usr/bin/python # -*- coding:UTF-8 -*- from selenium import webdriver keyword = '汉广'.decode('UTF-8') #打开firefox浏览器 driver = webdriver.Firefox() #最大化浏览器窗口 driver.maximize_window() #进入百度 driver.get('http://www.baidu.com') #输入关键字 ele_input = driver.find_element_by_id('kw') ele_input.send_keys(keyword) #确认搜索 ele_submit = driver.find_element_by_id('su') ele_submit.click() #找到想要的网页 ele_hangreat = driver.find_element_by_partial_link_text('中国汉广集团') ele_hangreat.click() #实现多窗口的切换 driver.switch_to_window(driver.window_handles[0]) #退出当前窗口 driver.close() #退出firefox driver.quit()
常用API如下:
driver.switch_to_window(window_handle) 窗口切换
driver.window_handles 窗口句柄列表
driver.current_window_handle 当前窗口句柄
8. 等待的方法
time.sleep(minutes) 延时方式
implicitly_wait(minutes) 全局的发生异常或错误的持续检验时间
WebDriverWait(driver, minutes, func) 局部的执行一个方法的最长超时时间
例如:
# !/usr/bin/python # -*- coding:UTF-8 -*- from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait def get_hangreat_link(driver, times): return WebDriverWait(driver, times).until(lambda driver: driver.find_ele ment_by_partial_link_text('中国汉广集团')) keyword = '汉广'.decode('UTF-8') #打开firefox浏览器 driver = webdriver.Firefox() #最大化浏览器窗口 driver.maximize_window() #进入百度 driver.get('http://www.baidu.com') #输入关键字 ele_input = driver.find_element_by_id('kw') ele_input.send_keys(keyword) #确认搜索 ele_submit = driver.find_element_by_id('su') ele_submit.click() #找到想要的网页 #ele_hangreat = driver.find_element_by_partial_link_text('中国汉广集团') ele_hangreat = get_hangreat_link(driver, 10) ele_hangreat.click() #实现多窗口的切换 driver.switch_to_window(driver.window_handles[0]) #退出当前窗口 #driver.close() #退出firefox #driver.quit()
9. 处理alert对话框的alter对象
alter = driver.switch_to_alert() 得到alter对象
alter.accept() 确认
alter.dismiss() 取消
alter.send_keys() 对于可输入对话框输入文字