Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器(包括PhantomJS,Chrome这些无界面的浏览器)。
Selenium 可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生。
Selenium 自己不带浏览器,不支持浏览器的功能,它需要与第三方浏览器结合在一起才能使用。但是我们有时候需要让它内嵌在代码中运行,所以我们可以用一个叫 PhantomJS 的工具代替真实的浏览器。
可以从 PyPI 网站下载 Selenium库https://pypi.python.org/simpl…
也可以用 第三方管理器 pip用命令安装(windows 环境):pip install selenium
Selenium 官方参考文档:http://selenium-python.readth…
火狐浏览器 geckdriver 下载地址:https://github.com/mozilla/geckodriver/releases
如果是 chromedriver 参见:https://segmentfault.com/a/1190000013940356
导入 webdriver
from selenium import webdriver
要想调用键盘按键操作需要引入keys包
from selenium.webdriver.common.keys import Keys
#设置路径
#driver = webdriver.Firefox(executable_path="C:\Python36\geckodriver.exe")
#创建firefox 参数
opt = webdriver.FirefoxOptions()
#创建无界面对象
driver = webdriver.Firefox(options=opt)
这里提到 切换fram
很多人在用selenium定位页面元素的时候会遇到定位不到的问题,明明元素就在那儿,用firebug也可以看到,就是定位不到,这种情况很有可能是frame在搞鬼(原因之一,改天专门说说定位不到元素,可能的一些原因及处理办法)。
frame标签有frameset、frame、iframe三种,frameset跟其他普通标签没有区别,不会影响到正常的定位,而frame与iframe对selenium定位而言是一样的,selenium有一组方法对frame进行操作。
driver.switch_to_frame() 这个方法也许以后不用了
一般写成 driver.swith_to.frame(‘frame的id’)
查找完成后记得用
driver.switch_to.default_content()
退出 不然会出错
get方法会一直等到页面被完全加载,然后才会继续程序,通常测试会在这里选择 time.sleep(2)
driver.get(“http://www.baidu.com/”)
主要是获取页面find_ 找元素
获取页面名为 wrapper的id标签的文本内容
data = driver.find_element_by_id(“wrapper”).text
打印数据内容
print data
打印页面标题 “百度一下,你就知道”
print driver.title
生成当前页面快照并保存
driver.save_screenshot(“baidu.png”)
id=“kw"是百度搜索输入框,输入字符串"长城”
driver.find_element_by_id(“kw”).send_keys(u"长城")
id="su"是百度搜索按钮,click() 是模拟点击
driver.find_element_by_id(“su”).click()
获取新的页面快照
driver.save_screenshot(“长城.png”)
获取当前页面Cookie
print driver.get_cookies()
ctrl+a 全选输入框内容
driver.find_element_by_id(“kw”).send_keys(Keys.CONTROL,‘a’)
ctrl+x 剪切输入框内容
driver.find_element_by_id(“kw”).send_keys(Keys.CONTROL,‘x’)
输入框重新输入内容
driver.find_element_by_id(“kw”).send_keys(“itcast”)
模拟Enter回车键
driver.find_element_by_id(“su”).send_keys(Keys.RETURN)
清除输入框内容
driver.find_element_by_id(“kw”).clear()
打印网页渲染后的源代码
print driver.page_source
获取当前url
print driver.current_url
关闭当前页面,如果只有一个页面,会关闭浏览器
driver.close()
关闭浏览器
driver.quit()
Selenium 的 WebDriver提供了各种方法来寻找元素,假设下面有一个表单输入框:
获取id标签值
element = driver.find_element_by_id(“passwd-id”)
获取name标签值
element = driver.find_element_by_name(“user-name”)
获取标签名值
element = driver.find_elements_by_tag_name(“input”)
也可以通过XPath来匹配
element = driver.find_element_by_xpath("//input[@id=‘passwd-id’]")
模拟豆瓣登录
#!/usr/bin/env python
# -*- coding:UTF-8 -*-
'''
@version: v2.7.13
@author: dongzh
@license: Apache Licence
@contact: 986042572@qq.com
@site: http://blog.csdn.net/hqzxsc2006
@software: PyCharm Community Edition
# @FileName: baidu.py.py
# @Time : 2018/9/20 14:29
'''
from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
def test():
url = "https://www.douban.com/"
# 创建firefox 参数
opt = webdriver.FirefoxOptions()
#设置成无界面
opt.set_headless()
#创建无界面对象
driver = webdriver.Firefox(options=opt)
driver.get(url=url)
#查找 id为form_email的id 并输入
driver.find_element_by_id("form_email").send_keys(用户名)
driver.find_element_by_id("form_password").send_keys(密码)
#找到验证码保存
driver.save_screenshot('运行中.png')
code = input('请输入验证码:')
#查找后输入验证码
driver.find_element_by_id('captcha_field').send_keys(code)
#找到按钮点击
driver.find_element_by_class_name("bn-submit").click()
time.sleep(3)
driver.save_screenshot('豆瓣登录完成.png')
#打印渲染过的源代码
#print(driver.page_source)
#driver.save_screenshot("豆瓣.png")
test()