Damn1t
for you I bleed myself dry
FRIENDS
baidu

selenium学习笔记

2019-06-22 selenium

selenium学习笔记

selenium可以模拟浏览器登录,且提供了很多api方便用户调用

常用api

浏览器操作

1
2
3
4
5
6
7
8
# 刷新
driver.refresh()

# 前进
driver.forward()

# 后退
driver.back()

获取标签元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 通过ID定位目标元素
driver.find_element_by_id('i1')

# 通过className定位目标元素
driver.find_element_by_class_name('c1')

# 通过name属性定位目标元素
driver.find_element_by_name('n1')

# 通过Xpath定位目标元素
driver.find_element_by_xpath('//*[@id="i1"]')

# 通过css Selector定位目标元素
driver.find_element_by_css_selector('#i1')

# 通过标签名称定位(注:在一个页面中,标签一定会重复,所以不用这个来进行定位)
driver.find_element_by_tag_name('input')

# 通过标签中的文本查找元素
driver.find_element_by_link_text('登录')

# 通过标签中文本的模糊匹配查找
driver.find_elements_by_partial_link_text('录')

获取标签元素常用的一共有8种定位方式,而Selenium实际提供了18种定位方式,还有8种是上面的复数形式,这里就不一一介绍了,实际运用中并不常用,还有2种实际上是这上面所说16种的底层封装。参数化的一种调用方式而已。

Cookie操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 根据cookieKey,获取cookie信息
cookie = driver.get_cookie('cookieKey')

# 获取所有cookie信息
cookies = driver.get_cookies()

# 添加cookie,严格按照格式添加,cookie的key为name,value为value
driver.add_cookie({'name':'tmp','value':'123123123'})

# 删除所有cookie信息
driver.delete_all_cookies()

# 根据cookieKey删除对应cookie
driver.delete_cookie('UiCode')

窗口操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 获取当前浏览器的大小
driver.get_window_size()

# 通过像素设置浏览器的大小
driver.set_window_size('width','height')

# 获取当前窗口针对于Windows的位置的坐标x,y
driver.get_window_position()

# 设置当前窗口针对Windows的位置,x,y
driver.set_window_position(20,20)

# 最大化当前窗口,不需要传参
driver.maximize_window()

# 返回当前操作的浏览器句柄
driver.current_window_handle

# 返回所有打开server的浏览器句柄
driver.window_handles

截取当前页面

1
2
3
4
5
# 获取当前页面的二进制图片数据,需要自己去写入文件
driver.get_screenshot_as_png()

# as_png的上层封装,只需要传入图片名称自动写成图片
driver.get_screenshot_as_file('fileName.png')

执行JavaScript语句

1
2
3
4
5
6
7
# 执行JavaScript语句
driver.execute_script('JavaScript Commond')

# 例:
# 通过js来操作滚动条
# 参数1:x 参数2: y
window.scrollTo(100,400);

关闭与退出

1
2
3
4
5
# 当开启多个时,关闭当前页面
driver.close()

# 退出并关闭所有页面驱动
driver.quit()

其他

1
2
3
4
5
6
7
8
9
10
11
# 返回页面源码
driver.page_source

# 返回tag标题
driver.title

# 返回当前Url
driver.current_url

# 获取浏览器名称 如:chrome
driver.name

ElementApi接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 根据标签属性名称,获取属性value
element.get_attribute('style')

# 向输入框输入字符串 如果input的type为file类型 可以输入文件绝对路径上传文件
element.send_keys()

# 清除文本内容
element.clear()

# 鼠标左键点击操作
element.click()

# 通过属性名称获取属性
element.get_property('id')

# 返回元素是否可见 True or False
element.is_displayed()

# 返回元素是否被选中 True or False
element.is_selected()

# 返回标签元素的名字
element.tag_name

# 获取当前标签的宽和高
element.size

# 获取元素的文本内容
element.text

# 模仿回车按钮 提交数据
element.submit()

# 获取当前元素的坐标
element.location

# 截取图片
element.screenshot()

常见异常

  NoSuchElementException:没有找到元素

  NoSuchFrameException:没有找到iframe

  NoSuchWindowException:没找到窗口句柄handle

  NoSuchAttributeException:属性错误

  NoAlertPresentException:没找到alert弹出框

  ElmentNotVisibleException:元素不可见

  ElementNotSelectableException:元素没有被选中

  TimeoutException:查找元素超时

api: https://selenium-python.readthedocs.io/api.html

应用

1.headless下的截屏

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import os
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.firefox.options import Options
import time

chrome_options = Options()
chrome_options.add_argument("--headless")

url = "https://bbs.pediy.com/thread-251690.htm"
#对应的chromedriver的放置目录
driver = webdriver.Chrome(chrome_options=chrome_options)

driver.get(url)


start_time=time.time()
print('this is start_time ',start_time)

driver.find_element_by_id("kw").send_keys("selenium webdriver")
driver.find_element_by_id("su").click()
time.sleep(3)
driver.save_screenshot('screen.png')

driver.close()

end_time=time.time()
print('this is end_time ',end_time)

2.

Author: damn1t

Link: http://microvorld.com/2019/06/22/python/selenium学习笔记/

Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.

< PreviousPost
vulnhub DC系列:DC1
NextPost >
Pyppeteer学习笔记
CATALOG
  1. 1. selenium学习笔记
    1. 1.1. 常用api
      1. 1.1.1. 浏览器操作
      2. 1.1.2. 获取标签元素
      3. 1.1.3. Cookie操作
      4. 1.1.4. 窗口操作
      5. 1.1.5. 截取当前页面
      6. 1.1.6. 执行JavaScript语句
      7. 1.1.7. 关闭与退出
      8. 1.1.8. 其他
      9. 1.1.9. ElementApi接口
      10. 1.1.10. 常见异常
    2. 1.2. 应用
      1. 1.2.1. 1.headless下的截屏
    3. 1.3. 2.