seleinum中解决需要定位到iframe中嵌套iframe的问题,Message: no such element: Unable to locate element

seleinum中解决需要定位到iframe中嵌套iframe的问题

简介

来自一个自学爬虫的Python小白的经历:通过网络上的教学视频,模仿编程。由于视频资源比较老旧,技术更新较快,所以有些方面难以做到用视频教学代码成功运行。此篇只记录产生的问题,包括已经解决和未解决的。再次申明,只是小白,只是简单的记录问题。

案例

豆瓣使用seleinum自动化登录

初始代码

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("https://www.douban.com/")
print("+"*50)
driver.find_element_by_class_name("account-tab-account").click()
print("+"*50)
driver.find_element_by_id("username").send_keys("xxxxx")
print("+"*50)
driver.find_element_by_id("password").send_keys("xxxxx")
print("+"*50)
driver.find_element_by_class_name("btn").click()

# cookies = {i["name"]:i["value"] for i in driver.get_cookies()}
# # print(cookies)
time.sleep(5)
driver.quit()

报错:
Message: no such element: Unable to locate element: {"method":"css selector","selector":".account-tab-account"} (Session info: chrome=88.0.4324.190)
查看定位的element,如下
seleinum中解决需要定位到iframe中嵌套iframe的问题,Message: no such element: Unable to locate element_第1张图片

seleinum自动化测试的iframe

  • iframe是加载页面的一个元素,自动化测试中会定位到第一个iframe。当需要定位到需要的iframe的时候,比如案例中的登录页面就是在另一个iframe中,以下为解决方法,都经过亲身测验。

iframe切换的问题

  • 使用方式
    • driver.switch_to.frame(iframe)driver.switch_to_frame在我做的案例中会出现横线,可能是方法不可用
      解释:查看帮助,参数iframe可以是id、name、或者element对象的定位方式(对应iframe的xpath)
    • 当iframe中有id name class
      • 直接使用switch_to.frame()传递对应的id。name值
        也可以通过by_id,by_class先定位到对应id,class,之后传递到switch_to中
    • 当iframe中没有id,class,name
      • 可以向参数iframe中传递对应的iframe的xpath(案例中所用方法)
    • 解决代码:请求代码后插入
    iframe = driver.find_element_by_xpath("//div[@id='anony-reg-new']/div/div[1]/iframe")
    driver.switch_to.frame(iframe)
    

以上内容为亲自测试,只为解决自学过程中的错误点,随手的记录

最后,再次声明来自一个Python小白的自学过程中出现的问题,及时交流与解决,如有不对地方,欢迎指教,不喜勿喷。搬运请注明出处!!!!

你可能感兴趣的:(python,selenium)