Python+selenium 自动化登录案例(网易严选邮箱登录,iframe切换)

  今天想用利用python和selenium框架来练习下自动化登录,看了好多网站登录需要验证码对博主刚入门的人还是有点难度,因此想找一个不需要验证码的网站登录,实在不好找,想着网易的产品还是做得很好的,所以去查看了网易相关的网站,发现网易严选登录是不需要验证码的,不过还是遇到了坑(iframe切换)

从邮箱登录界面开始:

 

   找到了邮箱账号输入框的元素,如果你之前都依赖与用右键直接copy浏览器自动生成的xpathname,在这里一定不会奏效,这也告诉我们一定要自己学会写xpath。在网易严选的这个登录界面仅仅写对xpath还是没有用的,因为这里有一个坑,就是iframe框架,我们要的元素都是在这个框架下,因此要先切换到iframe才能继续定位元素。你可以简单认为iframe框架下的元素和背后的页面不在同个界面里,因此我们无法直接定位到这个弹窗里的元素(这么说不一定合适)。

第一步:先定位iframe

  如果iframe里有唯一的属性,例如id和name,我们可以直接使用driver.switch_to_frame("id/name")就解决问题了,然后继续用xpath进行元素定位。当然,如果你能确定这个页面中有几个iframe的时候,你可以直接用索引的方式来切换,如果这个页面中有三个iframe,这个iframe处于第二个,可以写成driver.switch_to_frame(1),从0开始的

  在网易严选的这个页面中,注意iframe的name=0,id是那么一串数字还有小数,很明显是动态的id,刷新下就变了,因此不具备唯一的属性,所以不能依靠属性直接切换到iframe。所以我们先用xpath定位到iframe,在进行切换。仔细观察下,发现iframe的父节点div具有唯一属性的id=j-yx-mailLoginWrap,因此根据属性匹配和绝对路径的方式写xpath:ele=driver.find_element_by_xpath("//*[@id='j-yx-mailLoginWrap']/iframe"),(当然也可以用其他很多方法来定位)。再执行driver.switch_to_frame(ele)就可以成功切换到iframe了。

第二步:xpath定位邮箱账号输入框

  发现这个input的属性非常多,这时候要注意属性的唯一性,有的可能并不是唯一就会导致定位不准确,博主在这选择了class属性,下边还有一个密码输入框,把它点开对比了下它们的class值。选用class作为属性匹配,xpath写成ele=driver.find_element_by_xpath("//*[@class='j-inputtext dlemail']"),这时候就大功告成了!

 

 

网易严选自动化邮箱账号登录python脚本代码(博主在python自带的集成开发环境下写的,好处是可以看到每一步的变化):

python版本3.5

>>>from selenium import webdriver                                #导入webdriver
>>> b = webdriver.Firefox()                                #用的火狐浏览器
>>> b.get("http://you.163.com")                               #输入url
>>> ele = b.find_element_by_xpath("//*[@class='j-yx-cp-topLogin']")                 #定位登录按钮
>>> ele.click()                                        #点击登录按钮
>>> ele = b.find_element_by_xpath("//*[@id='j-yx-loginFormWrap']/div/div[1]/div[1]/div[3]")  #定位邮箱登录按钮
>>> ele.click()                                      #点击邮箱登录按钮切换到邮箱登录

>>> ele1 = b.find_element_by_xpath("//*[@id='j-yx-mailLoginWrap']/iframe")          #定位到iframe
>>> b.switch_to_frame(ele1)                                 #切换到iframe
>>> ele2 = b.find_element_by_xpath("//*[@class='j-inputtext dlemail']")             #定位账号输入框
>>> ele2.send_keys("xxx@163.com")                             #输入邮箱账号

>>>ele3 = b.find_element_by_xpath("//*[@class='j-inputtext dlpwd']")              #定位密码输入框
>>> ele3.send_keys("xxx")                                   #输入密码
>>> ele4 = b.find_element_by_xpath("//*[@id='dologin']")                   #定位登录按钮
>>> ele4.click()                                       #点击登录按钮

posted @ 2018-09-04 17:07  一颗大白牙  阅读(2056)  评论(0编辑  收藏  举报