入门操作
Selenium库里有个叫WebDriver的API。WebDriver有点儿像可以加载网站的浏览器,但是它也可以像BeautifulSoup或者其他Selector对象一样用来查找页面元素,与页面上的元素进行交互 (发送文本、点击等),以及执行其他动作来运行网络爬虫。
我们以访问百度网页为例,逐步介绍Selenium和PhantomJS的一些基本操作。
(1) 导入webdriver,代码如下。
>>> from selenium import webdriver
(2)调用环境变量指定的PhantomJS浏览器创建浏览器对象,代码如下。
>>> driver = webdriver.PhantomJS()
如果没有在环境变量指定PhantomJS位置,则需要传入phantomjs.exe文件所在的路径,代码如下。
driver = webdriver.PhantomJS(executable_path=
'D:\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe')
(3)获取页面内容,代码如下。
>>> driver.get("http://www.baidu.com/")
使用get方法将页面的内容加载到浏览器对象driver中,get方法会一直等到页面被完全加载,然后才继续执行程序。
(4)获取页面名为wrapper的id标签的文本内容,代码如下。
>>> data = driver.find_element_by_id("wrapper").text
>>> data
'新闻\nhao123\n地图\n视频\n贴吧\n学术\n登录\n设置\n更多产品\n手机百度\n把百度设为主页关于百度About Baidu百度推广\n©2017 Baidu 使用百度前必读 意见反馈 京ICP证030173号 京公网安备11000002000001号 '
浏览器对象通过find_element_by_id方法定位页面元素,后面我们还会介绍其他定位元素的方法。
(5)打印页面标题,代码如下。
>>> print(driver.title)
百度一下,你就知道
通过浏览器对象的title属性可以获取当前页面的标题信息。
(6)生成当前页面快照并保存,代码如下。
>>> driver.save_screenshot("baidu.png")
True
PhantomJS浏览器虽然不显示页面,但是可以生成页面快照,并通过save_screenshot方法将页面快照保存成图片。此时,在python.exe文件的同目录下生成了一个名为baidu.png的图片文件,打开baidu.png文件,可以看到它保存了百度搜索页面在浏览器上的显示效果,如图1所示。
图1 百度首页
(7)打印页面源码,代码如下。
>>> print(driver.page_source)
此时,会打印出页面的整个源码。
(8)往页面的输入框中添加内容。
下面代码中,通过id="kw"定位百度搜索输入框,往输入框里添加字符串"长城",然后将页面快照保存。
>>> driver.find_element_by_id("kw").send_keys(u"长城")
>>> driver.save_screenshot("baidu.png")
True
send_keys方法的作用就是往页面元素上添加内容。此时,再次打开baidu.png文件,可以看到字符串“长城”已经添加到百度页面的搜索框中,如图2所示。
图2 在搜索框中添加“长城”
(9)模拟点击页面上的按钮。
下面的示例代码中,通过id="su"定位百度搜索按钮,然后通过click()方法模拟点击页面上的按钮。
>>> driver.find_element_by_id("su").click()
>>> driver.save_screenshot("changcheng.png")
True
此时,在Python.exe文件同目录下生成了名为changcheng.png的图片,内容如图3所示。
图3 “长城”搜索结果
(10)调用键盘按键操作,首先引入Keys包。示例代码如下。
>>> from selenium.webdriver.common.keys import Keys
(11)通过模拟Control + a 键全选输入框内容,代码如下。
>>> driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'a')
(12)通过模拟Control + x 键剪切输入框内容,代码如下。
>>> driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'x')
往输入框重新输入搜索关键字“itcast”,代码如下。
>>> driver.find_element_by_id("kw").send_keys("itcast")
(13)模拟点击“Enter”回车键,代码如下。
>>> driver.find_element_by_id("kw").send_keys(Keys.RETURN)
等待2秒,等页面响应完毕,然后生成新的页面快照,代码如下。
>>> time.sleep(2)
>>> driver.save_screenshot("itcast.png")
True
此时,在Python.exe文件同目录下生成了名为itcast.png的图片,内容如图4所示。
图4 搜索结果
(14)清除输入框内容。
清除输入框内容,使用clear方法,示例代码如下。
>>> driver.find_element_by_id("kw").clear()
(15)获取当前页面Cookie。
使用get_cookies方法获取当前页面的Cookie,示例代码如下。
>>> print(driver.get_cookies())
(16)获取当前URL。
使用current_url属性获取当前页面的URL,示例代码如下。
>>> print(driver.current_url)
(17)关闭当前页面。
使用close方法关闭当前页面,如果只有一个页面,会关闭浏览器。示例代码如下。
>>> driver.close()
(18)关闭浏览器。
当浏览器使用完毕时,应使用quit方法关闭浏览器,示例代码如下。
>>> driver.quit()