Python爬虫工具之Selenium

首先介绍一下Selenium

selenium
是一个用于web自动化测试的工具集,selenium不尽支持所有主流的浏览器,而且还支持很多开发语言,更好的是他这种测试工具其实可以融入到不同的测试框架中,根据你的要求,适应不同的测试流程。其实selenium最核心的就是一个驱动浏览器进行自动化测试的东东。

安装Selenium
pip install Selenium,
建议用pip安装的时候翻墙这样安装的速度会快一些

快速开始

第一个demo

# -*- coding:utf-8 -*-
from selenium import webdriver

browser = webdriver.Chrome()
browser.get('http://www.baidu.com/')

运行这段代码,程序会打开我的谷歌浏览器,然后访问百度的首页。

第二个demo

# -*- coding:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.sogou.com")
# 通过XPATH语法找到按钮对应的元素
button = driver.find_element(By.XPATH, '//span//input[@type="submit"]')
# 找到搜索框对应的元素
element = driver.find_element_by_id("query")
# 向搜索框中输入some text
element.send_keys("some text", Keys.ARROW_DOWN)
# 模拟了点击按钮
button.click()
# 打印页面源码
print driver.page_source

运行程序,发现打开了谷歌浏览器,打开了搜狗主页,然后在搜索框中输入了 some text 然后,点击了搜索按钮,打印出了搜索完毕的界面。


Selenium进阶

页面交互
仅仅通过传入URL来抓取页面是不够的,我们想要做的是和页面进行交互,比如在demo2中做到的,搜索框中填写想要搜索的内容,然后自动点击按钮去搜索。比如说,有这么一个元素

<input type="text" name="passwd" id="passwd-id" />

我们可以通过以下三种方式实现,

element = driver.find_element_by_id("passwd-id")
element = driver.find_element_by_name("passwd")
element = driver.find_element_by_xpath("//input[@id='passwd-id']")

第一和第二种是原始的DOM操作,第三种是通过XPATH,这两种方法Selenium是都可以支持的。可能你没接触过XPATH,但是如果你是谷歌用户那你就有福了,谷歌浏览器自带的可以自动生成XPATH语法的功能,这里介绍一下,打开百度主页,打开开发者模式
这里写图片描述
右键检查百度一下这个按钮,找到元素后,右键然后就和图上的结果一样了

这里粘贴下这个按钮元素的XPATH语法,就是这么简单
//*[@id="su"]
回归正题,在使用XPATH语法找元素的时候,可能会匹配到多个元素,这是就会抛出 NoSuchElementException异常.

获取到元素都我们就可以向文本框中输入一些文本了,

element.send_keys("some text")

还可以通过keys类来模拟点击按钮

element.send_keys(" and some", Keys.ARROW_DOWN)

清除文本框输入的内容可以这样

element.clear()

填写表单

上面介绍了向搜索框中填写内容的方式,接下来就要介绍如何处理表单数据

element = driver.find_element_by_xpath("//select[@name='name']")
all_options = element.find_elements_by_tag_name("option")
for option in all_options:
    print("Value is: %s" % option.get_attribute("value"))
    option.click()

首先通过XPATH得到下拉栏这个元素然后遍历下拉栏中的内容,然而这并不是一个最有效的方法,WebDriver给我们提供了一个Select方法:

# -*- coding:utf-8 -*-
from selenium.webdriver.support.ui import Select
select = Select(driver.find_element_by_name('name'))
# 通过索引选择
select.select_by_index(index)
# 通过文字选择
select.select_by_visible_text("text")
# 通过值选择
select.select_by_value(value)

WebDriver提供了一个方法可以全部取消选择

select = Select(driver.find_element_by_id('id'))
select.deselect_all()

可以通过下面代码获取已经选择的选项

select = Select(driver.find_element_by_xpath("xpath"))
all_selected_options = select.all_selected_options

获取可选项

options = select.options

选择完表单后就要提交了

driver.find_element_by_id("submit").click()

元素拖拽

# 元素位置
element = driver.find_element_by_name("source")
# 目标位置
target = driver.find_element_by_name("target")

from selenium.webdriver import ActionChains
# 实现一个ActionChains
action_chains = ActionChains(driver)
# 从element拖拽到target
action_chains.drag_and_drop(element, target).perform()

切换窗口

# 在window中切换
driver.switch_to_window("windowName")
# 在frame中切换
driver.switch_to_frame("frameName")

弹出窗口处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值