Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。而对于爬虫来说,使用Selenium操控浏览器来爬取网上的数据那么肯定是爬虫中的杀手武器。

这里将介绍 python3 下 selenium + ChromeDriver 常用的方法。

一、API 概览


# 定位操作
# 以下是所有定位操作的 API

# 返回一个匹配元素, 即一个 WebElement 元素
# 1.id定位:
find_element_by_id(self, id_)
# 2.name定位:
find_element_by_name(self, name)
# 3.class定位:
find_element_by_class_name(self, name)
# 4.tag定位:
find_element_by_tag_name(self, name)
# 5.link定位:
find_element_by_link_text(self, link_text)
# 6.partial_link定位:
find_element_by_partial_link_text(self, link_text)
# 7.xpath定位:
find_element_by_xpath(self, xpath)
# 8.css定位:
find_element_by_css_selector(self, css_selector)
# 9.精确定位
find_element(self, by='id', value=None)

# 返回一个列表, 包含所有匹配的元素, 即一个 WebElement 列表
# 10.id复数定位
find_elements_by_id(self, id_)
# 11.name复数定位
find_elements_by_name(self, name)
# 12.class复数定位
find_elements_by_class_name(self, name)
# 13.tag复数定位
find_elements_by_tag_name(self, name)
# 14.link复数定位
find_elements_by_link_text(self, text)
# 15.partial_link复数定位
find_elements_by_partial_link_text(self, link_text)
# 16.xpath复数定位复数定位
find_elements_by_xpath(self, xpath)
# 17.css复数定位复数定位
find_elements_by_css_selector(self, css_selector)
# 18.精确复数定位
find_elements(self, by='id', value=None)

二、注意事项

1、python selenium 提供了两种对象 : WebDriver 和 WebElement ,这两种对象都可以使用这些 API

2、这些 API 一旦执行失败(即查找不到), 就会抛出异常 ,因此必须使用 try: .. except: … 机制避免错误的行为影响程序继续进行

3、WebDriver 调用以上 API 进行全局定位 ,WebElement 调用以上 API 可以进行层级定位, 即 查找当前元素的子元素

三、WebDriver 的使用

开始的时候必须要有初始化一个 WebDriver 实例, 即下面的 driver 用来对浏览器进行控制以及页面的访问

1、请求连接

req_url = “https://www.baidu.com"

2、打开浏览器

driver = webdriver.Chrome()

3、开始请求

driver.get(req_url)

接着, 就可以使用 API 进行当前页面的全局查找

四、WebElement 的使用

  • 使用 driver.find_element_by_xx() 得到的是一个 WebElement 实例

    使用获得的实例调用上面的 API 即可进行层级查找

  • 使用 driver.find_elements_by_xx() 得到的是一个元素是 WebElement 实例的 list

    通过对 list 的遍历, 即可对各个实例进行相应的操作

五、WebDriver 的一些常用操作

更多案例请参照 : module-selenium.webdriver.remote.webdriver

# 获取当前加载页面的 URL
driver.curren_url
# 关闭当前窗口, 如果当前窗口是最后一个窗口, 浏览器将关闭
driver.close() 
# 关闭所有窗口并停止 ChromeDriver 的执行
driver.quit() 
# 为当前会话添加 cookie 
driver.add_cookie(cookie_dict) 
# 得到执行 cookie 
driver.get_cookie(name)
# 得到所有的 cookie
driver.get_cookies() 
# 删除当前会话的所有cookie
driver.delete_all_cookies()  
# 删除指定 cookie
driver.delete_cookie(name)
# 相当于浏览器的后退历史记录
driver.back()
# 相当于浏览器的前进历史记录
driver.forward() 
# 同步执行 js 脚本 
driver.execute_script(script, *args)
# 异步执行 js 脚本
driver.execute_async_script(script, *args)
# 在当前窗口加载 url
driver.get(url)
# 刷新当前页面
driver.refresh()
# 当前窗口的 handle, 相当于一个指针一样的东西, 用来指向当前窗口
driver.current_window_handle 
# 当前浏览器中的已经打开的所有窗口, 是一个 list
driver.window_handles
# 切换 window_handle 指向的窗口
driver.switch_to_window(window_handle)
# 当前页面的 title
driver.title
# 当前浏览器的名字
driver.name

六、WebElement 的一些常用操作

更多案例请参照 module-selenium.webdriver.remote.webelement

# 清除元素的内容, 假如这个元素是一个文本元素
webEle.clear()
# 点击当前元素
webEle.click()
# 当前元素是否可见
webEle,is_displayed()
# 当前元素是否禁止, 比如经常会禁用一些元素的点击
webEle.is_enabled()
# 当前元素是否选中, 文本输入框的内容
webEle.is_selected()
# 向当前元素模拟键盘事件
webEle.send_keys(*value) 
# 提交表单
webEle.submit() 
# 当前元素的标签名
webEle.tag_name 
# 当前元素的内容
webEle.text
# 获取当前元素执行属性的值
webEle.get_attribute(name)