zoukankan      html  css  js  c++  java
  • selenium基本使用

    1.获取单个节点方法

    操作方法

    序号 操作 描述
    1 find_element_by_id() 通过id查找
    2 find_element_by_name() 通过name查找
    3 find_element_by_xpath() 通过xpath查找节点
    4 find_element_by_link_text() 通过给定的文字查找响应的"a链接"
    5 find_element_by_partial_link_text() 模糊定位文字链接
    6 find_element_by_tag_name() 通过标签名查找
    7 find_element_by_class_name() 通过class属性名查找
    8 find_element_by_css_selector() 通过css属性选择器查找

    等效操作

    browser.find_element_by_id("q")<==等效==>browser.find_element(By.ID,'q')
    

    注意

    1.find_element只能查找到第一个节点.
    2.当个节点查找,如果不存在怎会报错!
    3.返回结果为WebElement类型

    2.查找多个节点

    序号 操作 描述
    1 find_elements_by_id() 通过id查找
    2 find_elements_by_name() 通过name查找
    3 find_elements_by_xpath() 通过xpath查找节点
    4 find_elements_by_link_text() 通过给定的文字查找响应的"a链接"
    5 find_elements_by_partial_link_text() 模糊定位文字链接
    6 find_elements_by_tag_name() 通过标签名查找
    7 find_elements_by_class_name() 通过class属性名查找
    8 find_elements_by_css_selector() 通过css属性选择器查找

    等效操作

    browser.find_elements_by_css_selector('.serviceli')<==等效==>browser.find_elements(By.CSS_SELECOTR,'.serviceli')
    

    注意

    1.find_elements可以找到符合要求的所有节点.
    2.如果节点不存在,则返回空列表.
    3.返回结果为WebElement类型

    3.节点交互

    selenium可以驱动浏览器执行一些操作,也就是说可以模拟浏览器执行一些动作.

    常见的用法

    序号 操作 描述
    1 send_keys() 输入文字用
    2 clear() 清空文字用
    3 click() 点击按钮时用

    案例

    #!/usr/bin/envpython3
    #-*-coding:utf-8-*-
    #author:xiaoye
    
    fromseleniumimportwebdriver
    
    #设置ChromeOptions,使得浏览器可以无界面运行.
    chrome_options=webdriver.ChromeOptions()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--no-sandbox')
    #实例化浏览器对象
    browser=webdriver.Chrome(chrome_options=chrome_options)
    
    try:
    #设置访问网站
    browser.get('http://www.xilasuo.top/search/')
    #查找name='q'的属性值
    input=browser.find_element_by_name('q')
    #输入关键字
    input.send_keys('你好')
    #清除输入内容
    input.clear()
    #再次输入关键在
    input.send_keys('selenium')
    #获取"搜索按钮"
    button=browser.find_element_by_css_selector('.search-btn')
    #点击按钮
    button.click()
    #返回搜索后的连接
    print(browser.current_url)
    #返回搜索后的cookies
    print(browser.get_cookies())
    #返回搜索后的网页面
    print(browser.page_source)
    finally:
    browser.close()
    

    参考链接

    selenium-节点交互参考文档

    4.动作链

    鼠标拖动/键盘按键等,需要动作链来实现

    案例

    #!/usr/bin/envpython3
    #-*-coding:utf-8-*-
    #author:xiaoye
    
    fromseleniumimportwebdriver
    fromselenium.webdriverimportActionChains
    
    browser=webdriver.Chrome()
    url='https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
    
    browser.get(url)
    #跳转到id为iframeResult的frame中
    browser.switch_to.frame('iframeResult')
    #获取被拖拽元素
    source=browser.find_element_by_css_selector('#draggable')
    #获取目标元素
    target=browser.find_element_by_css_selector('#droppable')
    #实例化ActionChins
    actions=ActionChains(browser)
    #保存动作链到队列中
    actions.drag_and_drop(source,target)
    #触发动作链
    actions.perform()
    

    参考链接

    selenium动作连参考链接

    5.执行JavaScript

    模拟滚动条,滚动的操作.

    案例

    #!/usr/bin/envpython3
    #-*-coding:utf-8-*-
    #author:xiaoye
    
    fromseleniumimportwebdriver
    
    browser=webdriver.Chrome()
    browser.get('http://www.xilasuo.top')
    #使用js脚本将滚动条滑到最下面
    browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
    #弹窗"ToBottom"
    browser.execute_script('alert("ToBottom")')
    

    6.获取节点信息

    可以将selenium访问后的page_source作为html的资源提供给xpath/beautifulsoup/pyquery等解析,使用selenium也可解析内容.

    获取属性

    fromseleniumimportwebdriver
    
    browser=webdriver.Chrome()
    browser.get('http://www.xilasuo.top')
    logo=browser.find_element_by_class_name('logo-title')
    print(logo)
    #使用get_attribute反向获取class属性名称
    print(logo.get_attribute('class'))
    

    其他操作

    类似于beautifulsoup的get_text()和pyquery的text()

    fromseleniumimportwebdriver
    
    browser=webdriver.Chrome()
    browser.get('http://www.xilasuo.top')
    logo=browser.find_element_by_class_name('logo-title')
    #获取文本值
    print(logo.text)
    #获取id节点信息
    print(logo.id)
    #获取该节点在页面的相对位置
    print(logo.location)
    #获取标签名
    print(logo.tag_name)
    #获取宽/高值
    print(logo.size)
    

    7.切换frame

    网页中有一种节点是iframe,也就是子Frame.相当于页面中的页面,结构与外部网页面结构完全一致.

    #切换子Frame
    switch_to.frame()
    #切换父Frame
    switch_to.parent_frame()
    

    8.延时等待

    在Selenium中,get()方法会在网页框架加载结束后结束执行,如果此时执行page_source可能导致加载页面不完整.

    隐式等待

    #直到需要等待的时间结束时才返回结果或者抛出异常
    browser.implicitly(10)
    

    显示等待

    #如果在等待时间内加载出需要的内容就返回加载的内容,如果未完成加载则抛出超时异常.
    
    fromseleniumimportwebdriver
    fromselenium.webdriver.common.byimportBy
    fromselenium.webdriver.common.keysimportKeys
    fromselenium.webdriver.supportimportexpected_conditionsasEC
    fromselenium.webdriver.support.waitimportWebDriverWait
    
    #设置ChromeOptions,使得浏览器可以无界面运行.
    chrome_options=webdriver.ChromeOptions()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--no-sandbox')
    #实例化浏览器对象
    browser=webdriver.Chrome(chrome_options=chrome_options)
    try:
    #设置访问网站
    browser.get('http://www.xilasuo.top/search/')
    #查找name='q'的属性值
    input=browser.find_element_by_name('q')
    #发送关键字
    input.send_keys('你好')
    #点击搜索
    input.send_keys(Keys.ENTER)
    #显性等待浏览器加载,设置为10s
    wait=WebDriverWait(browser,10)
    #注意:presece_of_element_located传入的是一个元祖
    #指定class='news-list'的加载时间
    lis=wait.until(EC.presence_of_element_located((By.CLASS_NAME,'news-list')))
    print(lis)
    finally:
    browser.close()
    

    等待条件

    参考链接
    EC显示等待的判断条件

  • 相关阅读:
    关于表格
    split函数
    javac classpath和java classpath
    ORA01460: 转换请求无法实现或不合理 的原因
    业务流程学习(1)
    启动oracle10监听器错误:本地计算机上的OracleOraDb10g_home1TNSListener服务启动后又停止了 解决方案
    CF1594F. Ideal Farm
    CF1373G. Pawns
    CF1373F. Network Coverage
    CF1515F. Phoenix and Earthquake
  • 原文地址:https://www.cnblogs.com/xilasuo/p/13127116.html
Copyright © 2011-2022 走看看