红联Linux门户
Linux帮助

Ubuntu16.04 Python selenium操作网页笔记

发布时间:2017-02-22 10:42:12来源:blog.csdn.net/isinstance作者:isinstance
这次是在Ubuntu16.04上进行的,使用selenium之前,你先得将Firefox或者Chrome或者IE的驱动放进/usr/bin里面,我用的是Ubuntu自带的Firefox,然后Firefox的驱动在这里下
Mozilla Github这里:https://github.com/mozilla/geckodriver/releases
64位的就选64位,32位的Linux应该很少了吧,然后解压cp进/usr/bin
 
selenium各函数使用说明
现在网上的教程基本都是你抄我的,我抄你的,搜索出来的都是千篇一律的,没啥价值,所以同学搜索可以,要适度哦
这是Python-selenium的官方文档地址python-selenium(https://selenium-python.readthedocs.io/)
安装selenium:
sudo pip install selenium
官方文档呢只是大概的讲了一下,其实selenium可没有他们说的那么简单
 
第一步:打开一个网页
这一步呢是新建一个空白的网页窗口
我们先导入模块,这一步很重要
from selenium import webdriver 
然后使用webdriver打开Firefox
driver = webdriver.Firefox()
Chrome么就
driver = webdriver.Chrome()
不过一样的你都得下他们的驱动放进/usr/bin
到这里还是不会出来web浏览器窗口的
然后我们打开一个网页,这里以淘宝为掩饰
driver.get("https://www.taobao.com")
然后这个时候,就会自动用Firefox打开了淘宝的页面
第一步完成。
 
第二步:driver的操作
我们可以看一下淘宝的title是什么
title = driver.title
s = title.encode("utf-8")
print s
下面是我当时操作时候的输入输出
>>> driver = webdriver.Firefox()
>>> driver.get("https://www.taobao.com")
>>> title = driver.title
>>> title.encode("utf-8")
'\xe6\xb7\x98\xe5\xae\x9d\xe7\xbd\x91 - \xe6\xb7\x98\xef\xbc\x81\xe6\x88\x91\xe5\x96\x9c\xe6\xac\xa2'
>>> print title
淘宝网 - 淘!我喜欢
用selenium最重要的是要记得解码,因为title返回的Unicode,然后是没法输出中文的,所以这里加了一个解码,这是在python2.x中,3.x好像方法换了
1. driver.current_url
这是返回当前所在网页的URL的
>>> driver.current_url
u'https://www.taobao.com/'
>>>
2. driver.close()
这是关闭当前页面的,比如你一个Firefox打开了很多页面,这是关闭当前页面的,要想关闭打开的Firefox,用方法3
3. driver.quit()
这就是将Firefox直接关闭
4. driver.current_window_handle
前面不是说,你打开了很多页面吗,这是获取你当前页面handle的
>>> driver.current_window_handle
u'2147483649'
>>>
一般就是用这个来定位当前的页面,然后在不同页面之间做切换,怎么切换,看下面
5. dirver.switch_to_window(args *window_handle)
上面不是得到一个window handle了吗,你可以从最后介绍那个10.函数返回的当前handle列表里面选择一个handle,然后把他传进参数里面,driver就可以切换到那个页面
6. driver.get(args *url)
这个不用说了吧,打开一个网页
7. driver.title
返回网页的title,记得解码
8. driver.get_cookies()
获得当前页面的cookies
>>> c = driver.get_cookies()
>>> c
[{u'domain': u'.taobao.com', u'secure': False, u'value': u'cn', u'expiry': None, u'path': u'/', u'httpOnly': False, u'name': u'thw'}, {u'domain': u'www.taobao.com', u'secure': False, u'value': u'dw:1920&dh:950&pw:1920&ph:950&ist:0', u'expiry': None, u'path': u'/', u'httpOnly': False, u'name': u'_med'}, {u'domain': u'.taobao.com', u'secure': False, u'value': u'0', u'expiry': None, u'path': u'/', u'httpOnly': False, u'name': u'v'}, {u'domain': u'.taobao.com', u'secure': False, u'value': u'1caee2ae81e41ea28739ca4d84e3770d', u'expiry': None, u'path': u'/', u'httpOnly': True, u'name': u'cookie2'}, {u'domain': u'.taobao.com', u'secure': False, u'value': u'193cd88d532ec07d17c993b706481253', u'expiry': None, u'path': u'/', u'httpOnly': False, u'name': u't'}, {u'domain': u'.taobao.com', u'secure': False, u'value': u'B4rGEMrmAEECAXBziEByBkK1', u'expiry': None, u'path': u'/', u'httpOnly': False, u'name': u'cna'}, {u'domain': u'.taobao.com', u'secure': False, u'value': u'Ara22fu6y3-0uopHvyoKNvjaBue41/oR', u'expiry': None, u'path': u'/', u'httpOnly': False, u'name': u'l'}, {u'domain': u'.taobao.com', u'secure': False, u'value': u'Ap2dqHwZmQPXl30vUxrYiXPurXBcstEMj8zaxV9i2fQjFr1IJwrh3GsEJrDv', u'expiry': None, u'path': u'/', u'httpOnly': False, u'name': u'isg'}, {u'domain': u'.taobao.com', u'secure': False, u'value': u'ci%3D-1_1', u'expiry': None, u'path': u'/', u'httpOnly': False, u'name': u'mt'}]
>>> type(c)
<type 'list'>
>>> for i in c:
...     print i
... 
{u'domain': u'.taobao.com', u'secure': False, u'value': u'cn', u'expiry': None, u'path': u'/', u'httpOnly': False, u'name': u'thw'}
{u'domain': u'www.taobao.com', u'secure': False, u'value': u'dw:1920&dh:950&pw:1920&ph:950&ist:0', u'expiry': None, u'path': u'/', u'httpOnly': False, u'name': u'_med'}
{u'domain': u'.taobao.com', u'secure': False, u'value': u'0', u'expiry': None, u'path': u'/', u'httpOnly': False, u'name': u'v'}
{u'domain': u'.taobao.com', u'secure': False, u'value': u'1caee2ae81e41ea28739ca4d84e3770d', u'expiry': None, u'path': u'/', u'httpOnly': True, u'name': u'cookie2'}
{u'domain': u'.taobao.com', u'secure': False, u'value': u'193cd88d532ec07d17c993b706481253', u'expiry': None, u'path': u'/', u'httpOnly': False, u'name': u't'}
{u'domain': u'.taobao.com', u'secure': False, u'value': u'B4rGEMrmAEECAXBziEByBkK1', u'expiry': None, u'path': u'/', u'httpOnly': False, u'name': u'cna'}
{u'domain': u'.taobao.com', u'secure': False, u'value': u'Ara22fu6y3-0uopHvyoKNvjaBue41/oR', u'expiry': None, u'path': u'/', u'httpOnly': False, u'name': u'l'}
{u'domain': u'.taobao.com', u'secure': False, u'value': u'Ap2dqHwZmQPXl30vUxrYiXPurXBcstEMj8zaxV9i2fQjFr1IJwrh3GsEJrDv', u'expiry': None, u'path': u'/', u'httpOnly': False, u'name': u'isg'}
{u'domain': u'.taobao.com', u'secure': False, u'value': u'ci%3D-1_1', u'expiry': None, u'path': u'/', u'httpOnly': False, u'name': u'mt'}
返回的是用list包起来的dict
9. driver.implicitly_wait(args *time)
这是driver等待结果多少秒,如果没有出现,就不等了,这个一般是用在用css selector或者xpath选取元素时候以免等待时间过长用的
10. driver.window_handles
这是返回用selenium打开的Firefox里面现在有多少个子页面的,每个页面对应一个handle
>>> driver.window_handles
[u'2147483649', u'2147483685']
这个说明我现在打开了两个页面,一般你第一个打开的页面会放在list[0]里,也就是第一个,然后依次打开,依次的append进去list里面
其他的在官方文档里都有介绍,selenium最强大的功能还是find_element系列函数,这个官方文档有详细介绍,抓页面的时候简直是神器,好了就说这么多。
 
本文永久更新地址:http://www.linuxdiyf.com/linux/28601.html