点击标题下「蓝色微信名」可快速关注
前言
上一篇讲了selenium的安装,不会的朋友可以去看一下:
今天讲一下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”,并进行搜索,打印源代码,具体代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
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网址来源于网络
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
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():切换窗口函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
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.弹窗处理
1 2 3 |
alert = driver.switch_to_alert() print(alert .text) alert .accept() |
下面是全部的源码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# 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爬虫实战(3)-爬取豆瓣音乐Top250数据(超详细)
Python爬虫实战(2)-爬取小说”斗罗大陆3龙王传说”(超详细)
Python爬虫实战(1)-爬取“房天下”租房信息(超详细)

原文始发于微信公众号( 扎心了Python ):Python-selenium各种用法详解(元素拖拽,页面切换等)
发布者:秦子帅,转转请注明出处:http://qinzishuai.cn/index.php/2018/05/25/a517675977/