240
我爱毛绒绒~~~~~~~

爬虫 - Selenium简介

Selenium是一个用于网站应用程序自动化的工具。它可以直接运行在浏览器中,就像真正的用户在操作一样。它支持的浏览器包括IE、Mozilla Firefox、Safari、Google Chrome和Opera等,同时支持多种编程语言,如.Net、Java、Python和Ruby等。

安装

使用

初始化

from selenium import webdriver
### 按照什么方式查找
from selenium.webdriver.common.by import By
### 得到一个谷歌浏览器对象
web = webdriver.Chrome('chromedriver.exe')
### 隐式等待:找一个控件,如果控件没有加载出来,等待5s中  等待所有,只需要写着一句,以后找所有控件都按这个操作来
web.implicitly_wait(10)
web.close()   ###关闭

网页元素定位

  • find_element

    • ID 和 NAME
    web.find_element(By.ID,'idname')  ###通过id查找
    web.find_element(By.NAME,'name')  ###通过name查找
    

    通常情况下,一个网页中,元素的id或name的属性值是唯一的,如果多个元素的id或name相同,这种定位方式只能定位第一个元素。

    • CLASS_NAME和TAG_NAME
    web.find_element(By.CLASS_NAME,'classname')  ###通过classname查找
    web.find_element(By.TAG_NAME,'tagname')   ###通过tagname查找
    

    属性class的属性值可以被多个元素使用,同一个元素标签也可以多次使用,正因如此,这两种定位方式只能定位符合条件的第一个元素。

    • LINK_TEXT和PARTIAL_LINK_TEXT
    web.find_element(By.LINK_TEXT,'linktext')   ###超链接载体的精确匹配
    web.find_element(By.PARTIAL_LINK_TEXT,'partiallinktext')    ###超链接载体的模糊匹配
    

    若超链接载体并不是唯一的,那么Selenium也是默认定位第一个符合条件的元素。

    • XPATH和CSS
    web.find_element(By.XPATH,'xpath')   ### xpath选择器
    web.find_element(By.CSS_SELECTOR,'css')   ###css选择器
    

    两者是一个定位选择器,通过标签的路径来实现定位

  • find_elements
    用法与find_element一致,查找到多个元素,结果为列表

网页元素操控

  • 常规操作
    常规操作包含文本清除、文本输入、单击元素、提交表单、获取元素值等

    • send_keys
    web.find_element(By.NAME,"username").send_keys('username')   ###通过name定位输入框,输入username
    
    • clear
    web.find_element(By.NAME,"username").clear()   ###通过name定位输入框,清除输入内容
    
    • text
    web.find_element(By.XPATH,'//*[@id="post_list"]/article[1]/section/div/a').text   ###通过xpath定位,获取文本
    

    • click
    web.find_element(By.NAME,"cookietime").click()   ###通过name定位标签,点击
    
    • submit
    web.find_element(By.TAG_NAME,"button").submit()   ###通过tag_name定位标签,提交
    

其中click和submit在某些情况下可以相互使用,submit只用于表单的提交按钮;click是强调事件的独立性,可用于任何按钮

  • 鼠标事件操作
    鼠标事件操作由Selenium的ActionChains类来实现
    在调用它的时候,其实是不会立即执行,而是会将所有的操作按顺序存放在一个队列里,当你调用perform()方法时,才会按时间顺序会依次执行
    • 鼠标右击和双击
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.action_chains import ActionChains
    import time
    
    web = webdriver.Chrome('chromedriver.exe')
    web.implicitly_wait(5)
    web.get('https://www.2345.com/')
    
    actions = ActionChains(web)   ###拿到动作链对象
    ele = web.find_element(By.LINK_TEXT,'凤凰网')
    actions.context_click(ele).perform()   ###鼠标右击
    actions.double_click(ele).perform()   ###鼠标双击
    time.sleep(5)
    web.close()
    
    • 鼠标操作移动
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.action_chains import ActionChains
    import time
    
    web = webdriver.Chrome('chromedriver.exe')
    web.implicitly_wait(5)
    web.get('https://www.2345.com/')
    
    actions = ActionChains(web)   ###拿到动作链对象
    source = web.find_element(By.LINK_TEXT,'百度')   ###定义原元素
    target = web.find_element(By.LINK_TEXT,'凤凰网')   ###定义目标元素
    actions.drag_and_drop(source,target).perform()   ###鼠标从source移动target
    web.close()
    
  • 组合键简介
    from selenium.webdriver.common.keys import Keys
    ### (根据字面命令解释如下:)先按下ctrl键,发送关键字"t",然后松开Ctrl键
    actions.key_down(Keys.CONTROL).send_keys('t').key_up(Keys.CONTROL).perform()   ###组合键,Ctrl+t 打开新网页
    
    • 附录(ActionChains方法列表)
    click(on_element=None) ——单击鼠标左键
    
    click_and_hold(on_element=None) ——点击鼠标左键,不松开
    
    context_click(on_element=None) ——点击鼠标右键
    
    double_click(on_element=None) ——双击鼠标左键
    
    drag_and_drop(source, target) ——拖拽到某个元素然后松开
    
    drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开
    
    key_down(value, element=None) ——按下某个键盘上的键
    
    key_up(value, element=None) ——松开某个键
    
    move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标
    
    move_to_element(to_element) ——鼠标移动到某个元素
    
    move_to_element_with_offset(to_element, xoffset, yoffset) ——移动到距某个元素(左上角坐标)多少距离的位置
    
    perform() ——执行链中的所有动作
    
    release(on_element=None) ——在某个元素位置松开鼠标左键
    
    send_keys(*keys_to_send) ——发送某个键到当前焦点的元素
    
    send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素
    

浏览器常用操作

  • 切换iframe
    有时候查找元素报错,显示没有该元素,可以试试切换iframe
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    web.get('https://www.douban.com')
    web.switch_to.frame(web.find_element(By.TAG_NAME,'iframe'))  ###找到tag为iframe,并切换到该iframe下
    web.switch_to.parent_frame()   ###切换回父iframe下
    web.close()
    
  • 获取cookies
    web.add_cookie({})   ###添加cookies
    web.get_cookies()   ###获得cookies
    
  • 选项卡管理
    • 前进
    web.forward()
    
    • 后退
    web.back()
    
    • 打开一个选项卡
    web.execute_script('window.open()')
    
    • 移动一个选项卡
    web.switch_to.window(web.window_handles[1])
    
    • 选项卡内容拉到最后
    web.execute_script('window.scrollTo(0,document.body.offsetHeight)')
    
    • 选项卡内容拉到顶部
    web.execute_script('window.scrollTo(document.body.offsetHeight,0)')
    
    • 选项卡内容拉到页面700位置(上拉类似)
    web.execute_script('window.scrollTo(0,700)')
    
    • 全屏
    `web.maximize_window()`
    
posted @   水开白  阅读(73)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示