python + selenium

来源:互联网 发布:淘宝交电费显示缴费中 编辑:程序博客网 时间:2024/05/18 20:08
selenium是一个模拟浏览器的类库,经常用来做自动化测试
python 可以直接使用安装目录下的Scripts\pip工具安装
以windows7 python3.4为例

运行cmd,
cd C:\Python34\Scriptspip install selenium
一键安装完成,python脚本使用import selenium即可开始使用

下面是官网的一个例子:
from selenium import webdriverfrom selenium.webdriver.common.keys import Keysdriver = webdriver.Firefox()driver.get("http://www.python.org")assert "Python" in driver.titleelem = driver.find_element_by_name("q")elem.send_keys("pycon")elem.send_keys(Keys.RETURN)assert "No results found." not in driver.page_sourcedriver.close()



模拟了用Firefox浏览器(本地电脑必须安装相关浏览器)
打开 www.python.org,然后输入框输入 pycon搜索的 流程

根据官方文档,目前支持的模拟浏览器有Firefox, Chrome, Ie and Remote.
selenium用webdriver模拟浏览器,get方法打开网页
接下来是获取页面元素
elem = driver.find_element_by_name("q")

看函数的命名我们知道是根据元素的name属性来获取

selenium提供了以下元素获取方式:

  • find_element_by_id
  • find_element_by_name
  • find_element_by_xpath
  • find_element_by_link_text
  • find_element_by_partial_link_text
  • find_element_by_tag_name
  • find_element_by_class_name
  • find_element_by_css_selector
    (注:这些方式均只能获取匹配的第一个元素)


    • find_element_by_id ,find_element_by_name,class_name,tag_name
  • 这些很简单,不多做解释,分别按元素的,id,name,class,tag属性来定位元素
    • find_element_by_xpath
    文档说明是 定位XML节点,HTML可以看做XML的实现,你可以使用这个函数将节点绝对定位(但是不建议),也可以关联到一个有id和name属性的节点,这个定位器也可以用id,name之外的属性来定位

    来看官网的例子:
    <html> <body>  <form id="loginForm">   <input name="username" type="text" />   <input name="password" type="password" />   <input name="continue" type="submit" value="Login" />   <input name="continue" type="button" value="Clear" />  </form></body><html>


    我们可以这样定位form:
    login_form = driver.find_element_by_xpath("/html/body/form[1]")login_form = driver.find_element_by_xpath("//form[1]")login_form = driver.find_element_by_xpath("//form[@id='loginForm']")


    1.绝对定位,HTML只要有轻微的改变就会失效
    2.找到HTML里的第一个form
    3.找到id=loginForm的form

    我们可以这样定位 username输入框:
    username = driver.find_element_by_xpath("//form[input/@name='username']")username = driver.find_element_by_xpath("//form[@id='loginForm']/input[1]")username = driver.find_element_by_xpath("//input[@name='username']")


    1.第一个form元素的input子元素,子元素有name=username的属性
    2. id=loginForm的form元素的第一个input子元素
    3.第一个name=username的input元素
    .....

    • find_element_by_link_text 和 find_element_by_partial_link_text
    这两个是获取超链接的方法,我们可以用这个获取指定的链接文本的元素,但是这个方法只会返回第一个匹配的元素,如果没有匹配,会抛出一个 NoSuchElementException的异常,partial官网没有多作说明,使用的应该是部分匹配,输入目标文本的子串匹配即可
    继续官网的例子
    <html> <body>  <p>Are you sure you want to do this?</p>  <a href="continue.html">Continue</a>  <a href="cancel.html">Cancel</a></body><html>



    我们这样获取 Continue超链接(注意:匹配的是a标签之间的文本内容)
    continue_link = driver.find_element_by_link_text('Continue')continue_link = driver.find_element_by_partial_link_text('Conti')


    • find_element_by_css_selector
    这个方式如果了解JQuery和CSS的人应该不陌生,使用CSS选择器,这个应该是最强大的功能了,详细可以查阅
    CSS选择器
    如果想获取多个元素,讲上面的选取方法(除去id唯一的方法),element单词后面加s即为多选的选择器,返回一个python list
    • find_elements_by_name
    • find_elements_by_xpath
    • find_elements_by_link_text
    • find_elements_by_partial_link_text
    • find_elements_by_tag_name
    • find_elements_by_class_name
    • find_elements_by_css_selector
    send_keys是模拟键盘的输入,
    特殊字符例如Enter,ALT,F1需要引入下面的模块,然后用相应的代码表示
    selenium.webdriver.common.keys

    官网地址:selenium-python.readthedocs.org
    翻译地址:https://github.com/StephinChou/seleniumDocument

    0 0
    原创粉丝点击