当前位置: 首页 > news >正文

网站建设费算什么费用ps软件电脑版

网站建设费算什么费用,ps软件电脑版,软件开发模型的优缺点,中国企业500强营收总额首超百万亿一.安装 安装WebDriver 查看chrome版本号#xff0c;设置-帮助-关于Google chrome#xff0c;找到版本号。 可以到这个网站进行下载对应版本的chromedriver,如果chrome浏览器版本过高,可以下载最新版的chromedriver进行使用 Chrome for Testing availability 下载下来之后…一.安装 安装WebDriver 查看chrome版本号设置-帮助-关于Google chrome找到版本号。 可以到这个网站进行下载对应版本的chromedriver,如果chrome浏览器版本过高,可以下载最新版的chromedriver进行使用 Chrome for Testing availability 下载下来之后将chromedriver.exe放到安装的Python环境的文件夹内  终端输入chromedriver -version验证 必要的话,可以重启电脑,可能进行编写完代码进行启动的过程很慢,可以耐心等待一段时间,基本上都是可以运行的 二.源码分析 首先启动WebDriver并绑定特定端口开启Web服务当作Remote ServerClient 首次请求会创建1个Session向remote server发送HTTP请求启动浏览器Remote Server解析请求完成相应操作并返回response启动浏览器后Client Cookie携带session id再次给Remote Server发送HTTP请求操作浏览器定位页面元素等等解析response判断脚本是否继续还是结束 三.webdriver操作方法 1.元素操作 click()点击事件   clear()清空事件   send_keys()输入事件 拿百度举例,我们可以现在搜索输入框中清空数据(clear),然后输入数据(send_keys),最后点击按钮进行跳转(click)  from selenium import webdriver from selenium.webdriver.common.by import By import time if __name__ __main__:driverwebdriver.Chrome()driver.get(https://www.baidu.com/)driver.find_element(By.ID,kw).clear()driver.find_element(By.ID, kw).send_keys(zxn)driver.find_element(By.ID,su).click()time.sleep(2)driver.close()2.浏览器操作 1. maximize_window()      最大化浏览器窗口--模拟浏览器最大化按钮 2. set_window_size(widthheight)  设置浏览器窗口大小--设置浏览器宽、高(像素点) 3. set_window_position(x, y)    设置浏览器窗口位置--设置浏览器位置 4. back()    后退--模拟浏览器后退按钮 5. forward()    前进--模拟浏览器前进按钮 6. refresh()    刷新--模拟浏览器F5刷新 7. close()    关闭当前窗口--模拟点击浏览器关闭按钮 8. quit()     关闭浏览器驱动对象--关闭所有程序启动的窗口 9. title        获取页面title 10. current_url   获取当前页面URL 可以根据以下的代码进行理解  from selenium import webdriver from selenium.webdriver.common.by import By import time if __name__ __main__:driverwebdriver.Chrome()driver.maximize_window()driver.get(https://www.baidu.com/)driver.find_element(By.ID,kw).clear()driver.find_element(By.ID, kw).send_keys(zxn)driver.find_element(By.ID,su).click()time.sleep(2)driver.back()time.sleep(2)driver.forward()time.sleep(2)driver.refresh()time.sleep(2)driver.close() close()    关闭当前窗口--模拟点击浏览器关闭按钮   关闭单个页面 注意:当打开新的页面时,close方法关闭的是原页面 比如下面的代码,打开了百度的页面,之后点击百度地图页面,打开了一个新的标签页,close方法关闭了百度页面,而,百度地图页面并没有被关闭 from selenium import webdriver from selenium.webdriver.common.by import By import time if __name__ __main__:driverwebdriver.Chrome()driver.maximize_window()driver.get(https://www.baidu.com/)driver.find_element(By.CSS_SELECTOR,a[hrefhttp://map.baidu.com]).click()time.sleep(2)driver.close()time.sleep(2) quit()     关闭浏览器驱动对象--关闭所有程序启动的窗口  #关闭所有的页面 webdriver的属性: from selenium import webdriver from selenium.webdriver.common.by import By import time if __name__ __main__:driverwebdriver.Chrome()driver.maximize_window()driver.get(https://www.baidu.com/)print(driver.title)print(driver.current_url) 3.获取元素信息 1. size       返回元素大小 2. text        获取元素的文本 3. get_attribute( xxx)     获取属性值传递的参数为元素的属性名 4. is_displayed()              判断元素是否可见 5. is_enabled()                判断元素是否可用 6. is_selected()                判断元素是否选中用来检查复选框或单选按钮是否被选中 from selenium import webdriver from selenium.webdriver.common.by import By import time if __name__ __main__:driverwebdriver.Chrome()driver.maximize_window()driver.get(https://www.baidu.com/)print(driver.find_element(By.CSS_SELECTOR,a[hrefhttp://map.baidu.com]).size)print(driver.find_element(By.CSS_SELECTOR, a[hrefhttp://map.baidu.com]).text)print(driver.find_element(By.CSS_SELECTOR, a[hrefhttp://map.baidu.com]).get_attribute(href))driver.quit() 4.鼠标操作 常见的鼠标操作有:点击、右击、双击、悬停、拖拽等对于这些鼠标操作Selenium都封装了相应的操作方法。 说明:在Selenium中将操作鼠标的方法封装在ActionChains类中 实例化对象: action ActionChains(driver)方法: 1. context_click(element)                 右击--模拟鼠标右键点击效果 2. double_click(element)                 双击--〉模拟鼠标双击效果 3. drag_and_drop(source,target)    拖动--〉模拟鼠标拖动效果 4. move_to_element(element)        悬停--模拟鼠标悬停效果 5. perform()         执行--此方法用来执行以上所有鼠标操作 为了更好的学习其他方法我们先学习perform()执行方法,因为所有的方法都需要执行才能生效 from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.by import By import time if __name__ __main__:driverwebdriver.Chrome()driver.maximize_window()driver.get(https://www.baidu.com/)actionActionChains(driver)action.context_click(driver.find_element(By.ID,su))action.perform()time.sleep(2)driver.quit() 其他的操作都类似,注意悬停鼠标操作的时候不要动鼠标 也可以直接perform操作 actionActionChains(driver)action.move_to_element(driver.find_element(By.ID,s-usersetting-top)).perform() 5.键盘操作 导包:from selenium.webdriver.common. keys import Keys 1. send_keys ( Keys.BACK_SPACE)        删除键(BackSpace) 2. send_keys(Keys.SPACE)                      空格键(Space) 3. send_keys(Keys.TAB)                           制表键(Tab) 4. send_keys (Keys.ESCAPE)                  回退键(Esc) 5. send_keys (Keys.ENTER)                     回车键(Enter) 6. send_keys (Keys.coTROL , a )            全选(CtrlA) 7. send_keys(Keys.CONTROL, c )           复制(CtrlC) 下面是一个示例代码 from selenium import webdriver from selenium.webdriver import Keys from selenium.webdriver.common.by import By import time if __name__ __main__:driverwebdriver.Chrome()driver.maximize_window()driver.get(https://www.baidu.com/)driver.find_element(By.ID,kw).send_keys(woshini)time.sleep(2)driver.find_element(By.ID, kw).send_keys(Keys.BACKSPACE)time.sleep(2)driver.find_element(By.ID, kw).send_keys(Keys.CONTROL,a)driver.find_element(By.ID, kw).send_keys(Keys.BACKSPACE)time.sleep(2)driver.quit() 6.元素等待  概念:在定位页面元素时如果未找到会在指定时间内一直等待的过程 元素等待的类型:   1.隐式等待2.显示等待 1.隐式等待 概念:定位元素时如果能定位到元素则直接返回该元素不触发等待;如果不能定位到该元素则间隔一段时间后再去定位元素;如果在达到最大时长时还没有找到指定元素则抛出元素不存在的异常NoSuchElementException 。 方法: driver. implicitly_wait(timeout) (timeout:为等待最大时长单位:秒) 说明:隐式等待为全局设置只需要设置一次就会作用于所有元素) 注意:当隐式等待被激活时虽然目标元素已经出现了,但是还是会由于当前页面内的其他元素的未加载完成而继续等待进而增加代码的执行时长 from selenium import webdriver from selenium.webdriver.common.by import By if __name__ __main__:driverwebdriver.Chrome()driver.maximize_window()driver.get(https://www.baidu.com/)driver.implicitly_wait(10)driver.find_element(By.ID,kw).send_keys(woshini)driver.find_element(By.ID, su).click()driver.quit()2.显式等待 概念:定位指定元素时如果能定位到元素则直接返回该元素不触发等待:如果不能定位到该元素则间隔一段时间后再去定位元素;如果在达到最大时长时还没有找到指定元素则抛出超时异常TimeoutException 。 在Selenium中把显式等待的相关方法封装在WebDriverWait类中 1导包等待类-- from selenium. webdriver. support.wait import webDriverWait 2. webDriverWait(driver,timeout, poll_frequencyo.5) driver:浏览器驱动对象timeout:超时的时长单位:秒poll_frequency:检测间隔时间默认为0.5秒 3.调用方法until(method):直到...时 method:函数名称该函数用来实现对元素的定位一般使用匿名函数来实现: lambda x: x.find_element_by_id(userA) 4. element webDriverwait(driver101).until( lambda x: x.find_element_by_id(userA) from selenium.webdriver.common.by import By import time from selenium.webdriver.support.wait import WebDriverWaitif __name__ __main__:driverwebdriver.Chrome()driver.maximize_window()driver.get(https://www.baidu.com/)elementWebDriverWait(driver,10,1).until(lambda x:x.find_element(By.ID,kw))element.send_keys(zxn)time.sleep(2)driver.quit() 隐式等待和显式等待对比 元素个数调用方法异常类型隐式等待全局浏览器对象调用NoSuchElementException显式等待单个实例化对象调用TimeoutException 四.元素定位 1.常见的元素定位 2.ID定位 By.ID id属性在HTML中是唯一的因此使用id定位可以确保找到页面上唯一的元素。 由于id是唯一的浏览器在查找元素时可以快速定位到目标元素提高了定位的效率 例如百度的搜索框的id为kw from selenium import webdriver from selenium.webdriver.common.by import By import time #实例化webdriver driverwebdriver.Chrome() driver.get(https://www.baidu.com/) #页面最大化 driver.maximize_window() driver.find_element(By.ID,kw).send_keys(woshi) driver.find_element(By.ID,su).click() time.sleep(2)3.类名定位 By.CLASS_NAME 因为id是唯一的,但是className相同的element是很多的,因此使用find_element显示是不妥的,但是也是可以使用的,默认找到的是第一个className相同的标签 比如下面的标签,我们通过find_elements,通过className找到值为channel-link的标签(返回的是list集合),然后点击综艺标签. 代码实现具体如下 from selenium import webdriver from selenium.webdriver.common.by import By import time #实例化webdriver driverwebdriver.Chrome() driver.get(https://www.bilibili.com/) #页面最大化 driver.maximize_window() driver.find_elements(By.CLASS_NAME,channel-link)[4].click() time.sleep(2)注意:如果一个标签有多个class(中间用空格隔开),此时我们只能用单个class进行定位 4.标签名定位 By.TAG_NAME 通过标签名定位元素位置 from selenium import webdriver from selenium.webdriver.common.by import By import time #实例化webdriver driverwebdriver.Chrome() driver.get(https://www.bilibili.com/) #页面最大化 driver.maximize_window() #input标签只有一个 driver.find_element(By.TAG_NAME,input).send_keys(zxn) driver.find_elements(By.TAG_NAME,a)[0] time.sleep(2) driver.close()5.名称定位 By.NAME name属性通常在表单中有,比如百度的输入框 注意name也不是唯一的 6.链接文本定位 By.LINK_TEXT  使用链接(a标签)的全部文字定位元素,比如通过百度页面的新闻文本进行定位 from selenium import webdriver from selenium.webdriver.common.by import By import time #实例化webdriver driverwebdriver.Chrome() driver.get(https://www.baidu.com/) #页面最大化 driver.maximize_window() #input标签只有一个 driver.find_element(By.LINK_TEXT,新闻).click() time.sleep(2) driver.close() 7.链接部分文本定位 By.PARTIAL_LINK_TEXT 使用链接(a标签)的部分文字定位元素,相当于模糊匹配,比如下面代码,模糊匹配文本含闻的可点击文本 from selenium import webdriver from selenium.webdriver.common.by import By import time #实例化webdriver driverwebdriver.Chrome() driver.get(https://www.baidu.com/) #页面最大化 driver.maximize_window() #input标签只有一个 driver.find_element(By.PARTIAL_LINK_TEXT,闻).click() time.sleep(2) driver.close() 8.css_selector定位 By.CSS_SELECTOR 选择器 格式 示例 示例说明 标签选择器 html标签 input 选择所有input元素 ID选择器 #id属性值 #kw 选择所有idkw的元素 类选择器 .class属性值 .nav-search-input 选择所有classnav-search-input的元素 属性选择器 [属性名] [namewd] 选择所有name等于wd的元素 组合选择器 标签加属性描述 input.s_ipt 选择所有class_ipt的input元素 父子关系 元素1元素2 diva 选择所有父级是div的a元素 后代关系 元素1 元素2 div a 选择div中的所有a元素 第一子元素 :first-child a:first-child 选择所有a元素且该元素是其父级的第一个元素 最后一个元素 :last-child a:last-child 选择所有a元素且该元素是其父级的最后一个元素 顺序选择器 :nth-child(n) a:nth-child(2) 选择所有a元素且该元素是其父级的第二个子元素 1. ID选择器 from selenium import webdriver from selenium.webdriver.common.by import By import time #实例化webdriver driverwebdriver.Chrome() driver.get(https://www.baidu.com/) #页面最大化 driver.maximize_window() #input标签只有一个 driver.find_element(By.CSS_SELECTOR,#kw).send_keys(测试) driver.find_element(By.CSS_SELECTOR,#su).click() time.sleep(2) driver.close()2.类选择器 from selenium import webdriver from selenium.webdriver.common.by import By import time #实例化webdriver driverwebdriver.Chrome() driver.get(https://www.bilibili.com/) #页面最大化 driver.maximize_window() #input标签只有一个 driver.find_element(By.CSS_SELECTOR,.nav-search-input).send_keys(测试) driver.find_element(By.CSS_SELECTOR,.nav-search-btn).click() time.sleep(2) driver.close()3.属性选择器 from selenium import webdriver from selenium.webdriver.common.by import By import time #实例化webdriver driverwebdriver.Chrome() driver.get(https://www.baidu.com/) #页面最大化 driver.maximize_window() #input标签只有一个 driver.find_element(By.CSS_SELECTOR,[namewd]).send_keys(测试) driver.find_element(By.CSS_SELECTOR,#su).click() time.sleep(2) driver.close()4.标签选择器 选择a标签中hrefhttp://image.baidu.com/的element from selenium import webdriver from selenium.webdriver.common.by import By import time #实例化webdriver driverwebdriver.Chrome() driver.get(https://www.baidu.com/) #页面最大化 driver.maximize_window() #input标签只有一个 driver.find_element(By.CSS_SELECTOR,a[hrefhttp://image.baidu.com/]).click() time.sleep(2) driver.close() href后面加*表示模糊匹配,此时href中只要包含 image.baidu即可 from selenium import webdriver from selenium.webdriver.common.by import By import time #实例化webdriver driverwebdriver.Chrome() driver.get(https://www.baidu.com/) #页面最大化 driver.maximize_window() #input标签只有一个 driver.find_element(By.CSS_SELECTOR,a[href*image.baidu]).click() time.sleep(2) driver.close() href后面加^表示匹配开头,结尾模糊匹配,此时href中只要开头为http://image即可 from selenium import webdriver from selenium.webdriver.common.by import By import time #实例化webdriver driverwebdriver.Chrome() driver.get(https://www.baidu.com/) #页面最大化 driver.maximize_window() #input标签只有一个 driver.find_element(By.CSS_SELECTOR,a[href^http://image]).click() time.sleep(2) driver.close() href后面加$表示匹配开头,开头模糊匹配,此时href中只要结尾为image.baidu.com/即可  from selenium import webdriver from selenium.webdriver.common.by import By import time #实例化webdriver driverwebdriver.Chrome() driver.get(https://www.baidu.com/) #页面最大化 driver.maximize_window() #input标签只有一个 driver.find_element(By.CSS_SELECTOR,a[href$image.baidu.com/]).click() time.sleep(2) driver.close()5.组合选择器 from selenium import webdriver from selenium.webdriver.common.by import By import time #实例化webdriver driverwebdriver.Chrome() driver.get(https://www.baidu.com/) #页面最大化 driver.maximize_window() #input标签只有一个 driver.find_element(By.CSS_SELECTOR,input.s_ipt).send_keys(测试) driver.find_element(By.CSS_SELECTOR,#su).click() time.sleep(2) driver.close() 6.父子关系 可以看到form span input总共有两个标签,其中一个为输入框,一个为点击搜索 from selenium import webdriver from selenium.webdriver.common.by import By import time #实例化webdriver driverwebdriver.Chrome() driver.get(https://www.baidu.com/) #页面最大化 driver.maximize_window() #input标签只有一个 driver.find_elements(By.CSS_SELECTOR,form span input)[0].send_keys(测试) driver.find_elements(By.CSS_SELECTOR,form span input)[1].click() time.sleep(2) driver.close() 7.后代关系 当我们form input,此时表示form标签下的所有input标签,不管多少层级,都筛选出来 8.顺序选择器  选择视频进行点击,此时视频位于第8个a标签(注意从1开始) from selenium import webdriver from selenium.webdriver.common.by import By import time #实例化webdriver driverwebdriver.Chrome() driver.get(https://www.baidu.com/) #页面最大化 driver.maximize_window() #input标签只有一个 driver.find_element(By.CSS_SELECTOR,div#s-top-left a:nth-child(6)).click() time.sleep(2) driver.close()tips:可以通过以下操作进行复制selector进行CSS_SELECTOR的便捷操作 9. xpath定位 By.XPATH 说明 举例 从根节点开始选取(绝对路径) /html/div/ 从任意节点开始选取(相对路径) //div列举出所有div标签 选取当前节点的父节点 //input/.. 会选取 input 的父节点 选取属性或者根据属性选取 使用id属性定位 //div[idid_value] 使用class属性定位 //a[classmnav] 使用name属性定位 //div[namewd] 多个属性定位 //input[namewd and classs_ipt] 第n个元素使用index定位 //div[ids-top-left]/a[3] 最后一个元素 //a[classmnav][last()] 属性包含某字段 //div[contains(title,text)] 属性以某字段开头 //div[starts-with(title,text)] 属性以某字段结尾 //div[ends-with(title,text)] 文本包含 //a[contains(text(),网盘)] 文本等于 //span[text() 菜单] 同级弟弟元素 //div[idid]/following-sibling::div 同级哥哥元素 //div[idid]/preceding-sibling::div 因为和css_selector类似,所以不过多演示 from selenium import webdriver from selenium.webdriver.common.by import By import time #实例化webdriver driverwebdriver.Chrome() driver.get(https://www.baidu.com/) #页面最大化 driver.maximize_window() #input标签只有一个 driver.find_element(By.XPATH,//div[ids-top-left]/a[3]).click() time.sleep(2) driver.close()通用的xpath也可以直接进行复制 五.不同元素定位实战  可以到此网站进行训练:https://iviewui.com/view-ui-plus/component/ 1.单选框  现在的需求是将Apple,Android,Window进行依次点击  通过标签属性进行定位 from selenium import webdriver from selenium.webdriver.common.by import By import timeif __name__ __main__:driverwebdriver.Chrome()driver.get(https://iviewui.com/view-ui-plus/component/form/radio)driver.find_elements(By.XPATH,//input[typeradio and classivu-radio-input])[1].click()time.sleep(2)driver.find_elements(By.XPATH, //input[typeradio and classivu-radio-input])[2].click()time.sleep(2)driver.find_elements(By.XPATH, //input[typeradio and classivu-radio-input])[3].click()time.sleep(2)driver.close() 通过文本内容进行定位:  from selenium import webdriver from selenium.webdriver.common.by import By import timeif __name__ __main__:driverwebdriver.Chrome()driver.get(https://iviewui.com/view-ui-plus/component/form/radio)driver.find_element(By.XPATH,//span[text()Apple]).click()time.sleep(2)driver.find_element(By.XPATH, //span[text()Android]).click()time.sleep(2)driver.find_element(By.XPATH, //span[text()Windows]).click()time.sleep(2)driver.close()2.多选框 同理 from selenium import webdriver from selenium.webdriver.common.by import By import timeif __name__ __main__:driverwebdriver.Chrome()driver.get(https://iviewui.com/view-ui-plus/component/form/checkbox)driver.find_elements(By.XPATH,//span[text()香蕉])[0].click()time.sleep(2)driver.find_elements(By.XPATH, //span[text()苹果])[0].click()time.sleep(2)driver.find_elements(By.XPATH, //span[text()西瓜])[0].click()time.sleep(2)driver.close() 3.下拉框 到这个网址进行锻炼:https://sahitest.com/demo/selectTest.htm select.select_by_index: 通过option的顺序来选择(从0开始) from selenium import webdriver from selenium.webdriver.common.by import By import timefrom selenium.webdriver.support.select import Selectif __name__ __main__:driverwebdriver.Chrome()driver.get(https://sahitest.com/demo/selectTest.htm)time.sleep(2)selectSelect(driver.find_element(By.ID,s1))select.select_by_index(1)time.sleep(2)driver.close() select.select_by_value: 通过option的value属性值来选择 if __name__ __main__:driverwebdriver.Chrome()driver.get(https://sahitest.com/demo/selectTest.htm)time.sleep(2)selectSelect(driver.find_element(By.ID,s1))select.select_by_value(51)time.sleep(2)driver.close() select.select_by_visible_text 通过option文本值来选择 from selenium import webdriver from selenium.webdriver.common.by import By import timefrom selenium.webdriver.support.select import Selectif __name__ __main__:driverwebdriver.Chrome()driver.get(https://sahitest.com/demo/selectTest.htm)time.sleep(2)selectSelect(driver.find_element(By.ID,s1))select.select_by_visible_text(Cell Phone)time.sleep(2)driver.close() 4.级联选择器 在网站:https://iviewui.com/view-ui-plus/component/form/cascader 进行级联选择器的训练  from selenium import webdriver from selenium.webdriver.common.by import By import timeif __name__ __main__:driverwebdriver.Chrome()driver.get(https://iviewui.com/view-ui-plus/component/form/cascader)driver.find_element(By.XPATH,//input[classivu-input ivu-input-default]).click()time.sleep(2)driver.find_element(By.XPATH,//li[contains(text(),北京)]).click()time.sleep(2)driver.find_element(By.XPATH, //li[contains(text(),故宫)]).click()time.sleep(2)driver.close() 5.日期选择器 在https://iviewui.com/view-ui-plus/component/form/date-picker 进行训练 此时我们使用的是直接send_keys进行操作  from selenium import webdriver from selenium.webdriver.common.by import By import timeif __name__ __main__:driverwebdriver.Chrome()driver.get(https://iviewui.com/view-ui-plus/component/form/date-picker)driver.find_element(By.XPATH,//input[classivu-input ivu-input-default ivu-input-with-suffix]).send_keys(2023-12-12)time.sleep(2)driver.find_elements(By.XPATH,//input[classivu-input ivu-input-default ivu-input-with-suffix])[1].send_keys(2023-12-18 - 2024-01-16)time.sleep(2)driver.close() 6.三种弹框 1.alert 在:Alert Test 进行训练 from selenium import webdriver from selenium.webdriver.common.by import By import timeif __name__ __main__:driverwebdriver.Chrome()driver.get(https://sahitest.com/demo/alertTest.htm)driver.find_element(By.NAME,b1).click()time.sleep(2)print(driver.switch_to.alert.text)driver.switch_to.alert.accept()time.sleep(2)driver.close() 2.confirm from selenium import webdriver from selenium.webdriver.common.by import By import timeif __name__ __main__:driverwebdriver.Chrome()driver.get(https://sahitest.com/demo/confirmTest.htm)driver.find_element(By.NAME,b1).click()time.sleep(2)print(driver.switch_to.alert.text)#点击确定# driver.switch_to.alert.accept()#点击取消driver.switch_to.alert.dismiss()time.sleep(2)driver.close() 3.Prompt from selenium import webdriver from selenium.webdriver.common.by import By import timeif __name__ __main__:driverwebdriver.Chrome()driver.get(https://sahitest.com/demo/promptTest.htm)driver.find_element(By.NAME,b1).click()time.sleep(2)driver.switch_to.alert.send_keys(测试)time.sleep(2)#点击确定driver.switch_to.alert.accept()#点击取消# driver.switch_to.alert.dismiss()time.sleep(2)driver.close() 7.文件上传 这个网站:https://sahitest.com/demo/php/fileUpload.htm from selenium import webdriver from selenium.webdriver.common.by import By import timeif __name__ __main__:driverwebdriver.Chrome()driver.get(https://sahitest.com/demo/php/fileUpload.htm)driver.find_element(By.ID,file).send_keys(rC:\Users\lenovo\Desktop\认证\阿里云.png)time.sleep(2)driver.find_element(By.NAME,submit).click()time.sleep(2)driver.close() 8.文件下载 到这个网站:http://chromedriver.storage.googleapis.com/index.html from selenium import webdriver from selenium.webdriver.common.by import By import time,osif __name__ __main__:chromeOptionswebdriver.ChromeOptions()#设置下载路径prefs{download.default_directory:rD:\PythonCave\selenium\file}chromeOptions.add_experimental_option(prefs,prefs)driverwebdriver.Chrome(chromeOptions)driver.get(http://chromedriver.storage.googleapis.com/index.html)time.sleep(2)driver.find_element(By.XPATH,/html/body/table/tbody/tr[3]/td[2]/a).click()time.sleep(2)driver.find_element(By.XPATH, /html/body/table/tbody/tr[7]/td[2]/a).click()time.sleep(2)driver.close()9.iframe框架 frame是网页开发中常见应用。例如页面布局、局部刷新页面分割都是frame的用途表现 使用frame会给用户带来非常舒适的使用感受。 frame包括(frameset标签、frame标签、iframe标签) frameset和frame结合一起使用可以对页面进行分割。例如sahitest的Frames Test。对页面进行上下切割并嵌套html页面 iframe是个内联框架是在页面里生成个内部框架。可以嵌套多个html页面。大多网页使用的是iframe框架。比如163邮箱 这个网站练习:IFRAME Tests from selenium import webdriver from selenium.webdriver.common.by import By import timeif __name__ __main__:driverwebdriver.Chrome()driver.get(https://sahitest.com/demo/iframesTest.htm)driver.find_element(By.ID,checkRecord).clear()driver.find_element(By.ID, checkRecord).send_keys(wuhu~)time.sleep(2)#用下标定位iframedriver.switch_to.frame(0)driver.find_element(By.CSS_SELECTOR, a[hreflinkTest.htm]).click()time.sleep(2)driver.close() 同样的也可以通过id,name进行定位,也可以使用下面的元素定位来进行切换 driver.switch_to.frame(driver.find_element(By.XPATH,/html/body/iframe))可以切换到上一级iframe from selenium import webdriver from selenium.webdriver.common.by import By import timeif __name__ __main__:driverwebdriver.Chrome()driver.get(https://sahitest.com/demo/iframesTest.htm)driver.find_element(By.ID,checkRecord).clear()driver.find_element(By.ID, checkRecord).send_keys(wuhu~)time.sleep(2)#用下标定位iframedriver.switch_to.frame(driver.find_element(By.XPATH,/html/body/iframe))driver.find_element(By.CSS_SELECTOR, a[hreflinkTest.htm]).click()driver.switch_to.parent_frame()driver.find_element(By.ID,checkRecord).clear()driver.find_element(By.ID, checkRecord).send_keys(wula~)time.sleep(2)time.sleep(2)driver.close() 也可以直接切换到default_content driver.switch_to.default_content() 注意:frame之间不能互相切换,只能主页面和frame之间进行切换 10.多窗口切换 在Selenium中封装了获取当前窗口包柄、获取所有窗口句柄和切换到指定句柄窗口的方法句柄: 英文handle窗口的唯一识别码 方法: 1). driver. current_window_handle          --获取当前窗口句柄 2). drhver.window_handles                     --获取所有窗口句柄 3). driver.switch_to.window( handle)       --切换指定句柄窗口 任意一个窗口都有唯一的一个句柄值可以通过句柄值完成窗口切换操作 from selenium import webdriver from selenium.webdriver.common.by import By import timeif __name__ __main__:driverwebdriver.Chrome()driver.maximize_window()driver.implicitly_wait(10)driver.get(https://www.baidu.com/)driver.find_element(By.CSS_SELECTOR,a[hrefhttp://tieba.baidu.com/]).click()print(当前页面的句柄值:,driver.current_window_handle)#切换窗口操作handlesdriver.window_handlesdriver.switch_to.window(handles[-1])driver.find_element(By.ID,wd1).send_keys(抗压背锅)driver.find_element(By.XPATH,//*[idtb_header_search_form]/span[1]/a).click()time.sleep(2)driver.quit() 注意:如果关闭了当前页面,你需要切换到原页面才能进行相应的操作,否则会报错 11.截图操作 from selenium import webdriver from selenium.webdriver.common.by import By import time,osif __name__ __main__:if not os.path.exists(./img):os.mkdir(./img)driverwebdriver.Chrome()driver.maximize_window()driver.implicitly_wait(10)driver.get(https://www.baidu.com/)driver.find_element(By.ID,kw).send_keys(woshi)driver.find_element(By.ID,su).click()time.sleep(2)#推荐使用png#使用时间戳来标记文件,windows系统文件名不支持特殊符号,尽量只是用下划线cur_timetime.strftime(%Y%m%d_%H%M%S)driver.get_screenshot_as_file(./img/info_{}.png.format(cur_time))driver.quit() 12.验证码处理 在web应用中大部分系统在用户登录注册的时候都要求输入验证码而我们在设计自动化测试脚本的时候就需要面临处理验证码的问题。 说明: Selenium中并没有对验证码处理的方法在这里我们介绍一下针对验证码的几种常用处理方式 方式: 去掉验证码(测试环境下-采用)设置万能验证码(生产环境和测试环境下-采用)验证码识别技术(通过Python-tesseract来识别图片类型验证码;识别率很难达到100%)记录cookie(通过记录cookie进行跳过登录)   什么是cookie Cookie是由web服务器生成的并且保存在用户浏览器上的小文本文件它可以包含用户相关的信息。Cookie数据格式:键值对组成python中的字典)Cookie产生:客户端请求服务器如果服务器需要记录该用户状态就向客户端浏览器颁发一个Cookie数据Cookie使用:当浏览器再次请求该网站时浏览器把请求的数据和Cookie数据一同提交给服务器服务器检查该Cookie以此来辨认用户状态。   cookie绕过验证码登录的原理: 说明:客户端登录账号后将登录状态相关的cookie 信息发送给服务器保存在发送请求携带的cookie 信息如果和服务器保留的一致则服务器任务客户端为登录状态 应用场景: 实现会话跟踪记录用户登录状态实现记住密码和自动登录的功能用户未登录的状态下记录购物车中的商品 现在进行代码实验: 字段数据的key必须为name和value from selenium import webdriver import timeif __name__ __main__:driverwebdriver.Chrome()driver.maximize_window()driver.implicitly_wait(10)driver.get(https://www.baidu.com/)cookie_dict{name:BDUSS,value:FNxNDNHTXRNSjNoS0M5SjNHbE9GV0pjTlBHaGJhWjJnZFF3SVhub2VyZXJRNnBsRUFBQUFBJCQAAAAAAAAAAAEAAADzfmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKu2gJlU}driver.add_cookie(cookie_dict)#刷新页面,发送cookie信息给服务器进行验证driver.refresh()time.sleep(2)driver.quit()注意: 本地浏览器中登录的账号不能退出否则cookie信息过期需要重新获取不同项目的能够进行登录功能绕过的 cookie字段信息都不相同具体需要询问开发利用cookie 绕过登录,则不能对登录功能本身进行测试个别项如果想要绕过登录,有可能需要添加多个cookie字段
http://www.pierceye.com/news/898401/

相关文章:

  • 用tornado做网站石家庄 外贸网站建设公司
  • 档案网站建设网页wordpress keyshot
  • 鞍山制作网站哪家好建设银行员工网站
  • 手机怎么提升网站流量品牌型网站成功案例图片
  • 网站视频主持人制作网站开发 质量管理
  • 网站的外链建设计划石家庄市城乡建设部网站
  • 电子商务网站规划与建设论文电子商务营销方法
  • 宁波做网站费用电子商城开发网站开发
  • 太原市住房和城乡建设部网站免费的logo在线设计
  • 做it的在哪个网站找工作wordpress 幻燈片 插件
  • 湘潭做网站 i磐石网络博学网站建设公司
  • 揭阳市建设发展总公司网站自己做的视频网站如何赚钱
  • 泉州自助建站软件天眼查在线查询官网
  • 网站建设书模板校本教研网站建设方案
  • 经销商自己做网站合适吗彩虹网站建设
  • 网站新闻编辑怎么做网站开发人员 组织架构
  • 重庆网站seo诊断婚纱摄影网站模板下载
  • 老板合作网站开发宁波网站建设慕枫科技
  • 做外贸都有哪些好网站河北沙河市规划局或建设局网站
  • 网站设计建设维护专门做网站的app
  • 哈尔滨建站模板大全慈溪高端网站设计
  • 升阳广州做网站公司门户网站建设存在的问题和差距
  • 杭州建设行业网站做兼职网站
  • 连云港市城乡建设管理局网站wordpress怎么设置
  • 如何找做网站的公司网站建站哪家公司好
  • 网站建设性价比高珠海网站建设工程
  • 设计公司网站需要什么条件网站建设与管理课程代码
  • 局域网网站怎么做软件定制开发的发展前景
  • 门户网站关键词旅游网站开发报价单
  • 哪个网站做视频收益高社区服务呼叫系统 网站的建设