Python 常用获取元素 Driver 总结

  1. 1、在 Windows 设置临时环境变量 cmd命令窗口 输入 path=%path%;E:\soft\python-3.5.2-embed-win32  
  2.   永久配置,在系统变量下找到path,在Path的最后面添加Python的安装目录  
  3.   D:\Python34,同样在PATHEXT中添加 .PY;.PYM   
  4.     
  5.   然后,输入python 出现版本信息就成功了。  
  6.     
  7. 2、CMD命令窗口,清屏的方法  
  8.    import os  
  9.    os.system('cls')  
  10.    如果不要返回值0就是:  
  11.    import os  
  12.    i=os.system('cls')  
  13. 3、查看当前系统时间  
  14. import time  
  15.    #-*-格式时间格式-*-  
  16. localtime = time.asctime( time.localtime(time.time()) )  
  17.    #-*-格式时间格式[格式化成2009-03-20 11:45:39形式]-*-  
  18. time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())  
  19.    #-*-格式时间格式[时间戳格式]-*-  
  20. time.strftime("%a %b %d %H:%M:%S %Y", time.localtime())  
  21.    #-*-输出格式化后的时间-*-  
  22. print ("本地时间为 :", localtime)  
  23.   
  24. 4、在CMD命令行中,输入 “python” + “空格”,即 ”python “;将已经写好的脚本文件拖拽到当前光标位置,然后敲回车运行即可  
  25.   
  26. 5、乱码原因:  
  27.     因为你的文件声明为utf-8,并且也应该是用utf-8的编码保存的源文件。但是windows的本地默认编码是cp936,也就是gbk编码,所以在控制台  
  28.   
  29.     直接打印utf-8的字符串当然是乱码了。   
  30.   
  31.     解决方法:  
  32.     在控制台打印的地方用一个转码就ok了,打印的时候这么写:  
  33.     print myname.decode('UTF-8').encode('GBK')   
  34.   
  35.     比较通用的方法应该是:  
  36.     import sys  
  37.     type = sys.getfilesystemencoding()  
  38.     print myname.decode('UTF-8').encode(type)  
  39.       
  40.       
  41.     #-*-coding:UTF-8-*-  或者 import sys  
  42.     reload(sys)  
  43.     sys.setdefaultencoding('UTF-8')  
  44.       
  45.       
  46. 6、其实要驱动chrome浏览器必须要依赖Chromedriver文件才行,  
  47.   
  48.     下载地址:  
  49.     http://code.google.com/p/chromedriver/downloads/list  
  50.   
  51.     找到适合你自己系统的包之后下载解压出Chromedriver文件,并将此文件拷贝到java项目的根目录。  
  52.     还是拿上此教程的为例,我们直接爸chromedriver文件拷贝到HelloSelenium项目的根目录下也就  
  53.     是HelloSelenium目录下。这样就可以直接运行了。  
  54. 7、  安装pyse : 将其克隆到本地,将pyse目录放到..\Python27\Lib\site-packages\目录下。  
  55.     https://github.com/defnngj/pyse  
  56.     python setup.py install  安装  
  57.     java -jar selenium-server-standalone-3.4.0.jar -multiWindow  
  58.       
  59.       
  60. 8、定位属性  
  61.         #########百度输入框的定位方式##########  
  62.   
  63.         #通过id方式定位  
  64.         browser.find_element_by_id("kw").send_keys("selenium")  
  65.   
  66.         #通过name方式定位  
  67.         browser.find_element_by_name("wd").send_keys("selenium")  
  68.   
  69.         #通过tag name方式定位  
  70.         browser.find_element_by_tag_name("input").send_keys("selenium")  
  71.   
  72.         #通过class name 方式定位  
  73.         browser.find_element_by_class_name("s_ipt").send_keys("selenium")  
  74.   
  75.         #通过CSS方式定位  
  76.         browser.find_element_by_css_selector("#kw").send_keys("selenium")  
  77.   
  78.         #通过xphan方式定位  
  79.         browser.find_element_by_xpath("//input[@id='kw']").send_keys("selenium")  
  80.   
  81.         ############################################  
  82.   
  83.         browser.find_element_by_id("su").click()  
  84.         time.sleep(3)  
  85.         browser.quit()  
  86.   
  87.   
  88. 一、元素的定位  
  89.   
  90. 1.webdriver提供的8种页面元素定位方法:  
  91.     id/name/class name/tag name/link text/partial link text/xpath/css selector  
  92.     其中python对应的8种方法:  
  93.     find_element_by_id()                       如: find_element_by_id("kw")    
  94.     find_element_by_name()                     如: find_element_by_name("wd")  
  95.     find_element_by_class_name()               如: find_element_by_class_name("s_ipt")   
  96.     find_element_by_tag_name()                 如: find_element_by_tag_name("input")   
  97.     find_element_by_link_text()                如:find_element_by_link_text(u"新闻")      
  98.     find_element_by_partial_link_text()        如:find_element_by_partial_link_text(u"一个很长的")   
  99.     find_element_by_xpath()                    如: find_element_by_xpath(" .//*[@id='kw']")    
  100.     find_element_by_css_selector()             如: find_element_by_css_selector("#kw")  
  101.       
  102. 二、浏览器控制  
  103.     1.控制浏览器大小:set_window_size()    例如:driver.set_window_size(400,500)  
  104.                       maximize_window()    例如:driver.maximize_window()  #无参数  
  105.     2.浏览器后退、前进:back()-后退、farward()-前进  
  106.    
  107. 三、鼠标事件  
  108.     ActionChains类提供的常用方法:  
  109.         1.1 perform():执行ActionChains中存储的所有行为,对整个事件进行提交  
  110.         1.2 context_click():    右击  
  111.         如:  
  112.            from selenium.webdriver.common.action_chains import ActionChains  
  113.                 ...  
  114.            ActionChains(dr).context_click(docfile).perform()  
  115.         1.3 double_click():     双击  
  116.         如:  
  117.            from selenium.webdriver.common.action_chains import ActionChains  
  118.                 ...  
  119.            doubleClick=dr.find_element_by_id("xxx")  
  120.            ActionChains(dr). double_Click(doubleClick).perform()          
  121.         1.4 drag_and_drop(source,target):    拖动  
  122.         如:  
  123.             from selenium.webdriver.common.action_chains import ActionChains  
  124.                 ...  
  125.             dsource=dr.find_element_by_id("xxx")        #拖动的源元素  
  126.             dtarget=dr.find_element_by_id("xxx")        #释放的目标目标元素  
  127.            ActionChains(dr).drag_and_drop(dsource,dtarget).perform()  
  128.         1.5 move_to_element():  鼠标悬停  
  129.         如:  
  130.            from selenium.webdriver.common.action_chains import ActionChains  
  131.                 ...  
  132.            above=dr.find_element_by_id("xxx")  
  133.            ActionChains(dr).move_to_element(above).perform()  
  134. 四、键盘事件      
  135.     1.首先要导入键盘事件的包  
  136.   
  137.     from selenium.webdriver.common.keys importKeys  
  138.     ...  
  139.     dr.get("http://www.baidu.com")  
  140.     #输入内容  
  141.     dr.find_element_by_id("kw").send_keys("seleniumm")  
  142.     #删除输入内容的最后一个字母,  
  143.     dr.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)  
  144.     #输入:空格+教程  
  145.     dr.find_element_by_id("kw").send_keys(Keys.SPACE)  
  146.     dr.find_element_by_id("kw").send_keys(u"教程")  
  147.     #ctrl+a全选输入框内容  
  148.     dr.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')  
  149.     #ctrl+x剪贴输入框内容  
  150.     dr.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')  
  151.     #ctrl+v剪贴输入框内容  
  152.     dr.find_element_by_id("kw").send_keys(Keys.CONTROL,'v')  
  153.     #回车键操作  
  154.     dr.find_element_by_id("su").send_keys(Keys.ENTER)  
  155.     dr.close()  
  156.   
  157.     常用的键盘操作整理:  
  158.     send_keys(Keys.BACK_SPACE)  #删除键BackSpace  
  159.     send_keys(Keys.SPACE)       #空格键Space  
  160.     send_keys(Keys.TAB)         #制表键Tab  
  161.     send_keys(Keys.ESCAPE)      #回退键Esc  
  162.     send_keys(Keys.ENTER)       #回车键Enter  
  163.     send_keys(Keys.CONTROL,'a'#Ctrl+a  
  164.     send_keys(Keys.CONTROL,'c'#Ctrl+c      
  165.     send_keys(Keys.CONTROL,'x'#Ctrl+x  
  166.     send_keys(Keys.CONTROL,'v'#Ctrl+x  
  167.     send_keys(Keys.F1)          #F1,类似的有F1-F12  
  168. 五、获取验证  
  169.   
  170.     六、设置等待      
  171.     1.显示等待:等待某个条件成立时,继续执行,否则达到最大等待时间后抛出异常:TimeoutException,显示等待是针对当前要定位元素使用  
  172.   
  173.     WebDriverWait(driver, timeout,poll_frequency,ignored_exceptions=None).until(method,message)      
  174.     示例:  
  175.     WebDriverWait(dr,5,0.5,None).until(  
  176.         expected_conditions.presence_of_element_located((By.ID,"kw1")),message='test')   
  177.     解释:  
  178.     A.WebDriverWait():在设置时间内,默认间隔一段时间检测一次当前页面元素是否存在,若超过当前指定时间检测不到则抛出异常;  
  179.     B.driver:webdriver的浏览器驱动,ie、firefox、chromea  
  180.     C.timeout:最长超时时间,以秒为单位  
  181.     D.poll_frequency:休眠间隔时间-步长,默认0.5秒  
  182.     E.ignored_exceptions:超时后异常信息,默认抛出NoSuchElementException异常  
  183.     F.until(method,message): 调用该方法提供的驱动作为一个参数,直到返回值为True  
  184.     G.until_not(method,message):调用该方法提供的驱动作为一个参数,直到返回值为False  
  185.     H.expected_conditions类提供的预期条件实现有:  
  186.         title_is:判断标题是否是xx  
  187.         title_contains:判断标题是否包含xx  
  188.         presence_of_element_located:元素是否存在  
  189.   
  190.         visibility_of_element_located:元素是否存在  
  191.   
  192.         visibility_of:是否可见  
  193.   
  194.         presence_of_all_elements_located:判断一组元素是否存在  
  195.   
  196.         text_to_be_present_in_element:判断元素是否有xx文本信息    
  197.   
  198.         text_to_be_present_in_element_value:判断元素值是否有xx文本信息    
  199.   
  200.         frame_to_be_available_and_switch_to_it:表单是否可见,并切换到该表单  
  201.   
  202.         invisibility_of_element_located:判断元素是否隐藏  
  203.         element_to_be_clickable:判断元素是否点击,它处于可见和启动状态  
  204.         staleness_of:等到一个元素不再依附于DOM  
  205.         element_to_be_selected:被选中的元素  
  206.         element_located_to_be_selected:一个期望的元素位于被选中  
  207.         element_selection_state_to_be:一个期望检查如果给定元素被选中  
  208.         element_located_selection_state_to_be:期望找到一个元素并检查是否是选择状态  
  209.         alert_is_present:预期一个警告信息    
  210.   
  211.    
  212.     2.隐式等待:通过一定的时长等待页面所有元素加载完成,哪个元素超出设置时长没被加载就抛出异常NoSuchElementException,隐式等待是针对所有元素的  
  213.    
  214.         implicitly_wait(5)    #默认单位为秒  
  215.     示例:  
  216.         dr.implicitly_wait(5)  
  217. 七、sleep休眠    python中强制的程序等待  
  218.     from time import sleep  
  219.     sleep(4)    #默认单位秒,设置小于1秒的时间可以用小数点如sleep(0.6)  
  220. 八、定位一组元素,类似与1中定位单个元素方法  
  221.     find_elements_by_id()                     如: find_elements_by_id("kw")    
  222.     find_elements_by_name()                   如: find_elements_by_name("wd")  
  223.     find_elements_by_class_name()             如: find_elements_by_class_name("s_ipt")   
  224.     find_elements_by_tag_name()               如: find_elements_by_tag_name("input")   
  225.     find_elements_by_link_text()              如:find_elements_by_link_text(u"新闻")      
  226.     find_elements_by_partial_link_text()      如:find_elements_by_partial_link_text(u"一个很长的")   
  227.     find_elements_by_xpath()                  如: find_elements_by_xpath(" .//*[@id='kw']")    
  228.     find_elements_by_css_selector()           如: find_elements_by_css_selector("#kw")  
  229.     使用场景:  
  230.     a.批量操作对象,如选中页面上所有复选框  
  231.     b.先获取一组对象,再在这组对象里定位需要的的一些对象,如定位所有复选框,然后选择最后一个  
  232.    例如:代码如下  
  233. checkbox.htm页面:  
  234.   
  235.     "text/css">  
  236.     body{font-size:12px; font-family:Tahoma;}  
  237.     .checkbox{vertical-align:middle; margin-top:0;}  
  238.       
  239.       
  240.     "checkbox"type="checkbox"/>元旦  
  241.     "checkbox"name="test"/>圣诞节  
  242.     "checkbox"name="test"/>股市  
  243.     "checkbox"name="test"/>阿凡达  
  244.     "checkbox"name="test"/>十月围城  
  245.     "checkbox"name="test"/>水价上调  
  246.     "button"value="检测"id="btn"/>  
  247.       
  248.   
  249. python代码:   
  250.   
  251.        from selenium import webdriver  
  252.        
  253.         dr=webdriver.Firefox()  
  254.         dr.get("D:\\workspace\\pySelenium\\resources\\checkbox.htm")  
  255.     #使用tagname方式选择页面上所有tagname为input的元素  
  256.     select_tagname=dr.find_elements_by_tag_name("input")  
  257.     #使用xpath方式选择页面上所有tagname为input的元素  
  258.     select_xpath=dr.find_elements_by_xpath("//input[@type='checkbox']")  
  259.     #使用css_select方式选择页面上所有tagname为input的元素  
  260.     select_css=dr.find_elements_by_css_selector('input[type=checkbox]')  
  261.     for i in select_tagname:  
  262.     #循环对每个input元素进行点击选中操作  
  263.     if i.get_attribute("type")=='checkbox':  
  264.     i.click()  
  265.     for j in select_xpath:  
  266.     #循环对每个input元素进行点击取消操作  
  267.     j.click()  
  268.     for k in select_css:  
  269.     #循环对每个input元素进行点击选中操作  
  270.     k.click()  
  271.     #打印出checkbox的个数  
  272.     print'----页面上checkbox的个数为:',len(select_css)  
  273.     #使用pop()获取1组元素的第几个元素  
  274.     select_css.pop(0).click()#第一个  
  275.     select_css.pop(1).click()#第二个  
  276.     select_css.pop().click()#最后一个  
  277.     select_css.pop(-1).click()#最后一个  
  278.     select_css.pop(-2).click()#倒数第二个  
  279.     dr.close()  
  280.   
  281.     备注:pop():选择一组元素中的某一个,要注意的是:pop()和pop(-1)都表示最后一个元素  
  282. 九、多表单切换(对于有frame嵌套表单的操作)  
  283. frame页面:  
  284.   
  285.       
  286.       
  287.       
  288.     

    frame

      
  289.     'frameid'name='frameName'width="800"height="500"src="http://www.baidu.com"/>  
  290.       
  291.       
  292.       
  293.   
  294. python代码:  
  295.   
  296.     dr.get("D:\\workspace\\pySelenium\\resources\\frame.htm")  
  297.     dr.switch_to_frame("frameid")#通过frame的id进入iframe  
  298.     #dr.switch_to_frame("frameName") #通过frame的name进入iframe  
  299.     #下面可以对frame进行操作了  
  300.     dr.find_element_by_id("kw").send_keys("selenium")  
  301.     dr.find_element_by_id("su").click()  
  302.     dr.switch_to_default_content()#退出当前frame返回上一层  
  303.   
  304. 备注:1.switch_to_frame()默认直接取表单的id或者name属性来切换  
  305.       2.完成当前frame表单操作后,可以通过switch_to_default_content()方法返回上一层表单,即离的最近的switch_to_frame()方法      
  306.       3.对于frame中没有id和name属性的通过下面方式进入frame(定位到frame以页面对象传入)  
  307. python代码:  
  308.   
  309.     dr.get("D:\\workspace\\pySelenium\\resources\\frame.htm")  
  310.      #定位到frame页面元素  
  311.         framepath=dr.find_element_by_class_name("frameClassname")  
  312.         dr.switch_to_frame(framepath)#通过frame页面对象进入iframe  
  313.     #下面可以对frame进行操作了  
  314.     dr.find_element_by_id("kw").send_keys("selenium")  
  315.     dr.find_element_by_id("su").click()  
  316.     dr.switch_to_default_content()#退出当前frame返回上一层  
  317.   
  318. 十、多窗口切换  
  319.     selenium-webdriver中使用switch_to_window()方法来切换任意窗口,常用方法有  
  320.           driver.current_window_handle    #获取当前窗口句柄  
  321.       driver.window_handles            #返回所有窗口句柄到当前会话  
  322.       driver.switch_to_window()       #进入窗口,用于切换不同窗口  
  323.    
  324. python代码:      
  325.   
  326.     dr.get("http://www.baidu.com")  
  327.     current_handle=dr.current_window_handle #获取百度首页窗口句柄  
  328.     index_login=dr.find_element_by_xpath("//div[@id='u1']/a[@class='lb']")#获取登录按钮对象  
  329.     index_login.click()#点击登录  
  330.     dr.implicitly_wait(5)  
  331.     dr.find_element_by_class_name("pass-reglink").click()#点击立即注册按钮  
  332.     all_handles=dr.window_handles #获取所有打开窗口句柄  
  333.     for handle in all_handles:  
  334.     if handle==current_handle:  
  335.     dr.switch_to_window(handle)  
  336.     ''''' 
  337.     ...对首页窗口进行操作 
  338.     '''  
  339.     print'----首页页面title:',dr.title  
  340.     for handle in all_handles:  
  341.     if handle!=current_handle:  
  342.     dr.switch_to_window(handle)  
  343.     ''''' 
  344.     ...对注册窗口进行操作 
  345.     '''  
  346.     print'----注册页面title:',dr.title  
  347.   
  348. 十一、警告框处理  
  349.     webdriver中处理js生成的alert、confirm、prompt处理方法是:使用switch_to_alert()定位到alert/confirm/prompt,然后使用text、accept、dismiss、send_keys来根据需要操作。  
  350.     text:返回alert、confirm、prompt中的文字信息  
  351.     accept:点击确认按钮  
  352.     dismiss:点击取消按钮  
  353.     send_keys:在alert、confirm有对话框时输入值  
  354. python代码:  
  355.   
  356.     dr.get("http://www.baidu.com")  
  357.     set_link=dr.find_element_by_xpath("//div[@id='u1']/a[@class='pf']")#找到设置链接元素  
  358.     ActionChains(dr).move_to_element(set_link).perform()#鼠标移动到设置上  
  359.     dr.find_element_by_xpath("//a[@class='setpref']").click()#点击搜索设置链接  
  360.     time.sleep(3)    #加等待时间 等按钮可用,否则会报错  
  361.     save_set=dr.find_element_by_css_selector("#gxszButton > a.prefpanelgo")#获取保存设置按钮  
  362.     save_set.click()#点击保存设置按钮  
  363.        
  364.     alert=dr.switch_to_alert()                    #进入alert  
  365.     print'----弹出alert中内容为:',alert.text #打印对话框里的文字内容  
  366.     alert.accept()#对话框里点击alert中确定按钮  
  367.     #alert.dismiss() #对话框里点击取消按钮  
  368.     #alert.send_keys("对话框中输入的内容") #在对话框里输入内容  
  369.   
  370. 十二、上传文件  
  371.     分2种:普通上传、插件上传  
  372.     普通上传:将本地文件的路径作为一个值放到input标签中,通过form表单提交时,将值传给服务器中去  
  373.     插件上传:指基于flash、javascript或ajax技术实现的上传功能或插件。  
  374.     1.针对普通上传用send_keys实现  
  375. python代码:  
  376.   
  377.     dr.get("D:\\workspace\\pySelenium\\resources\\upload.htm")  
  378.     loadFile=dr.find_element_by_name("filebutton")# 获取上传文件input元素节点  
  379.     loadFile.send_keys("D:\\workspace\\pySelenium\\resources\\frame.htm")#输入上传文件地址来实现上传  
  380.   
  381.     2.插件上传:使用AutoIt实现,--需要安装AutoIt程序  
  382.         AutoIt安装,使用暂时略,需要时再追加,流程为:用AutoIt编写上传文件脚本生成exe文件,在python脚本中进行调用  
  383. python代码:  
  384.   
  385.     loadFile=dr.find_element_by_name("filebutton")# 获取上传按钮  
  386.     loadFile.click()    #点击上传按钮,弹出上传对话框  
  387.     os.system("D:\\autoItFile.exe")    #调用autoIt生成的exe文件,实现导入  
  388.   
  389. 十三、下载文件:使用AutoIt实现,--需要安装AutoIt程序,方法同上传  
  390. python代码:  
  391.   
  392.     ffp=webdriver.FirefoxProfile()  
  393.     ffp.set_preference("browser.download.folderList",2)#0:代表下载到浏览器默认路径下;2:下载到指定目录  
  394.     ffp.set_preference("browser.download.manager.showWhenStarting",False)#是否显示开始:True:显示;False:不显示  
  395.     ffp.set_preference("browser.download.dir", os.getcwd())#指定下载文件目录,os.getcwd()无参数,返回当前目录  
  396.     # ffp.set_preference("browser.helperApps.neverAsk.saveToDisk","application/octet-stream")#下载文件类型,  
  397.     #指定下载页面的content-type值,application/octet-stream为文件类型,http-content-type常用对照表搜索百度  
  398.     dr=webdriver.Firefox(firefox_profile=ffp)  
  399.     dr.get("https://pypi.python.org/pypi/selenium#downloads")  
  400.     dr.find_element_by_xpath("//div[@id='content']/div[3]/table/tbody/tr[3]/td[1]/span/a[1]").click()  
  401.     #接下来使用autoIt实现  
  402.   
  403. 十四、cookies操作  
  404.     webdriver操作cookies的方法:  
  405.     get_cookies():获得所有cookies的值  
  406.     get_cookie(name):获得有特定name值的cookie信息  
  407.     add_cookie(cookie_dict):添加cookie,必须有name和value  
  408.     delete_cookie(name):删除特定名称的cookie信息,通过name找到特定的cookie并删除  
  409.     delete_all_cookies():删除浏览器中所有cookie的信息  
  410.     注意:1.cookie是以字典形式进行存储的;  
  411.     2.使用场景:如登录功能会把用户名写入浏览器cookie指定key为username,那么就可以通过get_cookies()找到username,打印value,找不到说明保存浏览器的cookie是有bug的。  
  412. python代码:  
  413.   
  414.     num=1  
  415.     dr.get("http://www.baidu.com")  
  416.     cookies=dr.get_cookies()#获取cookie的所有信息  
  417.     for ck in cookies:  
  418.     print'----所有cookie',num,':',ck #打印cookie的所有信息  
  419.     num=num+1  
  420.     print'----按name查cookie:',dr.get_cookie("PSTM")#通过cookie的name获取cookie信息  
  421.     dr.add_cookie({'name':'hello','value':'123456789'})#向name和value添加会话信息  
  422.     cookies2=dr.get_cookies()#重新获取cookie的所有信息  
  423.     for ck2 in cookies2:  
  424.     if ck2['name']=='hello':  
  425.     print"----加入的cookie信息:%s-->%s",(ck2['name'],ck2['value'])  
  426.   
  427. 十五、javascript调用,python使用的方法:execute_script()  
  428. python代码:  
  429.   
  430.     dr.get("http://www.baidu.com")  
  431.     dr.find_element_by_id("kw").send_keys("selenium")  
  432.     dr.find_element_by_id("su").click()  
  433.     js="var q=document.documentElement.scrollTop=1000"    #滚动条滚到最下面  
  434.     dr.execute_script(js)  
  435.     time.sleep(4)  
  436.     js2="var q=document.documentElement.scrollTop=0"      #滚动条滚到页面顶  
  437.     dr.execute_script(js2)  
  438.   
  439. 十六、截图,适用于脚本出错时,对当前窗口进行截图保存,使用函数:get_screenshot_as_file()  
  440. python代码:  
  441.   
  442.     dr.get("http://www.baidu.com")  
  443.     try:  
  444.     dr.find_element_by_id("kw1").send_keys("selenium")  
  445.     dr.find_element_by_id("su").click()  
  446.     exceptNoSuchElementException,msg:  
  447.     dr.get_screenshot_as_file("d:\\error.jpg")    #截图输出到d盘  
  448.     print msg  
  449.     dr.close()  
  450.   
  451. 十七、关闭窗口  
  452.     quit():退出相关驱动程序并关闭所有窗口。  
  453.     close():关闭当前窗口,打给多个窗口时,可使用来关闭当前窗口  
  454. 十八、验证码处理  
  455.     方法1:去掉验证码,问题:如果是在正式环境跑脚本那么在取掉会存在风险  
  456.     方法2:设置万能验证码,不需要取消验证码,在程序中留后门--设置一个万能验证码,输入万能验证码了就标识通过  
  457. python代码:   
  458.   
  459.     import random  
  460.     randnum=random.randint(1000,9999)  
  461.     print"----生成随机数为:",randnum  
  462.     input_num=input(u"请输入验证码:")  
  463.     print"----输入验证码为:",input_num  
  464.     if input_num==randnum:  
  465.     print"随机数正确,登录成功"  
  466.     elif input_num==1234:  
  467.     print"输入正确,登录成功"  
  468.     else:  
  469.     print"登录失败"  
  470.   
  471.     方法3:使用cookie方法获取,读取之前登录的cookie值访问时,直接登录,不需要验证码    
  472.   
  473. --------------------------------------------------- CMD -----------命令启动Python脚本  
  474.     文件命名为:test.bat   貌似不能用  
  475.     @echo off  
  476.     echo.  
  477.     python E:\pythonScript\Auto_linknetwork.py  
  478.     cd /D C:\Python27  
  479.     python.exe  
  480.     rm #!C:\Python27/python.exe  
  481.     import os;  
  482.     i=os.system("清屏",cls);  
  483.     import time;  
  484.     #-*-格式时间格式[格式化成2009-03-20 11:45:39形式]-*-  
  485.     time.strftime("%Y-%m-%d %H:%M:%S", time.localtime());  
  486.     print ("系统当前时间为 :", localtime);   
  487. 1、截屏  
  488.     driver.save_screenshot('E:\\pythonScript\\images\\'+strTime+'baidu.png')  
  489.   
  490.   
  491. 三. WebElement接口获取值  
  492.         通过WebElement接口可以获取常用的值,这些值同样非常重要。  
  493.   
  494.     size 获取元素的尺寸  
  495.     text 获取元素的文本  
  496.     get_attribute(name) 获取属性值  
  497.     location 获取元素坐标,先找到要获取的元素,再调用该方法  
  498.     page_source 返回页面源码  
  499.     driver.title 返回页面标题  
  500.     current_url 获取当前页面的URL  
  501.     is_displayed() 设置该元素是否可见  
  502.     is_enabled() 判断元素是否被使用  
  503.     is_selected() 判断元素是否被选中  
  504.     tag_name 返回元素的tagName  
  505.   
  506.  四.得到函数中的返回值  
  507.     函数()  
  508.      def returnval():  
  509.   
  510.      driver = webdriver.Chrome()  
  511.      print u"\n回传值"  
  512.      return driver  
  513.   
  514.      #returnval()  
  515.   
  516.      src = ("http://hos.sf-express.com")  
  517.       
  518.      returnval().get(src)  
  519.   
  520.      print returnval()  
  521.   
  522.    将函数作为返回值返回,不返回结果只返回函数  
  523.      def lazy_sum(*args):  
  524.          def sum():  
  525.              ax = 0  
  526.              for n in args:  
  527.                  ax = ax + n  
  528.              return ax  
  529.           return sum  
  530.      >> f = lazy_sum(13279)  
  531.      >> f  
  532.      >> f()     
  533.     #此时才是真正的计算出函数值;  
  534.   
  535.   
  536. 新建实例driver = webdriver.Chrome()  
  537. 1.获取当前页面的Url函数  
  538. 方法:current_url  
  539. 实例:  
  540. driver.current_url  
  541. 2.获取元素坐标  
  542.   
  543. 方法:location  
  544.   
  545. 解释:首先查找到你要获取元素的,然后调用location方法  
  546. 实例:  
  547. driver.find_element_by_xpath("//*[@id='tablechart']/tbody/tr[14]/td[9]").location  
  548. 3.表单的提交  
  549.   
  550. 方法:submit  
  551. 解释:查找到表单(from)直接调用submit即可  
  552. 实例:  
  553.   
  554. driver.find_element_by_id("form1").submit()  
  555.   
  556. 4.获取CSS的属性值  
  557. 方法:value_of_css_property(css_name)  
  558. 实例:  
  559. driver.find_element_by_css_selector("input.btn").value_of_css_property("input.btn")  
  560. 5.获取元素的属性值  
  561. 方法:get_attribute(element_name)  
  562. 实例:  
  563. driver.find_element_by_id("sellaiyuan").get_attribute("sellaiyuan")  
  564. 6.判断元素是否被选中  
  565. 方法:is_selected()  
  566. 实例:  
  567. driver.find_element_by_id("form1").is_selected()  
  568. 7.返回元素的大小  
  569. 方法:size  
  570. 实例:  
  571. driver.find_element_by_id("iptPassword").size  
  572. 返回值:{'width'250'height'30}  
  573. 8.判断元素是否显示  
  574. 方法:is_displayed()  
  575. 实例:  
  576. driver.find_element_by_id("iptPassword").is_displayed()  
  577. 9.判断元素是否被使用  
  578. 方法:is_enabled()  
  579. 实例:  
  580. driver.find_element_by_id("iptPassword").is_enabled()  
  581. 10.获取元素的文本值  
  582. 方法:text  
  583. 实例:driver.find_element_by_id("iptUsername").text  
  584. 11.元素赋值  
  585. 方法:send_keys(*values)  
  586. 实例:  
  587. driver.find_element_by_id("iptUsername").send_keys('admin')  
  588. 注意如果是函数需要增加转义符u,eg.  
  589. driver.find_element_by_id("iptUsername").send_keys(u'青春')  
  590. 12.返回元素的tagName  
  591. 方法:tag_name  
  592. 实例:  
  593. driver.find_element_by_id("iptUsername").tag_name  
  594. 13.删除浏览器所以的cookies  
  595. 方法:delete_all_cookies()  
  596. 实例:  
  597. driver.delete_all_cookies()  
  598. 14.删除指定的cookie  
  599. 方法:delete_cookie(name)  
  600. 实例:deriver.delete_cookie("my_cookie_name")  
  601. 15.关闭浏览器  
  602. 方法:close()  
  603. 实例:driver.close()  
  604. 16.关闭浏览器并且推出驱动程序  
  605. 方法:quit()  
  606. 实例:driver.quit()  
  607. 17.返回上一页  
  608. 方法:back()  
  609. 实例:driver.back()  
  610. 18.设置等待超时  
  611. 方法:implicitly_wait(wait_time)  
  612. 实例:driver.implicitly_wait(30)  
  613. 19.浏览器窗口最大化  
  614. 方法:maximize_window()  
  615. 实例:driver.maximize_window()  
  616. 20.查看浏览器的名字  
  617. 方法:name  
  618. 实例:drvier.name  
  619. 以上内容转发自http://blog.sina.com.cn/s/blog_b5fe6b270101c8v0.html

你可能感兴趣的:(python,python,driver)