python爬虫之selenium

当网页由javascript生成且不包含ajax接口请求的时候,需要使用模拟浏览器运行的方式来爬取需要的数据。

一、安装与准备

selenium本身使用pip安装即可,除此之外还需要安装浏览器及驱动。我自己安装了chrome和firefox。

chrome对应的驱动为ChromeDriver,firefox对应的驱动为GeckoDriver。分别百度下载即可。(我下的都是最新的,历史版本需要注意版本对应)

二、基本使用

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')        #这里网址一定要加http:// 不然会报错
driver.close()

这样就可以模拟浏览器打开并跳转到百度页面了。

如果使用的是其他的浏览器,对应使用以下方式进行初始化

driver = webdriver.Firefox()
driver = webdriver.Edge()
driver = webdriver.PhantomJS()

三、查找节点

selenium可以驱动浏览器完成各种操作,比如填充表单、模拟点击等。在完成这些操作时,先要找到节点。

获取节点的方式如下

find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_line_text
find_element_by_partial_line_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector

如果查找的目标在网页里不止一个,可以使用find_elements方法就可以找到所有的节点了,返回的是一个节点列表

除了直接使用以上方法,还可以使用

from selenium.webdriver.common.by import By

driver.find_element(By.ID,'username')

这个方式与find_element_by_name得到的结果一致

四、节点交互

比较常见的操作有输入文字时的send_keys(),清空输入框的clear()方法,点击按钮的click()方法。以下为一个简单的淘宝搜索示例。

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://www.taobao.com')
input = driver.find_element_by_id('q').send_keys('hottoys灭霸手套')
button = driver.find_element_by_class_name('btn_search').click()

注:使用find_element_by_class_name的方法时,只接收一个参数,淘宝实例中的搜索按钮代码为

<button class="btn-search tb-bg" type="submit" data-spm-click="gostr=/tbindex;locaid=d13">搜索</button>

如果用全部类名的话会报错。

五、动作链

例如鼠标拖拽,最常用的例子就是滑动验证码了。在此做个简单的例子。

选用了runoob上的一个拖动示例,网址为

http://www.runoob.com/try/try.php?filename=jqueryui-example-droppable

from selenium import webdriver

url = 'http://www.runoob.com/try/try.php?filename=jqueryui-example-droppable'
driver = webdriver.Chrome()
driver.get(url)
driver.swich_to.frame('iframeResult')
source = driver.find_element_by_css_selector('#draggable')
target = driver.find_element_by_css_selector('#droppable')
actions = webdriver.ActionChains(driver)
actions.drap_and_drop(source, target)
actions.perform()

 

六、获取节点信息

selenium也可以用相关的方法和属性来提取节点信息。

获取属性 get_attribute()

获取文本值 

input = driver.find_element_by_class_name('')
print(input.id)
print(input.location)
print(input.tag_name)
print(input.size)

七、前进和后退

浏览器有前进和后退功能,使用selenium模拟也可以完成这些操作。

driver.back()        #后退
driver.forward()     #前进

以上就是selenium常用的一些操作。具体到项目中需要进行组合搭配。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值