selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate elemen...

from selenium import webdriver
import time

def sleep(w=1):
    time.sleep(w)
    return 0

# 初始化浏览器信息
driver = webdriver.Chrome()
driver.get("http://m.mail.10086.cn")

print("------------------------------login in-------------------------------")
title = driver.title
now_url = driver.current_url
print(title)
print(now_url)
sleep()

driver.find_element_by_name("UserName").clear()
driver.find_element_by_name("UserName").send_keys("userName")
sleep()
driver.find_element_by_css_selector(".textBox_pw").clear()
driver.find_element_by_css_selector(".textBox_pw").send_keys("passWord")
sleep()
driver.find_element_by_id("loginBtn").click()

print("-----------------------------finish login-----------------------------")

title = driver.title
now_url = driver.current_url
print(title)
print(now_url)
sleep()

userName = driver.find_element_by_id("userName").text
print(userName)

driver.quit()

 上面是初始时完成的代码,最终的目的是获取到当前登录人的昵称。

上图为在firefox浏览器中获取到的元素信息,按照以往的经验,最上面的代码应该是一次通过的,但是执行的时候出现了如下的错误:

翻看网络上的资料,了解到定位元素仅会在当前所处的frame中寻找该元素,如果有多个frame时需要先切换到对应的frame下才能够找到该元素。重新查看需要定位的页面信息发现果真要寻找的元素在一个名为‘ifbg’的iframe下,如下图所示:

所以如果想要代码能够正常执行需要先切换到元素所在的frame下,切换frame使用的语句为:driver.switch_to_frame(***)

此处需要分为两种情况进行操作:

情况1. 需要切换至的frame有id或name标记,则可以直接使用切换语句,如

driver.switch_to_frame('ifbg') #括号内填入iframe的id或name标记值均可

 情况2.frame没有id或name标记,但有class标记,需要先获取到对应的frame,然后在切换至该frame

frame1 = driver.find_element_by_css_selector(".main-iframe")
driver.switch_to_frame(frame1)

frame1 = driver.find_element_by_css_selector(".main-iframe")
driver.switch_to_frame(frame1)
userName = driver.find_element_by_id("userName").text
print(userName)

 最终完成的该部分代码如上所示,此时改元素定位不到的问题得到解决。

 

转载于:https://www.cnblogs.com/liyuhang/p/6661835.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值