Python——按键操作、时间等待、点击

发布时间:2019-09-22 07:49:53编辑:auto阅读(2416)

    一、按键操作

           selenium提供了比较完整的按键操作,在使用按键操作之前引入包from selenium.webdriver.commen.keys import Keys,然后就可以模拟按键操作。以进入百度网页为例,进行具体的按键操作。

    from selenium.webdriver.common.keys import Keys
    from selenium import webdriver
    import time
    driver = webdriver.Firefox()
    driver.get('http://www.baidu.com')
    time.sleep(3)
    # 找到输入框并输入指定内容
    driver.find_element_by_id('kw').send_keys('selenium')
    # ctr + a 全选输入框内的全部内容
    driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'a')
    time.sleep(3)
    # ctr + x 剪切输入框内的内容
    driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'x')
    time.sleep(2)
    # 搜索爬虫技巧
    driver.find_element_by_id('kw').send_keys(u'爬虫技巧')
    time.sleep(2)
    # 点击搜索按钮
    driver.find_element_by_id('su').click()
    time.sleep(6)
    # 退出浏览器
    driver.quit()

    二、时间等待

           selenium由网页驱动驱使浏览器进行操作,速度慢是一大特点,经常会出现代码执行完了,但是网页还没有加载完毕;如果这个时候操作里面的标签报出异常NoSuchElementException,解决的办法是时间休眠time.sleep()。

           引入一个网页等待的包from selenium.webdriver.support.ui import WebDriverWait

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium import webdriver
    driver = webdriver.Firefox()
    driver.get('http://www.baidu.com')
    # 在搜索框内输入helloworld
    # driver.find_element_by_id('kw').send_keys('hello wolrd')
    button = driver.find_element_by_id('su')
    # WebDriverWait 网页等待 值1:等待的对象  值2:等待的时间
    # WebDriverWait 经常和until not 一起使用 until直到
    # lambda 匿名函数  is_displayed是否已经显示
    is_visible = WebDriverWait(driver,10).until(lambda driver : button.is_displayed())
    print(is_visible)
    button.click()

         WebDriverWait()和time.sleep()的区别:(1)都是让程序等待指定执行的时间(2)time的时间是固定的,时间长短不会随着标签的加载速度而改变;WebDriverWait时间是固定的,等待多少时间要看标签的加载时间和指定的固定时间(3)如果在指定时间内,标签仍然没有加载出来,那么time和WebDriverWait都会报出异常。

    三、点击事件

         首先引入包from selenium.webdriver.common.action_chains import ActionChains

         以点击百度logo为例:

    from selenium import webdriver
    # action行动 chains链
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.support.ui import WebDriverWait
    import time
    driver = webdriver.Firefox()
    driver.get('http://www.baidu.com')
    # 找到百度logo的三种方法
    # logo = driver.find_element_by_class_name('index-logo-src')
    
    logo = driver.find_element_by_xpath('//div[@id="lg"]/img')
    
    # logo = driver.find_element_by_css_selector('#Id > img')
    
    # 等待直到标签出现
    WebDriverWait(driver,10).until(lambda driver : logo.is_displayed())
    # 单击事件
    # ActionChains(driver).click(logo).perform()
    # 双击事件
    ActionChains(driver).double_click(logo).perform()
    # context 上下文  context_click 
    # 右击事件
    action = ActionChains(driver).context_click(logo)
    
    # 操作时间会跑到perform队列里面 perform实现
    action.perform()
    #time.sleep(5)
    
    # 鼠标移动
    more = driver.find_element_by_class_name('bri')
    WebDriverWait(driver,10).until(lambda driver : more.is_displayed())
    ActionChains(driver).move_to_element(more).perform()

    四、标签选择

           引入一个包from selenium.webdriver.common.by import By

           建一个html文件

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <button id="red" class="red" οnclick="fun1()">按钮1</button>
        <button type="button" name="username" οnclick="fun2()">按钮2</button>
        <button type="button" οnclick="fun3()">按钮3</button>
        <button id="pink" οnclick="fun4()">按钮4</button>
        <script>
            function fun1() {
                document.body.style.backgroundColor = 'red'
            }
            function fun2() {
                document.body.style.backgroundColor = 'green'
            }
            function fun3() {
                document.body.style.backgroundColor = 'blue'
            }
            function fun4() {
                document.body.style.backgroundColor = 'pink'
            }
        </script>
    </body>
    </html>

           通过这些标签进行相关操作

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    import os
    import time
    driver = webdriver.Firefox()
    driver.get('file:///' + os.path.abspath('4.index.html'))
    # 通过标签名字来找到指定的标签
    btns = driver.find_elements_by_tag_name('button')
    print(btns)

           找到任意标签的四种方式

    # 1.通过索引来找到指定的标签
    btns[1].click()
    for btn in btns :
        #2.通过属性来找到指定的标签
        # 根据按钮属性点击 首先是一个button,然后name属性是username
        if btn.get_attribute('name') == 'username':
            btn.click()
        time.sleep(3)
        btn.click()
    
    # 找到的是第一个按钮
    driver.find_element_by_tag_name('button').click()
    # find_element_by_XX通过XX来找到所有标签当中的第一个标签
    # find_elements_by_XX通过XX来找到所有符合的标签
    
    # 3.弹出指定元素 如果不写索引 默认为最后一个
    driver.find_elements_by_css_selector('button').pop(2).click()
    
    # [type=button] []里面为限制条件 限制选择的内容
    driver.find_elements_by_css_selector('button[type="button"]').pop().click()
    # 4.通过...来找到指定的标签 by=By.XX
    driver.find_element(by=By.ID,value='pink').click()
    

     

关键字