Selenium Webdriver查找页面元素及元素操作


1. Selenium WebDriver查找页面元素及元素操作

1.1. 元素常用定位方法

 Id  name  classname  xpath

  1. 通过id定位元素:find_element_by_id("id_vaule")
  2. 通过name定位元素:find_element_by_name("name_vaule")
  3. 通过tag_name定位元素:find_element_by_tag_name("tag_name_vaule")
  4. 通过class_name定位元素:find_element_by_class_name("class_name")
  5. 通过css定位元素:find_element_by_css_selector();css定位是比较灵活的
  6. 通过xpath定位元素:find_element_by_xpath("xpath")
  7. 通过link_text定位driver.find_element_by_link_text("新闻").click()
  8. 通过partial link_text 定位:driver.find_element_by_partial_link_text("").click()

 

1.1. 定位分类总结

 

  1. Idnameclass name:为元素属性定位
  2. tag_name:为元素标签
  3. link text partial link text:为超链接定位(a标签)
  4. Xpath:为元素路径
  5. Css :为css元素选择器定位

1.1. 定位元素

 

 

 

下面是百度输入框的html代码,可以通过firebug或者谷歌的审查元素得:

<input id="kw" class="s_ipt" autocomplete="off" maxlength="255" value="" name="wd">

 

 

1.1.1. 通过id定位

 

则百度的输入框即可表示为:find_element_by_id(kw1)

 

1.1.2. 通过name定位:

 

则可以表示为:find_element_by_name(wd)

 

1.1.3. 通过class_name定位元素:

 

driver.find_element_by_class_name("s_ipt")

 

 

1.1.1. 通过tag_name定位:

 

input其实就是tag_name(标签名),

 

同样也可以表示成:find_element_by_tag_name("input")

 

返回:符合条件的第一个标签

 

可见仅仅通过标签名去定位时,一般一种标签在一个页面里面会出现不止一次甚至大量出现,这种定位方式的作用不是很大,所以用的也就比较少

 

1.1.2. 通过css定位元素:

 

Id>类选择器>标签选择器

 

cssSelector这种元素定位方式跟xpath比较类似,但执行速度较快,而且各种浏览器对它的支持都相当到位

 

一般class是用.标记,id是用#标记,标签名直接写具体标签名就好

 

find_element_by_css_selector("#su")

 

find_element_by_css_selector(".s_ipt")

 

find_element_by_css_selector("[name=wd]"

 

 

1.1.1. 通过xpath定位元素:

 

XPath是一种在XML文档中定位元素的语言。因为HTML可以看做XML的一种实现,所以selenium用户可是使用这种强大语言在web应用中定位元素。

 

XPATH的值可以通过firebug或者谷歌的审查元素中:

 

右键功能:复制XPATH即可获得。

 

例子:

 

driver.find_element_by_xpath(".//input[@id='kw']")

 

driver.find_element_by_xpath(".//*[@id='kw']")

 

其中的标签名input也可以用*来代替,而且只要是在该标签内,任意属性都可以

 

 

1.1.1. 通过link_textpartial_link_text定位:

 

这两种定位方式是专门用于定位超链接的,也就是对应html页面中的<a>标签,括号里传的值就是a标签中的超链接文字,两者的区别在于一个是完整的超链接文字,一个是可以只写部分超链接文字。

 

 

比如点击百度首页中右上角的新闻超链接,可以这样去定位:

 

driver.find_element_by_link_text("新闻").click()

 

driver.find_element_by_partial_link_text("").click()

 

 

 

鼠标事件和键盘事件

 

https://www.cnblogs.com/mashuqi/p/10442150.html

 

1.1. 简单元素操作

clear()清除文本

send_keys(*value) 模拟按键输入

click()单击元素

size  返回元素的尺寸

text 获取元素的文本

get_attribute(name)获取属性值

 

is_displayed()设置该元素是否可见 判断元素是否可见 是否可用 is_enable()

selenium.common.exceptions.StaleElementReferenceException: Message: The element reference of <a class="mnav" href="http://news.baidu.com" name="tj_trnews"> is stale; either the element is no longer attached to the DOM, it is not in the current frame context, or the document has been refreshed

1. 键盘事件---(了解)

 

 send_keys()模拟键盘输入

from selenium.webdriver.common.keys import Keys

 

 send_keys(Keys.BACK_SPACE) 删除键

  * send_keys(Keys.SPACE) 空格键(Space)

  * send_keys(Keys.TAB) 制表键(Tab)

  * send_keys(Keys.ESCAPE) 回退键(Esc

  * send_keys(Keys.ENTER) 回车键(Enter

  * send_keys(Keys.CONTROL,'a') 全选(Ctrl+A

  * send_keys(Keys.CONTROL,'c') 复制(Ctrl+C

  * send_keys(Keys.CONTROL,'x') 剪切(Ctrl+X

  * send_keys(Keys.CONTROL,'v') 粘贴(Ctrl+V

  * send_keys(Keys.F1) 键盘 F1

  ……

  * send_keys(Keys.F12) 键盘 F12

1. 设置元素等待

Selenium显示等待和隐式等待的区别
1、selenium的显示等待
原理:显示等待,就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到,那么久跳出Exception
(简而言之,就是直到元素出现才去操作,如果超时则报异常)

2、selenium的隐式等待
原理:隐式等待,就是在创建driver时,为浏览器对象创建一个等待时间,这个方法是得不到某个元素就等待一段时间,直到拿到某个元素为止。

注意:在使用隐式等待的时候,实际上浏览器会在你自己设定的时间内部不断的刷新页面去寻找我们需要的元素

3、笨方法等待(死等)
使当前线程进入等待,time.sleep();这种等待属于死等,很容易让线程挂掉,使程序抛异常,所以要慎用此方法

1.1. 显式等待

element=WebDriverWait(driver,timeout, poll_frequency=0.5,ignored_exceptions=None).until(

        EC.presence_of_element_located((By.ID, "kw"))

)

driver  浏览器驱动

timeout  最长超时时间  默认以秒为单位

 poll_frequency=0.5  步长

ignored_exceptions 超时后的异常信息  默认抛noSuchElementException

EC.presence_of_element_located((By.ID, "kw")) 判断元素是否被加载在dom树中,不代表他一定可见。

 

1.1. 隐式等待

含义:通过一定时长等待,如果超出设置的时长元素还没有被加载,抛出NosuchException.

# 设置隐式等待为 10

driver.implicitly_wait(10)

1.1. sleep休眠方法

Time.sleep(1)

1. 浏览器的基本操作

选择浏览器: driver = webdriver.Firefox()

打开url: driver.get(self.base_url + " www.baidu.com")

前进/后退: driver.forward()/driver.back()

刷新: driver.refresh()

最大化:browser.maximize_window()

返回当前页面标题:print(driver.title)

返回当前页面urlprint(driver.current_url)

返回当前浏览器的所有窗口:driver.window_handles

返回当前浏览器的窗口句柄:driver.current_window_handle

选择窗口: driver.switch_to_window(window_name)

对话框操作: driver.switch_to_alert() #选择窗口对象

#浏览器最大化

driver.maximize_window()

#设置浏览区宽高

driver.set_window_size(480, 800)

截取当前页面: driver.get_screenshot_as_file("C:/Users/Administrator/Desktop/selenium/baidu.png")

关闭浏览器: driver.quit()/driver.close()

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM