学科分类
目录
网络爬虫

入门操作

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所示。

img

图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所示。

img

图2 在搜索框中添加“长城”

(9)模拟点击页面上的按钮。

下面的示例代码中,通过id="su"定位百度搜索按钮,然后通过click()方法模拟点击页面上的按钮。

>>> driver.find_element_by_id("su").click()
>>> driver.save_screenshot("changcheng.png")
True

​ 此时,在Python.exe文件同目录下生成了名为changcheng.png的图片,内容如图3所示。

img

图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所示。

img

图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()
点击此处
隐藏目录