首页 技术 正文
技术 2022年11月6日
0 收藏 989 点赞 853 浏览 18999 个字

#打开网页前三步from selenium import webdriverdriver=webidriver.Chrome()driver.get(“https://www.baidu.com”) #设置休眠时间import timetime.sleep(2) #刷新页面driver.refresh() #页面切换driver.back()#返回上一页driver.forward()#切换到下一页 #设置窗口大小driver.set_window_size(540,960)  #设置窗口的具体尺寸driver.maximize_window()  # 最大化窗口 #截屏driver.get_screemshot_as_file(“D:\\test\\b1.jpg”) #退出driver.close()#关闭当前窗口driver.quit()#退出浏览器进程 #元素定位方法find_element_by_id(“”).send_keys(“输入的文本”)find_element_by_name(“”).click()find_element_by_class_name(“”)find_element_by_tag_name(“标签的值”)#标签名称定位find_element_by_link_text(“”)#链接文本定位find_element_by_partial_link_text(“”)#模糊匹配定位,关键字匹配find_element_by_xpath(“.//*[@id=’kw’]”)#绝对定位find_element_by_css_selector()#css定位 #复数定位,就是将element变成elements的形式,复数形式find_element_by_xpath(“//*[@name=’wd’]”)#用name值定位find_element_by_xpath(“//*[@class=’s_ipt’]”)#用class值定位find_element_by_xpath(“//*[@autocomplete=’off’]”)#用其他属性定位元素,*表示任意标签,也可以将*换成input等别的标签 #层级定位driver.find_element_by_xpath(“//span[@id=’kd’]/input”)#父子层级定位driver.find_element_by_xpath(“//span[@id=’ke’]/span/input”)#三层层级定位 #xpath索引driver.find_element_by_xpath(“//select[@id=’nr’]/option[1]”)#option后边的中括号是索引,从1开始 #xpath的逻辑运算 and or notdriver.find_element_by_xpath(“//*[@id=’kw’and @autocomplete=’off’]”)#and逻辑,两个同时满足时才能定位到某一个元素 #xpath模糊匹配定位,包含,以什么开始driver.find_element_by_xpath(“//*[contains(test(),’hao123′)]”)#文本中包含driver.find_element_by_xpath(“//*[contains(@id,’kw’)]”)driver.find_element_by_xpath(“//*[starts-with(@id,’s_kw’)]”)#以什么开始driver.find_element_by_xpath(“//*[ends-with(@id,’kw-wrap’)]”)#以什么结尾driver.find_elment_by_xpath(“//*[matchs(text(),’hao13′)]”)#正则表达式 #css属性定位,#id用#开头表示、class用点.开头表示、标签无任何表示符driver.find_element_by_css_selector(“#kw”)#用id定位driver.find_element_by_css_selector(“.s_ipt”)#用class定位driver.find_element_by_css_selector(“input”)#用标签定位元素driver.find_element_by_css_selector(“[name=’wd’]”)#用name值属性定位driver.find_element_by_css_selector(“[autocomplete=’of’]”)#用其他属性定位driver.find_element_by_css_selector(“[type=’text’]”) #css标签与属性组合来定位元素driver.find_element_by_css_selector(“input#kw”)#中间不用空格driver.find_element_by_css_selector(“input[id=’kw’]”)driver.find_element_by_css_selector(“input.s_ipt”)driver.find_element_by_css_selector(“input:contains(‘kw’)”)# css层级关系driver.find_element_by_css_selector(“form#form>span>input”).send_keys(“python”)driver.find_element_by_css_selector(“form.fm>span>input”).send_keys(“python”) # css索引driver.find_element_by_css_selector(“selector#nr>option:nth-child(1)”).click() # css逻辑运算 不需要写anddriver.find_element_by_css_selector(“input[id=’kw’][name=’wd’]”)  # css模糊匹配contain语法已经被抛弃 # seleniumBuilder辅助定位元素下载seleniumBuilder工具—>web开发者—>launch selenium builder  # 操作元素(键盘和鼠标事件)鼠标左键:.click()清空输入框:driver.clear()输入字符串:.send_keys() 发送中文需要在前面加u,如u“中文”提交表单:.submit() 一般用于模拟回车键 ##键盘操作需要先导入模块:from selenium.webdriver.common.keys import Ksys模拟enter键:send_keys(Keys.ENTER)如:driver.find_element_by_id(“search_term”).send_keys(Keys.ENTER)send_keys(Keys.F1) #可以设置F1-F12send_keys(Keys.CONTROL,’c’)#模拟复制Ctrl+C的组合键send_keys(Keys.TAB) ##鼠标悬停事件需要先导入模块:from selenium.webdriver.common.action_chains import ActionChains.perform()执行所有ActonChains中的行为move_to_element()鼠标悬停 如:from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsdriver = webdriver.Firefox()driver.get(“https://www.baidu.com”)driver.implicitly_wait(10)#设置等待时间mouse = driver.find_element_by_link_text(“设置”)ActionChains(driver).move_to_element(mouse).perform()#执行以上所有的ActionChains中的行为  右击鼠标:context_click()双击鼠标:double_click() #多窗口、句柄(handle)driver.current_window_handle #获取当前页面的句柄driver.window_handles #获取当前所有的句柄#切换句柄方法一:1.循环判断是否与首页句柄相等2.如果不等,说明是新页面的句柄3.获取的新页面的句柄后,可以切换到新打开的页面上4.打印新页面的title,看是否切换成功for i in all_h:if i ! = h:driver.switch_to.window(i)print driver.title方法二:1.直接获取all_h这个list数据里面的第二个hand的值:all_h[1]driver.switch_to.window(all_h[1])print driver.title # 关闭新窗口,切回主页close是关闭当前窗口quit是退出整个进程driver.switch_to.window(h)#切换到首页句柄 # 定位一组元素 find_elements如果一组元素,他们的父元素是一样的,就可以定位一组元素s=driver.find_elements_by_css_selector(“h3.t>a”)for i in s:print i.get_attribute(“href”)#获取href属性,打印URL地址 # 随机函数导入随机函数:import random设置随机值为0-9 a=random.randint(0-9)如:import randomt=random.randint(0,9)print(t) # 随机打开URLs=driver.find_elements_by_css_selector(“h3,t>a”)#定位到一组有相同父级的元素a=s[t].get_attribute(“href”)#获取href属性print a #打印URL地址driver.get(a) #获取这个随机获取的URL地址 s[t].click()#随机取一个结果点击鼠标 # iframe切换switch_to_framedriver.switch_to_frame(“id-name”)#这个语法现在已经过时driver.switch_to.frame(“id-name”)#现在的语法是这样的#切换iframe 然后定位iframe里面的内容#如果iframe中没有id,需要先定位iframe如:iframe=driver.find_element_by_tag_name(“iframe”)driver.switch_to.frame(iframe)然后在定位iframe里面的其他内容#释放iframedriver.switch_to_default_content() #返回主页面 #如何判断元素是否在iframe上1.定位到元素后,切换到firepath界面2.看firebug工具左上角,如果现实top window说明没有iframe3.如果显示iframe#。。。这样的,说明在iframe上,#后面就是它的id#select下拉框先定位select框,在定位select里面的选项s=driver.find_element_by_id(“nr”)#定位select框s.find_element_by_xpath(“//option[@value=’50’]”).click() #定位select里面的50那个选项 #也可以合成写在一起driver.find_element_by_id(“nr”).find_element_by_xpath(“//option[@value=’50’]”).click()#直接用xpath定位driver.find_element_by_xpath(“.//*[@id=’nr’]/option[2]”).click() # select模块(index)导入select方法:from selenium.webdriver.support.select import Select然后通过select选项的索引来定位select_by_index(2),从0开始计数 driver.find_element_by_id(“nr”)Select(s).select_by_index(2)  # select模块(value)select_by_value(“20”)s=driver.find_element_by_id(“nr”)Select(s).select_by_value(“20”) # select模块(text)select_by_visible_text(“每页显示50条”)s=driver.find_element_by_id(“nr”)Select(s).select_by_visible_text(“每页显示50条”) #select模块更多的定位方法select_by_index() #通过索引定位select_by_value() #通过value值定位select_by_visible_text() #通过文本值定位deselect_all() #取消所有选项deselect_by_index() #奇效对应的index选项deselect_by_value() #取消对应的value选项deselect_by_visible_text() #取消对应文本选项first_selected_option() #返回第一个选项all_selected_options() #返回所有的选项 # alert、confirm、promptalert——警示框,只有确认按钮,点击消失confirm——询问框,有确认和取消按钮prompt——需要输入文本,有确定和取消按钮 text:获取文本值accept():点击“确认”dismiss():点击“取消”或者叉掉对话框send_keys(): 输入文本值-仅限于prompt。在alert和confirm上没有输入框 #定位alert操作1.先用switch_to_alert()切换到alert弹出框上2.可以用text方法获取弹出的文本信息3.accept()点击确认按钮4.dismiss()相当于点击右上角x,取消弹出框如:driver.find_element_by_id(“alert”).click()#定位到警示框driver.find_element_by_id(“confirm”).click()driver.find_element_by_id(“prompt”).send_keys(“xxxx”)t=driver.switch_to.alert() #定位弹出的alert警示框print t.text() #打印alert文本t.accept() #点击确定按钮t.dismiss() #叉掉警示框 ###select遇到的坑1.操作百度设置里面,点击“保存设置”按钮时,alert弹出框没有弹出来。2.分析原因:经过慢慢调试后发现,在点击“保存设置”按钮时,由于前面的select操作后,失去了焦点3.解决办法:在select操作后看,做个click()点击操作 s=driver.find_element_by_id(“nr”)Select(s).select_by_visible_text(“每页显示20条”)time.sleep(3)s.click()  ###单选框和复选框(radiobox、CheckBox) 直接用id定位就可以driver.find_element_by_id(“c1”).click()##全部勾选,可以用到定位一组元素,find_elements是不能直接点击的,它是复数,只能先获取所有的CheckBox对象,然后通过for循环去一个个点击操作 driver.find_elements_by_xpath(“.//*[@type=’checkbox’]”)for i in checkboxs:i.click() ### 判断是否选中:is_selectd()有的默认选项,本身就是选中状态,如果再点一下,就反选了。s=driver.find_element_by_id(“boy”).is_selected()#没点击操作前,判断选项框状态print sdriver.find_element_by_id(“boy”).click() r=driver.find_element_by_id(“boy”).is_selected()print r #table定位用xpath .//*[@id=’mytable’]/tbody/tr[2]/td[1]可以打印表格内容t=driver.find_element_by_xpath(“.//*[@id=’mytable’]/tbody/tr[2]/td[1]”) print t.text ## 加载Firefox配置就是要调出下载的firebug的配置需要用FirefoxProfile(profile_directory)这个类来加载,括号内的profile_directory为浏览器配置文件的路径地址####了解selenium里面的API用法,先看下相关的帮助文档,打开cmd窗口,输入以下命令pythonfrom selenium import webdriverhelp(webdriver.FirefoxProfile)#####profile_directory查找Firefox配置文件地址打开Firefox右上角的设置——>帮助——>故障排除信息——>显示文件夹——>复制路径 就是Firefox的配置文件地址路径存在字符\,转义字符,为了不让转义,前面加\,或者字符串前面加r。如:profile_directory=r’c:\users\….’profile=webdriver.FirefoxProfile(profile_directory)#加载配置地址 driver=webdriver.Firefox(profile) #启动浏览器配置  ## 富文本如:博客园的新随笔,这里有个iframe,定位iframe,send_keys()就可以输入内容了,有时候输入不成功,可以在输入之前先按个table键,send_keys(Keys.TAB)edittile = u’selenium2+python自动化-富文本 标题’editbody = u ‘这里是发帖的正文’driver.find_element_by_id(“editor_edit_txbtitle”).send_keys(edittile)#输入标题driver.switch_to.frame(“Editor_Edit_EditorBody_ifr”) #定位富文本所在的iframedriver.find_element_by_id(“tinymce”).send_keys(Keys.TAB)#输入文本之前先按一下tab键 driver.find_element_by_id(“tinumce”).send_keys(editbody) #输入富文本的内容  ###文件上传(send_keys)web页面文件上传,分两个场景:1.input,用selenium提供的send_keys()方法轻松解决以博客园为例:driver.find_element_by_css_selector(“img.mceIcon”).click() #点开编辑器图片time.sleep(3)iframe = driver.find_element_by_tag_name(“iframe”)[1] #定位所有iframe,取第二个driver.switch_to_frame(iframe) #切换到iframe上driver.find_element_by_name(“file”).send_keys(r”D:\\test…14.png”) 2.非input,比较困难,可以借助autoit工具,或者SendKeys第三方库   ###获取元素属性*获取title方法:dirver.title*获取元素的文本:driver.text*获取元素的标签:driver.tag_name*获取元素的其他属性:driver.get_attribute(“属性名”) 可以是class,name等,如:driver.get_attribute(“class”),driver.get_attribute(“name”) *获取输入框内的文本值:driver.get_attribute(“value”) *获取浏览器名称:driver.name ###爬页面源码(page_source)driver.page_sourcepage = driver.page_sourceprint page**re非贪婪模式需要导入re模块,用re的正则匹配,findall方法返回的是一个list集合,匹配出来之后发现有一些不是URL链接,可以筛选下#非贪婪匹配,re.s(’.’匹配字符,包括换行符)url_list = re.findall(‘href=\”(.*?)”‘,page,re.s)for url in url_list:print url #筛选url地址出来加个if语句判断,‘http’在url里面说明是正常的url地址了,把所有的url地址放到一个集合里面。url_list = re.findall(‘href=\”(.*?)”‘,page,re.s)url_all = []for url in url_list:if “http” in url:print urlurl_all.append(url)#最终的url集合print url_all  ###cookie 相关操作登录有图形验证码,可以通过绕过验证码的方式,添加cookie方法登录。登录后换账号登录的时候,也可作为后置条件去删除cookie然后下个账号登录。 *获取cookie:get_cookies()第一次打印出来cookie是空,打开网页后,重新获取cookie,打印出来就有值了。 from selenium import webdriverimport timedriver = webdriver.Firefox()#启动浏览器后获取cookiesprint driver.get_cookies()driver.get(“http://www……”)#打开主页后获取cookiesprint driver.get_cookies() **登录后的cookies和登录前的不一样,name和value值发生了变化。 ##获取指定name的cookie::driver.get_cookie(name)如:dirver.get_cookie(xxxx = “cookie-name”)##清除指定的cookie: delete_cookie() ##清除所有cookies::delete_all_cookies() ###总结cookie操作的几个方法:1.get_cookie():获取所有cookies2.driver.get_cookie(name)::获取指定name的cookie:3.清除指定cookie::delete_cookie()4.清除所有的cookies::delete_cookies()5.add_cookie(cookie_dict):添加cookie的值,可以绕过验证码登录 ####绕过验证码登录(add_cookie)先手动登录一次,用fiddler抓包,住区这个cookie,点击登录之前的cookie,和登录之后的cookie,添加cookie,driver.add_cookie(cookie_dict),这里添加的是字典的格式 ####cookie组成结构cookie = { u’domain’:u’xxxxxx.com’,#服务器域名u’name’:u’xxxxxxcookie’,##cookie的名称u’value’:u’xxxxx’,#cookie对应的值,动态生成u’expiry’:14843958349,#cookie有效终止日期u’path’:u’/’, #path属性定义了web服务器上哪些路径下的页面可获取服务器设置的cookie。u’httpOnly’:True, #防脚本攻击u’secure’:False } #在cookie中标记该变量,表明只有当浏览器和web server之前的通信协议为加密认证协议时,浏览器才向服务器提交相应的cookie。当前这种协议只有一种,即为https。 c1={ u’domain’:u’xxxxxx.com’,u’name’:u’xxxxxxcookie’,u’value’:u’xxxxx’,u’expiry’:14843958349,u’path’:u’/’,u’httpOnly’:True,u’secure’:False}driver.add_cookie(c1) #添加c1driver.refresh()#添加完需要刷新,才能生效注意事项:1.登录时候要勾选自动登录按钮2.add_cookie()只添加name和value,有时候是登录不成功的。3.这种方法不适合所有网站,一般像这种记住登录状态的才适合。 ##JS处理滚动条selenium操作js的方法:execute_script(),可以直接执行js脚本。http:www.w3school.com/js/index.asp4 js学习网站 ***控制滚动条高度:1.滚动条回到顶部:js=”var q=document.getElementById(‘id’).scrollTop=0″driver.execute_script(js)2.滚动条拉倒底部js=”var q=document.documentElement.scrollTop=10000″driver.execute_script(js)*scrollTop值,0是最上面,10000是最底部。 ***横向滚动条scrollTo(x,y)js=”window.scrollTo(100,400)”driver.execute_script(js)x——横向距离,y——纵向距离。***但是对于Chrome浏览器不起作用,可以用一下方法解决js = “var q=document.body.scrollTop=0” #document后边换成body就可以了。driver.execute_script(js) ####元素聚焦每次打开的页面不一样,元素所在的位置也不一样的情况。直接跳到元素出现的位置。target = dirver.find_element_by_xxx()driver.execute_script(“arguments[0].scrollIntoView();”,target) **获取浏览器名称driver.name ### 兼容性,兼容所有浏览器#回到顶部def scroll_top():if driver.name ==”chrome”:js = “var q=document.body.scrollTop=0″else:js = “var q=document.documentElement.scrollTop=0″return driver.execute_script(js) #拉倒底部def scroll_foot():if driver.name ==”chrome”:js = “var q=document.body.scrollTop=10000″else:js = “var q=document.documentElement.scrollTop=10000″return driver.execute_script(js) ### scrollTo 函数scrollTo 不存在兼容的问题——scrollHeight 获取对象的滚动高度——scrollLeft 设置或获取位于对象左边界和窗口中目前可见内容的最左边之间的距离——scrollTop 设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离——scrollWidth 获取对象的滚动宽度 #滚动到底部js = “window.scrollTo(0,document.body.scrollHeight)”driver.execute_script(js) #滚动到顶部js = “window.scrollTo(0,0)”driver.execute_script(js)  ####js处理富文本1.加载配置2.打开编辑界面3.定位iframe4.定位到iframe之后,用js方法直接输入,无需切换iframe5.直接点击保存按钮,无需再切回来如:body = “js的正文内容”js =’document.getElementById(“Editor_Edit_EditorBody_ifr”).contentWindow.document.body.innerHTML =”%s”‘ % bodydriver.execute_script(js) #保存草稿driver.find_element_by_id(“Editor_Edit_lkbDraft”).click() #### js处理日历控件(修改readonly属性)日历输入框的属性是:readonly=”readonly”***用js去掉readonly属性1.先定位到元素,然后用removeAttribute(“readonly”)方法删除属性2.出发日期元素id为:train_date,对应js代码为:’document.getElementById(“train_date”).removeAttribute(“readonly”);’如:#去掉元素的readonly属性js=’document.getElementById(“train_date”).removeAttribute(“readonly”);’driver.execute_script(js) 3先清空文本,再输入日期;driver.find_element_by_id(“train_date”).clear()driver.find_element_by_id(“train_date”).send_keys(“2016-12-25”) ***改输入框元素的value值输入日期js=’document.getElementById(“train_date”).removeAttribute(“readonly”);’driver.execute_script(js)#用js方法输入日期js_value = ‘document.getElementById(“train_date”).value=”2016-12-25″‘driver.execute_script(js_value) ###js处理内嵌div滚动条js1 = ‘document.getElementById(“id-name”).scrollTop=10000’ #纵向滚动条拉到最底端,用id定位driver.execute_script(js1) #运行js代码 #纵向顶部js1 = ‘document.getElementById(“id-name”).scrollTop=0’ driver.execute_script(js1) #横向滚动条js3 = ‘document.getElementById(“id-name”).scrollLeft=10000’js3 = ‘document.getElementById(“id-name”).scrollLeft=0’driver.execute_script(js4) ##用class属性定位js用class属性定位,返回的是一个list对象,这里取第一个就可以了。js5 = ‘document.getElementsByClassName(“scroll”)[0].scrollTop=1000’js6 = ‘document.getElementsByClassName(“scroll”)[0].scrooLeft=10000’ #注意这里用的是elements复数形式drver.execute_script(js6) #js处理多窗口链接有target=”_blank”属性的时候,就会在另外一个页面打开新链接。。所以去掉这个属性,让新页面在同一个窗口打开就可以了。方法:1.用js定位大该严肃的class属性,然后直接修改target属性值为空。js=’document.getElementsByClassName(“mnav”)[0].target=””;’driver.execute_script(js)driver.find)element_by_link_text(“糯米”).click()*****不是所有的链接都适用于这个方法,只适于有这个target=”_blank”属性链接的情况 ### js解决click失效的问题元素找到了,运行也没有报错,点击后页面没有任何反应,就是click失效了。方法一:先点击它的父元素一次,然后再点击这个元素(以百度保存设置按钮为例)driver.find_element(“id”,”gxszButton”).click()driver.find_element(“class name”,”prefpanelgo”).click()方法二:js直接点击js = ‘document.getElementByClassName(“prefpanelgo”)[0].click();’driver.execute_script(js) ######中定位方法总结#######1.id定位:find_element_by_id(self,id_)2.name定位:find_element_by_name(self,name)3.class定位:find_element_by_class_name(self,name)4.tag定位:find_element_by_tag_name(self,name)5.link定位:find_element_by_link_text(self,link_text)6.partial_link定位:find_element_by_partial_link_text(self,link_text) 7.xpath定位:find_element_by_xpath(self,xpath)8.css定位:find_element_by_css_selctor(self,css_selector) ##以下是复数形式1.id定位:find_elements_by_id(self,id_)2.name定位:find_elements_by_name(self,name)3.class定位:find_elements_by_class_name(self,name)4.tag定位:find_elements_by_tag_name(self,name)5.link定位:find_elements_by_link_text(self,link_text)6.partial_link定位:find_elements_by_partial_link_text(self,link_text)7.xpath定位:find_elements_by_xpath(self,xpath)8.css定位:find_elements_by_css_selctor(self,css_selector) ##这两种就是快失传了的find_element(self,by=’id’,value=None)find_elements(self,by=’id’,value=None) #elements定位方法以百度页面为例,有留个clas一样的元素,要定位地图这个元素 elements=driver.find_elements(“css selector”,”.mnav”)#先定位到这一组元素print elements[3].text #地图在第四个位置elements[3].click() #点击地图  ## 查看 webdriver API1.pydoc是python自带的模块,主要从python模块中自动生成文档,这些文档可以基于文本呈现,也可以生成web页面,还可以再服务器上以浏览器的方式呈现! 就是帮你从代码和注释自动生成文档的工具。如:查看python里面open函数的功能和语法,cmd>python -m pydoc open-m参数:python以脚本方法运行模块2.启动servercmd>python -m pydoc -p 6666>http://localhost:6666/-p:表示在本机上启动服务6666:服务端口号,所以设置在浏览器直接打开这个网址,Bulit-in Moudles:这个是python自带的模块python2.7\lib\site-packages,点开seleniumselenium>webdriver>firefox>webdriver.html最终看到就是selenium的webdriver API帮助文档  ##alert弹窗 警告框accept确认dismiss取消send_keys输入内容al=driver.switch_to.alert()al.accept()定位并确定 ##自定义弹窗就是会动的广告,将display的属性设置为none就可以去除这种弹窗了。js=’document.getElementById(“doyoo_monitor”).style.display=”none”;’ ##获取百度联想词,如百度搜索里面输入一个词就会出现很多联想的词。可以发现,联想词都有一个共同的class属性,定位这组属性就可以了。1)通过get_attribute()方法获取到文本信息driver.find_element_by_id(“kw”).send_keys(u”博客”)#获取百度输入框的联想词time.sleep(1)bd=driver.find_elements_by_class_name(“bdSug_ml”)#逐个点击for i in bd:  print i.get_attribute(“data-key”)#点击其中一个if len(bd)>1:  ba[1].click()  #打印当前页面  print driver.current_urlelse:  print”未获取到匹配的词” ## 以下总结了5种js定位的方法处了id是定位到的单个element元素对象,其他的都是elements返回的是list对象。1)通过id获取:document.getElementById(“id”)2)通过name获取document.getElementsByName(“Name”) 返回的是list3)通过标签名选取元素document.getElementsByTagName(“tag”)4)通过class类选取元素document.getElementsByClassName(“class”)#IE8及其以下版本的浏览器未实现getElementsByClassName方法5)通过css选择器选取元素document.querySelectorAll(“css selector”)#IE8及其以下版本的浏览器只支持css2标准的选择器语法id定位定位博客园首页的管理按钮:id=“blog_nav_contact”js1=’document.getElementById(“blog_nav_contact”).click();’driver.execute_script(js1)class定位class定位获取的是一个list列表,如果只用一个那就取下标。定位到输入框,可以直接用value=””方法输入内容#输入账号js2=’document.getElementsByClassName(“input-text”)[0].value=”用户名”;’driver.execute_script(js2)#输入密码js3=’document.getElementsByClassName(“input-text”)[1].value=”密码”;’driver.execute_script(js3)  ####封装读取Excel方法python读取Excel方法,并保存为字典格式环境准备:01.先安装xlrd模块,打开cmd,输入pip install xlrd在线安装cmd>pip install xlrd ####exlce基本操作方法如下:#打开Excel表格,参数是文件路径data=xlrd.open_workbook(‘test.xlsx’) #table=data.sheets()[0] 通过索引顺序获取#table=data.sheet_by_index(0) 通过索引顺序获取table=data.sheet_by_name(u’Sheet1′) 通过名称获取nrows = table.nrows #获取总行数ncols=table.ncols #获取总列数 #获取一行或一列的值,参数是第几行print table.row_values(0) #获取第一行print table.col_value(0) #获取第一列值 #Excel存放数据在Excel中存放数据,第一行为标题,也就是对应字典里面的key值,如:username,password如果Excel数据中公有纯数字的一定要设置单个格式为文本格式,要不然读取的数据是浮点数。(先设置单元格格式后编辑,编辑成功左上角有个小三角图标)  数据驱动ddt有些用例,操作过程是一样的,就是输入的数据不一样,比如登录这个功能。可以用数据驱动设计模式,一组数据对应一个测试用例。用例自动加载生成。1.安装ddt模块,cmd>pip install ddt 在线安装2.数据驱动原理–1.测试数据为多个字典的list类型–2.测试类钱修饰@ddt.ddt–3.case钱加修饰@ddt.data()–4.运行后用例会自动加载成三个单独的用例 如:import ddtimport unittest

##判断元素(expected_conditions)如何判断一个元素是否存在,如何判断alert弹窗出来了,如何判断动态的元素等等。面试必考。 expected_conditions一般也称为EC。###.功能介绍和翻译。1.title_is:判断当前页面的title是否完全等于(==)预期字符串,返回布尔值 2.title_contains:判断当前页面的title是否包含预期字符串,返回布尔值 3.presence_of_element_located:判断某个元素是否被加到了dom树里,并不代表该元素一定可见 4.visibility_of_element_located:判断某个元素是否可见,可见代表元素非隐藏,并且元素的宽和高等不等于0. 5.visibility_of:跟上面的方法做一样的事情,只是上面的方法要传入locator,这个方法直接传定位到的element就好了 6.presence_of_all_elements_located;判断是否至少有1个元素存在于dom树中。举个例子,如果页面上有n个元素的class都是‘column-md-3’,那么只要有1个元素存在,这个方法就返回true。  7.text_to_be_present_in_element:判断某个元素中的text是否包含了预期的字符串 8.text_to_be_present_in_element_value:判断某个元素中的value属性是否包含了预期的字符串。  9.frame_to_be_available_and_switch_to_it:判断该frame是否可以switch进去,如果可以的话,返回ture并且switch进去,否则返回false。 10.invisibility_of_element_located:判断某个元素中是都不存在与dom树或不可见  11.element_to_be_clickable:判断某个元素中是否可见并且是enable的,这样的话才叫clickable 12.staleness_of:等某个元素从dom树中移除,足以,这个方法也是返回ture或false 13.element_to_be_selected:判断某个元素是否被选中了,一般用在下拉列表  14.element_selection_state_to_be:判断某个元素的选中状态是否符合预期 15.element_located_selection_state_to_be:跟上面的方法作用一样,只是上面的方法传入定位到的element,而这个方法传入locator 16.alert_is_present:判断页面上是否存在alertunittest定位参数化by_id=”id”by_xpath=”xpath”by_link_text=”link text”by_partial_text=”partial link text”by_name=”name”by_tag_name=”tag name”by_class_name=”class name”by_css_selector=”css selector” driver.find_element(“link text”,”糯米”).text前面是by后边的方法,后边是值 css定位:

driver.find_element_by_css_selector(“input[id=’xx’][name=’xx’]”)

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,487
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,903
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,736
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,487
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,127
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,289