selenium的多层框架定位
简介
这篇文章主要介绍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,最后才能定位出这个元素。
from selenium import webdriver import requests import time driver = webdriver.Chrome() driver.get(‘https://i.qq.com/‘) driver.maximize_window() time.sleep(1) # 先找到元素所在的框架 driver.switch_to.frame(‘login_frame‘) # 对账号密码登录元素进行定位,并点击 driver.find_element_by_xpath(‘//*[@id="switcher_plogin"]‘).click() # 对账号输入元素进行定位,并输入 driver.find_element_by_xpath(‘//*[@id="u"]‘).send_keys(‘QQ账号‘) # 对密码输入元素进行定位,并输入 driver.find_element_by_xpath(‘//*[@id="p"]‘).send_keys(‘QQ密码‘) # 对登录元素进行定位,并点击 driver.find_element_by_xpath(‘//*[@id="login_button"]‘).click()
相关推荐
xiangxiaojun 2020-09-23
Reiki 2020-08-16
letheashura 2020-08-14
tiankele0 2020-07-29
curiousL 2020-07-18
王练 2020-07-18
tiankele0 2020-07-18
amei0 2020-07-08
Reiki 2020-07-06
xiangxiaojun 2020-07-05
zhanghaibing00 2020-06-28
xiongyouqiang 2020-06-28
Ronnyxie 2020-06-27
amei0 2020-06-26
letheashura 2020-06-26
tiankele0 2020-06-26
王练 2020-06-25
xiangxiaojun 2020-06-25