爬虫框架: selenium API使用介绍
文章目录
- 一、背景
- 二、selenium API使用
- 1. 定位页面元素
- 2. 查看对象的方法
- 3. 查看节点文本内容
- 4. 节点定位
- 1)id定位
- 2)name定位
- 3)xpath定位
- 4)**css 定位**
- 5)文本定位
- 5. 窗口大小控制
- 6. 前后页面
- 7. 刷新下当前页面
- 8. 多窗口切换
- 9. 输入框
- 10. 按键操作
- 三、参考资料
一、背景
selenium(硒) 作为化学元素有提升身体机能的作用,作为软件是一个自动化web测试框架,旨在提升工作效率,解放劳动力。selenium同时可以用作爬虫框架,使用python编写,传统的爬虫使用request请求html进行解析,但是对于一些ajax动态渲染的页面则没法直接抓取到内容,因此selenium提出一种模拟人的鼠标点击、滚动的动作,通过操控浏览器界面的形式完成测试。所以selenium需要安装浏览器的控制驱动,通常安装chrome 驱动。软件框架如下,本文进行讲解selenium中的API使用。
二、selenium API使用
1. 定位页面元素
以CSDN为例
from selenium import webdriver# Chrome浏览器
driver = webdriver.Chrome()
driver.get('https://www.csdn.net/')
浏览后自动退出, 不quit就不会退出。设置不自动退出:
# 不自动关闭浏览器
option = webdriver.ChromeOptions()
option.add_experimental_option("detach", True)# 将option作为参数添加到Chrome中
driver = webdriver.Chrome(chrome_options=option)
2. 查看对象的方法
selenium中有很多类和对象,想要查看对象有哪些方法可以使用dir命令。
print(dir(app))
3. 查看节点文本内容
print(app.text) : 查看节点的文本信息。
4. 节点定位
xml节点定位有多种方法,比如:id、name、xpath路径、css选择器、文本等方式。
1)id定位
driver.find_element_by_id("toolbar-search-input")
2)name定位
driver.find_element_by_name("keywords")
3)xpath定位
# 绝对路径(层级关系)定位
driver.find_element_by_xpath("/html/body/div/div/div/div[2]/div/div/input[1]")
# 利用元素属性定位
driver.find_element_by_xpath("//*[@id='toolbar-search-input']"))
# 层级+元素属性定位
driver.find_element_by_xpath("//div[@id='csdn-toolbar']/div/div/div[2]/div/div/input[1]")
# 逻辑运算符定位
driver.find_element_by_xpath("//*[@id='toolbar-search-input' and @autocomplete='off']")
4)css 定位
driver.find_element_by_css_selector('#toolbar-search-input')
driver.find_element_by_css_selector('html>body>div>div>div>div>div>div>input')
5)文本定位
link
专门用来定位文本链接,假如要定位下面这一标签。
<div class="practice-box" data-v-04f46969="">加入!每日一练</div>
我们使用 find_element_by_link_text
并指明标签内全部文本即可定位。
driver.find_element_by_link_text("加入!每日一练")
5. 窗口大小控制
1)设置窗口大小,在get步骤前后都可以设置窗口。
driver.set_window_size(600, 800)
2)全屏显示
driver.maximize_window()
6. 前后页面
1)可以在同一个标签页中多次get 页面,进入前后页面,而不是新的标签页。
from time import sleepdriver = webdriver.Chrome()# 访问CSDN首页
driver.get('https://www.csdn.net/')
sleep(2)
#访问CSDN个人主页
driver.get('https://blog.csdn.net/qq_43965708')
sleep(2)
#返回(后退)到CSDN首页
driver.back()
sleep(2)
#前进到个人主页
driver.forward()
2)在新的标签页中打开。 需要使用js脚本
# 新标签中打开
js = "window.open('https://blog.csdn.net/qq_43965708')"
driver.execute_script(js)
7. 刷新下当前页面
driver.refresh()
8. 多窗口切换
窗口是window对象,可以使用如下API进行切换。
# 获取打开的多个窗口句柄
windows = driver.window_handles
# 切换到当前最新打开的窗口 最后一个窗口
driver.switch_to.window(windows[-1])
# 切换到第一个窗口
driver.switch_to.window(windows[0])
9. 输入框
输入找到元素对象,然后send_keys(‘’),注意get 完 sleep几秒等待页面刷新再获取页面元素。
driver.get('https://www.csdn.net/')
sleep(2)
# 定位搜索输入框
text_label = driver.find_element_by_xpath('//*[@id="toolbar-search-input"]')# 在搜索框中输入 Dream丶Killer
text_label.send_keys('Dream丶Killer')sleep(2)
# 清除搜索框中的内容
text_label.clear()# 输出搜索框元素是否可见
print(text_label.is_displayed())
# 输出placeholder的值
print(text_label.get_attribute('placeholder'))# 定位搜索按钮
button = driver.find_element_by_xpath('//*[@id="toolbar-search-button"]/span')
# 输出按钮的大小
print(button.size)
# 输出按钮上的文本
print(button.text)'''输出内容
True
python面试100问
{'height': 32, 'width': 28}
搜索
'''
tips: browser对象中保存了整个网页内容,在brower.get时保存到成员属性中了。
10. 按键操作
按键对象的click方法模拟鼠标左击的动作。
playall_btn=browser.find_element_by_link_text('播放全部')
#print(browser.page_source)
playall_btn.click()
三、参考资料
https://zhuanlan.zhihu.com/p/480544218
https://pypi.org/project/selenium/
https://www.open-open.com/lib/view/open1413191207789.html