ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-07-13 10:59:30  阅读:121  来源: 互联网

标签:webdriver 网页 python 标签 selenium 爬虫 element find


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()指定超时等待时间

标签:webdriver,网页,python,标签,selenium,爬虫,element,find
来源: https://blog.csdn.net/BananaChoas/article/details/118669016

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有