前言
先来看看Selenium的定义:
Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。
Selenium安装
1.PIP安装:
在pip路径下输入下面代码:
pip install selenium |
2.通过Pycharm安装:
Pycharm软件中输入:File-->Default Settings
Firefox环境配置
1.网上下载火狐浏览器,很简单,不用多说
2.firefox路径添加环境变量
找到firefox的路径,比如C:\Program Files\Mozilla Firefox,找到后添加一下:
**3.下载geckodriver,**下载网址:
https://github.com/mozilla/geckodriver/releases
下载完成后把geckodriver.exe放在firefox的安装路径下(不要忘记)
4.在firefox中下载Selenium IDE
然后点击:获取更多组件,输入Selenium IDE,下载安装即可。
5.验证
可以在命令窗口下输入:
firefox.exe |
看看是否能正常跳转到网页。
再可以在Python编辑器上输入:
from selenium import webdriver browser = webdriver.Firefox() browser.get('http://baidu.com') |
如果成功就正常跳转了。
Python-selenium各种用法详解(元素拖拽,页面切换等)
上面讲了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”,并进行搜索,打印源代码,具体代码如下:
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() |
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。