Python教程

【python】【爬虫】selenium模块快速介绍

本文主要是介绍【python】【爬虫】selenium模块快速介绍,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Selenium模块虽然是一个web测试工具,但在爬虫中最有意思的功能就是可以模拟鼠标点击等操作。在前面的学习中,通过抓取button指向的地址模拟鼠标点击,但在selenium中直接模拟的即是点击的操作。

目录

调试

基本网页操作

通过属性定位标签

对标签的后续操作

模拟鼠标操作

补充

弹出的页面处理

等待页面加载


调试

安装了selenium模块后,还要安装浏览器对应的驱动才可以使用selenium。chrome对应驱动为ChromeDriver,Firefox对应geckodriver,注意驱动的版本和浏览器的版本是否适配,把下载的驱动放到python安装目录的Scripts目录下。以下为初始化样例。

from selenium import webdriver
# 初始化的参数中可以添加驱动的全地址,默认在scripts目录中
#driver = webdriver.Chrome('D:\Python\Scripts\chromedriver.exe') # 创建chrome浏览器对象
driver = webdriver.Firefox()    # 创建firefox浏览器对象
driver.get('https://www.baidu.com')  # 远程控制模式打开浏览器并访问百度

基本网页操作

get()向指定URL发送请求maximize_window()最大化窗口
current_url()返回当前网页URLget_cookies()获取当前网页的cookie
name返回当前浏览器驱动的名称title返回当前网页的标题
page_source获取当前网页源码current_window_handle获取当前网页的窗口
window_handles获取当前打开的所有网页窗口refresh()刷新当前网页
quit()关闭网页并退出驱动close()关闭当前网页
back()返回上一页

通过属性定位标签

函数中element代表返回满足条件的第一个标签,elements返回满足条件的所有标签

find_element_by_id()定位idfind_element_by_name()定位name
find_element_by_class_name()定位class,用 - 连接calss的多个值find_element_by_tag_name()定位标签名
find_element_by_link_text()精确定位链接find_element_by_partial_link_text()模糊定位链接(懒惰)
find_element_by_css_selector()CSS选择器定位find_element_by_xpath()XPath定位具体哪一个标签

为了方便使用,selenium中有一个By类封装了上述8种方法,只需调用find_element()或find_elements()传入两个参数即可。

from selenium import webdriver
from selenimu.webdriver.common.by import By
browser = webdriver.Firefox()
browser.get('http://www.baidu.com')
search1 = browser.find_element(By.ID, 'q')    # 定位ID属性为q的标签

对标签的后续操作

get_attribute('')获取标签中指定属性的值send_keys()标签赋值,可理解为输入框输入
is_selected()判断标签是否被选中tag_name()返回标签的名称
is_displayed()判断标签是否显示size返回标签大小
is_enabled()判断标签是否可用location返回标签位置坐标
text获取标签的文本内容

模拟鼠标操作

把实例化的WebDriver对象作为参数传入ActionChain对象进行实例化。ActionChain类中包含了鼠标的操作,调用这些操作函数后,操作传入一个队列中,通过调用perform()开始执行队列中的操作。通常定位好一个标签后再执行鼠标操作。【传入定位的元素作为参数】

点击类操作:

  1. clike()单击
  2. context_click()右击
  3. double_click()双击

按压操作:

click_and_hold()长按按钮,然后time.sleep()指定等待时间,最后release()释放按钮

拖动和移动:

drag_and_drop(source,target)模拟鼠标拖动的动作,soure为起点即需要拖动的元素,target为重点即该元素区域去到的位置

drag_and_drop_by_offset(),给出水平和垂直方向上的位移量,模拟用鼠标把目标拖动一定距离

悬停:

move_to_element()指定在定位到的元素上悬停


补充

弹出的页面处理

在网页操作的时候,例如点击登录的按钮时,会弹出一个<iframe>标签的窗口用于输入登录信息。<iframe>标签作为嵌套的子页面也有自己的body等标签。需要switch_to_frame()跳转到这个新页面再进行标签定位。(通过定位iframe的属性确定标签)

等待页面加载

time模块的sleep()方法提供了休眠等待的时间,但selenium模块提供了显示等待和隐式等待的方法。

显示等待【条件成立时再下一步操作】使用WebDriverWait类,传入WebDriver对象和超时时间,通过unti()l和until_not()判断条件,通过expected_conditions设置条件

from selenium import webdriver
from selenium.webdirver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
browser = webdriver.Firefox()
browser.get('http://www.taobao.com')
element = WebDriverWait(driver=browser, timeout=5).until(EC.presence_of_element_located((By.ID, 'q')))    #在等待时间找有无ID为q的博标签,没有返回false

隐式等待【超时时间】implicitly_wait()指定超时等待时间

这篇关于【python】【爬虫】selenium模块快速介绍的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!