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 | browser.maximize_window() # 最大化 |
关闭页面
1 | browser.close() # 关闭当前标签页 |
屏幕操作
1 | browser.save_screenshot('save.png') # 截图,只支持 PNG 格式 |
前进后退刷新
1 | browser.forward() # 前进 |
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
树中未找到该元素。因此其解决方案就是保证在操作前,该元素存在且是可操作的。
此博客内容均为作者学习所做笔记,侵删!
若转作其他用途,请注明来源!