1、Selenium简介
Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。
我们在这里使用 Selenium with Python 版本,主要用来模拟用户在网站上的操作和请求,以便于我们能更好的进行爬虫获取数据。
2、Selenium的安装和使用
在另一篇文中介绍过PyCharm中库的安装,selenium的安装跟其他的库安装一样,可以进行搜索安装。(我是另一篇~~) 当然,你也可以使用命令行的方式安装,macOS 下打开终端,使用以下命令行
pip3 install selenium
前提是你的系统中已经安装过Python 3.5,macOS系统自带的是Python 2.5+版本,本文使用的是Python 3.5版本
我们还以gitbook.cn网站为例子进行Selenium的简单使用,以下代码是获取一个搜索框,并进行内容搜索
from selenium import webdriver
from selenium.webdriver.common.keys import Keys # 导入Keys
driver = webdriver.Chrome('/Users/Pro-007/Desktop/chromedriver')
driver.get('http://gitbook.cn/gitchat/hot')
assert 'GitChat' in driver.title # 如果关键字GitChat不在网页的
中,程序跳出,否则继续tag = driver.find_element_by_id('orderedChatSearch') # 通过id值获取HTML的标签元素,这里获取的是搜索框
tag.clear() # 清空搜索框的内容
tag.send_keys('面试') # 在搜索框中填入搜索值
tag.send_keys(Keys.RETURN) # 模拟敲回车键
# 如果没有结果程序退出
assert 'No results found.' not in driver.page_source
driver.close() # 关闭driver
这个是模拟的搜索结果
模拟搜索.png
3、Selenium的导航操作 Navigating
定位一个元素
find_element_by_id #根据id值定位标签元素
find_element_by_name
find_element_by_xpath #通过使用xpath匹配定位标签元素
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector #通过CSS选择器定位标签元素
定位多个元素
find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector
通过导航从而定位标签元素,这样我们就可以获取到标签并可以进行相应的操作,比如上面的在搜索框内输入’面试’时,浏览器可以自动的进行相应的搜索,不需要用户的操作。
4、继续我们的爬虫
在上一篇文章中我们基本已经实现爬虫操作了,但是最后发现我们每次只能获取到20条数据,这个可不是我们想要的结果。下面就让我们利用上面的知识进行模拟用户上拉操作,从而获取到更多的数据。这里我们仅仅需要实现一个函数方法就行。(需配合另一篇文章使用)传送门
#代码示例
def scroll_down(self, driver, times):
for i in range(times):
print('开始执行第', str(i + 1), '次上拉操作')
# 执行js代码,实现上拉操作
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
print('第%s次上拉操作执行完毕' % str(i + 1))
print('开始等待网页加载...')
# 需要 import time
time.sleep(20) # 等待20秒,等页面加载出来后在进行下拉操作,这个值根据网速自定义
结果输出:
爬虫结果.png
5、小结
这个爬虫项目算是已经完成了,这也算是我第一次写文章,谨以此文来记录我在学习Python的过程中所写过的代码,并分享出来给可以用到帅哥美女们。谢谢!
作者:Sun橙子