码迷,mamicode.com
首页 > 其他好文 > 详细

selenium的多层框架定位

时间:2020-07-06 01:00:56      阅读:88      评论:0      收藏:0      [点我收藏+]

标签:button   get   log   alt   img   time   简介   xpath   使用   

简介

这篇文章主要介绍selenium的多层框架定位。案例是使用selenium自动登陆QQ空间。

思路

1 使用selenium自动请求QQ空间网站 https://i.qq.com/ 。打开后出现如下页面。

技术图片

 

2 通过xpath定位到账号密码登录的位置,然后使用click点击对象。出现如下页面。

技术图片

 

 

 

3 通过xpath定位到账号输入的位置,密码输入的位置,使用send_keys输入账号密码。然后使用xpath定位到登录的位置,使用click点击对象。 

问题及解决

  第二步中,当我们使用xpath定位账号密码登录这个元素时,发现定位器没有问题,但是一直定位不了,

  这时候我们需要判断这个元素是否在一个frame(框架)中,如果这个元素在一个框架中,我们需要使用switch_to_frame(‘框架id名‘)的方法,先找到框架,然后再去定位这个元素。

  判断一个元素是否在一个框架中的方法:在网页源代码中查找关键词frame,看是否有<iframe>标签。

  我们去QQ空间的网页源代码中发现了关键词frame,如下图所示。

 

 

 

   技术图片

 

  因此我们知道第二步和第三步的账号密码登录账号输入密码输入登录这四个元素是在id为login_frame框架中的, 我们需要先使用switch_to_frame(‘login_frame‘)找到这个框架,然后才能用xpath去定位元素。

  如果一个元素在框架B中,框架B又在框架A中,那么我们需要先找到框架A,再找到框架B,最后才能定位出这个元素。

 1 from selenium import webdriver
 2 import requests
 3 import time
 4 
 5 driver = webdriver.Chrome()
 6 driver.get(https://i.qq.com/)
 7 driver.maximize_window()
 8 time.sleep(1)
 9 
10 # 先找到元素所在的框架
11 driver.switch_to.frame(login_frame)
12 # 对账号密码登录元素进行定位,并点击
13 driver.find_element_by_xpath(//*[@id="switcher_plogin"]).click()
14 # 对账号输入元素进行定位,并输入
15 driver.find_element_by_xpath(//*[@id="u"]).send_keys(QQ账号)
16 # 对密码输入元素进行定位,并输入
17 driver.find_element_by_xpath(//*[@id="p"]).send_keys(QQ密码)
18 # 对登录元素进行定位,并点击
19 driver.find_element_by_xpath(//*[@id="login_button"]).click()

 

selenium的多层框架定位

标签:button   get   log   alt   img   time   简介   xpath   使用   

原文地址:https://www.cnblogs.com/weifeng1998/p/13252623.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!