美文网首页python爬虫
Python-selenium各种用法详解(元素拖拽,页面切换等

Python-selenium各种用法详解(元素拖拽,页面切换等

作者: 秦子帅 | 来源:发表于2018-06-05 09:52 被阅读37次

    前言

    上一篇讲了selenium的安装,不会的朋友可以去看一下:

    Selenium的安装与Firefox配置

    今天讲一下selenium的具体的用法,至于基本的方法大家可以直接查看selenium API,这里只写一部分:

    单个元素选取

    • find_element_by_id

    • find_element_by_name

    • find_element_by_xpath

    • find_element_by_link_text

    • find_element_by_partial_link_text

    • find_element_by_tag_name

    • find_element_by_class_name

    • find_element_by_css_selector

    多个元素选取

    • find_elements_by_name

    • find_elements_by_xpath

    • find_elements_by_link_text

    • find_elements_by_partial_link_text

    • find_elements_by_tag_name

    • find_elements_by_class_name

    • find_elements_by_css_selector

    Selenium具体用法

    1.页面交互

    下面我举例说明,打开百度浏览器,输入“selenium”,并进行搜索,打印源代码,具体代码如下:

    
    def pageInteraction():
       driver = webdriver.Firefox()
       driver.get('http://www.baidu.com')
       # 隐示等待,为了等待充分加载好网址
       driver.implicitly_wait(5)
       write = driver.find_element_by_id("kw")
       write.send_keys("Selenium")
       # 点击
       driver.find_element_by_id('su').click()
       try:
           # 显示等待,其中5的解释:5秒内每隔0.5毫秒扫描1次页面变化,直到指定的元素
           wait = WebDriverWait(driver, 5)
           wait.until(lambda driver: driver.find_element_by_id("content_left"))
           # 打印源代码
           print(driver.page_source)
    
       except TimeoutException:
           print("查询元素超时")
       finally:
           driver.close()
    
    

    2.页面元素推拽

    需要导入ActionChains包,url网址来源于网络

    
    def elementDragging():
       try:
           driver = webdriver.Firefox()
           url = "http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"
           driver.get(url)
           driver.implicitly_wait(5)
           # 切换到元素所在的frame
           driver.switch_to.frame("iframeResult")
           # 起点
           start = driver.find_element_by_id("draggable")
           # 终点
           end = driver.find_element_by_id("droppable")
    
           actions = ActionChains(driver)
           actions.drag_and_drop(start, end)
           # 执行
           actions.perform()
       except Exception:
           print("exception")
       finally:
           driver.close()
    
    

    3.页面切换

    通过百度搜索关键词并打开一个网页,切换到新的窗口页面,再打开第三个页面

    主要用到了下面三个方法:

    • current_window_handl:获得当前窗口句柄

    • window_handles:返回所有窗口的句柄到当前会话

    • switch_to_window():切换窗口函数

    
    def pageSwitching():
       driver = webdriver.Firefox()
       driver.get('http://www.baidu.com')
       #获取当前百度界面的窗口句柄
       BD_windows = driver.current_window_handle
       #打印
       print(BD_windows)
       # 隐示等待,为了等待充分加载好网址
       driver.implicitly_wait(5)
    
       write = driver.find_element_by_id("kw")
       write.send_keys("CSDN")
       # 点击
       driver.find_element_by_id('su').click()
       try:
           #打开一个网页
           driver.find_element_by_link_text(u'CSDN-专业IT技术社区').click()
           # 隐示等待,为了等待充分加载好网址
           driver.implicitly_wait(5)
           #打印所有的窗口
           print(driver.window_handles)
           # 隐示等待,为了等待充分加载好网址
           driver.implicitly_wait(5)
           #窗口切换到第二个网页
           driver.switch_to_window(driver.window_handles[1])
           #点击第二个网页的"写博客"按钮
           driver.find_element_by_link_text(u'写博客').click()
           time.sleep(5)
    
       except Exception:
           print("exception")
       finally:
           driver.quit()
    
    

    4.弹窗处理

    
    alert = driver.switch_to_alert()
    print(alert .text)
    alert .accept()
    
    

    下面是全部的源码:

    
    # coding=utf-8
    from selenium import webdriver
    from selenium.common.exceptions import TimeoutException
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver import ActionChains
    import time
    
    #页面交互
    def pageInteraction():
       driver = webdriver.Firefox()
       driver.get('http://www.baidu.com')
       # 隐示等待,为了等待充分加载好网址
       driver.implicitly_wait(5)
       write = driver.find_element_by_id("kw")
       write.send_keys("Selenium")
       # 点击
       driver.find_element_by_id('su').click()
       try:
           # 显示等待,其中5的解释:5秒内每隔0.5毫秒扫描1次页面变化,直到指定的元素
           wait = WebDriverWait(driver, 5)
           wait.until(lambda driver: driver.find_element_by_id("content_left"))
           # 打印源代码
           print(driver.page_source)
    
       except TimeoutException:
           print("查询元素超时")
       finally:
           time.sleep(3)
           driver.close()
    
    #页面元素拖拽
    def elementDragging():
       try:
           driver = webdriver.Firefox()
           url = "http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"
           driver.get(url)
           driver.implicitly_wait(5)
           # 切换到元素所在的frame
           driver.switch_to.frame("iframeResult")
           # 起点
           start = driver.find_element_by_id("draggable")
           # 终点
           end = driver.find_element_by_id("droppable")
    
           actions = ActionChains(driver)
           actions.drag_and_drop(start, end)
           # 执行
           actions.perform()
       except Exception:
           print("exception")
       finally:
           driver.close()
    
    #页面切换
    def pageSwitching():
       driver = webdriver.Firefox()
       driver.get('http://www.baidu.com')
       #获取当前百度界面的窗口句柄
       BD_windows = driver.current_window_handle
       #打印
       print(BD_windows)
       # 隐示等待,为了等待充分加载好网址
       driver.implicitly_wait(5)
    
       write = driver.find_element_by_id("kw")
       write.send_keys("CSDN")
       # 点击
       driver.find_element_by_id('su').click()
       try:
           #打开一个网页
           driver.find_element_by_link_text(u'CSDN-专业IT技术社区').click()
           # 隐示等待,为了等待充分加载好网址
           driver.implicitly_wait(5)
           #打印所有的窗口
           print(driver.window_handles)
           # 隐示等待,为了等待充分加载好网址
           driver.implicitly_wait(5)
           #窗口切换到第二个网页
           driver.switch_to_window(driver.window_handles[1])
           #点击第二个网页的"写博客"按钮
           driver.find_element_by_link_text(u'写博客').click()
           time.sleep(5)
    
       except Exception:
           print("exception")
       finally:
    
           driver.quit()
    
    if __name__ == '__main__':
        pageInteraction()
        #pageSwitching()
        #elementDragging()
    
    

    大家可以关注我的微信公众号:「秦子帅」一个有质量、有态度的公众号!

    相关文章

      网友评论

        本文标题:Python-selenium各种用法详解(元素拖拽,页面切换等

        本文链接:https://www.haomeiwen.com/subject/mjucsftx.html