关于selenium登录豆瓣时遇到的切换框架的问题

 

参考https://testerhome.com/topics/18640

tag name定位

使用h1、a、span这种标签定位.

 

browser.find_element_by_tag_name("span").click()

定位选择顺序

id > class > name > link_text > xpath > css

frame切换

是HTML元素,它定义了一个特定区域,另一个HTML文档可以在里面展示.

<html>
<frameset cols="25%,50%,25%">
<frame src="/example/html/frame_a.html"> <frame src="/example/html/frame_b.html"> <frame src="/example/html/frame_c.html">
</frameset> </html> 

 

image

由此可见不同的frame包含不用的元素里里边. 

douban⽹⾸⻚为例例,通过元素检查登录区域是一个frame区域

 

image

那⽤⾃动化脚本点击"密码登录"按钮,代码如下:

from selenium import webdriver
browser = webdriver.Chrome(executable_path="/Users/xinxi/PycharmProjects/selenium_demo/webdriver/chromedriver_mac") # executable_path来指定chromedirver路路径
browser.get("https://www.douban.com")
print("登录douban")
browser.find_element_by_class_name('account-tab-account').click()
print("点击密码登录")

错误提示如下:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element:
{"method":"class name","selector":"account-tab-account"}

修改代码如下:

browser.switch_to.frame(browser.find_elements_by_tag_name("iframe")[0]) print("切换frame") browser.find_element_by_class_name('account-tab-account').click() print("点击密码登录")

此时代码运行正常,说明点击"元素"之前说明需要切换到该frame上. selenium提供了了switch_to.frame方法
用法如下:

driver.switch_to.frame('frame_name') # 使⽤用名字
driver.switch_to.frame(0) # 使⽤用名字 # 使⽤用位置序号 driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0]) # 使⽤用标签序号

 

总结:在代码编写过程中,切换frame遇到了问题,可以用标签名定位,得到frame节点对象数组,然后索引数组,得到我们要的节点对象,然后作为参数传入frame切换方法。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值