一、获取元素

1)通过谷歌浏览器自动的工具访问百度首页,我们可以看到,页面上的元素都是由一行行的代码组成的,它们之间有层级地组织起来,每个元素之间都有不同的标签和值,我们可以通过这些不同的标签和值来找到这些元素。

如下图所示,通过定位工具,我们定位到“百度一下”搜索框的元素了。

2)webdriver提供了八种定位方式,分别是

  • 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

二、定位元素

1)使用find_element_by_id 方式定位元素

根据上图所示,可以明显的知道“百度一下”搜索框的id=“su”,所以可以得知 driver.find_element_by_id(“su”)

2)使用find_element_by_name方式定位元素

HTML规定name来指定元素的名称,因此它的作用更像是人名,name的值在页面中可以不唯一,通过定位工具定位到百度搜索输入框的name值为“wd”

所以可以得知driver.find_element_by_name(“wd”)

3)使用find_element_by_xpath方式定位元素

这里要介绍一下如何获取页面元素的xpath路径的方法,如果你是大神可以自己写,如果跟作者一样很喽,可以通过开发者工具获取,选择元素右击->Copy->Copy Xpath,可以直接拷贝到xpath路径.

所以可以得知driver.find_element_by_xpath(“//*[@id=‘kw’]”)

4)使用find_element_by_link_text和find_element_by_partial_link_text方式定位元素

通过文字链接来定位元素,他们两个很相像,功能也很类似,但是他们一个是匹配全部,一个是匹配部分,可以参考下图。

所以可以得知driver.find_element_by_link_text(“贴吧”)

三、实例

参考了这么多方法来定位元素,下面来看看这个登录百度贴吧的实例

 #coding=utf-8
from selenium import webdriver
import time driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.find_element_by_name("tj_trtieba").click()
driver.find_element_by_name("kw1").send_keys("三星S8")
time.sleep(2)
driver.find_element_by_link_text("进入贴吧").click()
time.sleep(2)
driver.find_element_by_xpath("//*[@id='com_userbar']/ul/li[4]/div/a").click()
time.sleep(1)
driver.find_element_by_id("TANGRAM__PSP_11__footerULoginBtn").click()
time.sleep(2)
driver.find_element_by_id("TANGRAM__PSP_11__userName").clear()
driver.find_element_by_id("TANGRAM__PSP_11__userName").send_keys("xxxxx")
time.sleep(2)
driver.find_element_by_id("TANGRAM__PSP_11__password").clear()
driver.find_element_by_id("TANGRAM__PSP_11__password").send_keys("xxxxx")
time.sleep(2)
driver.find_element_by_id("TANGRAM__PSP_11__submit").click()
driver.quit()

下面再推荐一个新手练习定位元素的网站:http://sahitest.com/demo/index.htm



最新文章

  1. 读取Simulink中Dataset类型的数据
  2. (01-02) odoo8.0_Ubuntu14.04_nginx反代理设置
  3. (转)java中的进程与线程
  4. java jps命令
  5. easyui 中重复加载两次url
  6. Android ADT中增大AVD内存后无法启动:emulator failed to allocate memory 8 (转)
  7. 在CentOS 7中安装与配置Tomcat-8方法
  8. 怎样用JS来添加CSS样式
  9. UVA 11928 The Busy Dog
  10. Entity Framework技巧系列之十 - Tip 37 - 41
  11. Unbutu14.04 切换ROOT用户后无法启用音频
  12. Python中List和Tuple类型
  13. confluence搭建详情
  14. shc/unshc加/解密shell脚本
  15. Crypto支付宝模块的安装
  16. .htaccess实现php网站伪静态
  17. mysql 优化配置参数(my.cnf)
  18. Struts2学习:Action使用@Autowired注入为null的解决方案
  19. git删除提交历史
  20. [代码]--IIS发布网站浏览之后看到的是文件目录 & Internal Server Error 处理程序“ExtensionlessUrlHandler-ISAPI-4.0_64bit”在其模块列表中有一个错误模块“IsapiModule” 解决方法 & App_global.asax.pduxejp_.dll”--“拒绝访问。 ”

热门文章

  1. nodejs + webpack4 + babel6 结合写Chrome浏览器插件记录(2)
  2. Android 隐藏顶部菜单栏
  3. 19.yield和send的区别
  4. pytorch中DataLoader, DataSet, Sampler之间的关系
  5. 记springboot + MP +Hikari动态数据源配置
  6. vue-cli项目中使用axios
  7. VS Code 解决 因为在此系统上禁止运行脚本
  8. MySQL之非空约束(NOT NULL)
  9. Jmeter基础学习-下载及安装
  10. Redis 千万不要乱用KEYS命令,不然会挨打的