简介
Selenium
最初是一个用于网站的自动化测试工具,支持各种 Chrome
、Firefox
、Safari
等主流浏览器,同时也支持 phantomJS
无界面浏览器。不过其更通常的使用在于爬虫中使用,其主要是用于解决 requests
无法直接执行 JavaScript
代码的问题,不过用于解析 Dom
元素更有其妙用之处。
基础使用
安装
在 Python
中使用 Selenium
需要通过 pip
安装即可。
1 | pip install selenium |
驱动程序
Selenium
在安装之后还需要一个驱动程序来与浏览器交互,不同的浏览器都有自己的驱动程序。列表如下:
浏览器 | 下载链接 |
---|---|
Chrome |
https://sites.google.com/chromium.org/driver/ |
Edge |
https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/ |
Firefox |
https://github.com/mozilla/geckodriver/releases |
Safari |
https://webkit.org/blog/6900/webdriver-support-in-safari-10/ |
不过在新版本 4.6.0
之后,发行包中包含一个 Selenium Manager
新工具,该工具帮助 Selenium
在发现驱动程序不可用时,会自动发现、下载并缓存驱动程序。
基本使用
模拟点击百度首页输出其标题。
1 | from selenium import webdriver |
常用操作
元素定位
通过方法查找元素的函数共有两个:
find_element(By.KEY, 'KEY_NAME')
find_elements(By.KEY, 'KEY_NAME')
By.KEY
用于定位页面上的元素共有以下八种:
ID
通过元素的ID
属性定位元素。NAME
通过元素的名称属性定位元素。XPATH
通过在XML
文档中的XPATH
节点定位元素。LINK_TEXT
通过锚标记中使用的链接文本定位元素。PARTIAL_LINK_TEXT
通过锚标记中使用的链接文本定位元素。TAG_NAME
通过标签名称定位元素。CLASS_NAME
通过类名定位元素。CSS_SELECTOR
使用CSS
选择器语法定位元素。
WebElement
常用方法
clear()
如果元素是输入文本,则清除文本。click()
单击该元素。get_attribute()
获取元素的给定属性。get_dom_attribute()
、
获取元素在HTML
标记中声明的元素。get_property()
获取元素的给定属性。is_displayed()
该元素是否对用户可见。is_enabled()
该元素使用可用。is_selected()
该元素是否被选中。send_keys()
模拟在元素中输入内容。location
获取元素的坐标。submit()
提交表格。text
元素的文本。tag_name
元素的tagName
属性。
鼠标键盘事件
click(on_element=None)
单击左键。context_click(on_element=None)
单击右键。double_click(on_element=None)
双击左键。key_down(value, on_element=None)
按下键盘上的某个键。key_up(value, on_element=None)
松开键盘上的某个键。move_by_offset(xoffset, yoffset)
鼠标从当前位置移动到某个坐标。move_to_element(to_element)
鼠标移动到某个元素。move_to_element_with_offset(to_element, xoffset, yoffset)
移动到距某个元素(左上角坐标)多少距离的位置。send_keys()
发送某个键或者输入文本到当前元素。
浏览器操作
获取页面的
URL
1
browser.current_url
获取页面日志
1
2
3
4
5
6
7
8browser.maximize_window() # 最大化
browser.fullscreen_window() # 全屏
browser.minimize_window() # 最小化
browser.get_window_position() # 获取窗口的坐标
browser.get_window_rect() # 获取窗口的大小和坐标
browser.set_window_position(100, 200) # 设置窗口的坐标
browser.set_window_rect(100, 200, 32, 50) # 设置窗口的大小和坐标
browser.set_window_size(200, 300) # 设置窗口的大小关闭页面
1
2browser.close() # 关闭当前标签页
browser.quit() # 关闭浏览器并关闭驱动屏幕操作
1
2
3browser.save_screenshot('save.png') # 截图,只支持 PNG 格式
browser.get_screenshot_as_png() # 获取当前窗口的截图作为二进制数据
browser.get_screenshot_as_base64() # 获取当前窗口的截图作为 base64 编码的字符串前进后退刷新
1
2
3browser.forward() # 前进
browser.back() # 后退
browser.refresh() # 刷新
cookie
操作
get_cookie(NAME)
获取指定键的Cookies
。get_cookies()
获取所有的Cookies
。delete_cookie(NAME)
删除指定键的Cookies
。delete_all_cookies()
删除所有的Cookies
。
JavaScript
操作
Selenium
可以自定义执行 JavaScript
。
1 | browser.execute_script("alter('hello selenium!')") |
示例 Demo
1 | from selenium import webdriver |
异常信息
NoSuchElementException
在获取页面元素后,如果 Dom
发生变化就会出现该异常。
stale element reference: stale element not found
分析该问题是因为在 Dom
树中未找到该元素。因此其解决方案就是保证在操作前,该元素存在且是可操作的。
引用
个人备注
此博客内容均为作者学习所做笔记,侵删!
若转作其他用途,请注明来源!