IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> selenium模拟一键登录无法定位frame问题 -> 正文阅读

[开发测试]selenium模拟一键登录无法定位frame问题

实战要求:

要求模拟qq一键登录的方式去登录CSDN,并将登录后的cookie保存下来,再用保存下来的cookie去模拟免登录方式去登录CSDN。

遇到问题:

  1. 选择qq一键登录,切换对应的frame,依然报无法定位到frame错误
  2. 使用cookie去模拟免登录,总是报 Cookie ‘domain’ mismatch 错误

原因分析

  1. 无法定位到frame,是因为本次测试使用qq一键登录时会打开新的标签,需要定位到新的标签窗口,才能定位到frame,否则会默认在第一个窗口定位,肯定找不到元素啦
    在这里插入图片描述
  2. 使用cookie模拟免登录url应该是:https://www.csdn.net/,而不是:https://passport.csdn.net/login?code=public

完整代码

get_loginCookies.py:模拟qq一键登录,登录成功并保存cookie

from time import sleep
from selenium import webdriver
import json

if __name__ == '__main__':
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get('https://passport.csdn.net/login?code=public')
    sleep(5)
    
    # 获取当前打开的窗口
    frist_window = driver.current_window_handle
    
    # 选择qq一键登录方式,跳转到新的窗口
    driver.find_element_by_css_selector('.icon-qq').click()
    sleep(5)
    
    # 判断当前所有打开的窗口
    all_windows = driver.window_handles
    
    # 判断窗口,关键的一步,由于前面没有判断,运行时无法定位到iframe,一直无法切换进入iframe,导致无法点击qq头像登录
    for handle in all_windows:
        # 切换到qq登录的窗口(本次测试只打开了两个新的标签,故只需要判断不等于第一次就可以了)
        if handle != frist_window:
            driver.switch_to.window(handle)
        else:
            pass
            
    # 定位frame
    iframe = driver.find_element_by_xpath('//*[@id="ptlogin_iframe"]')
    # 切换进入frame
    driver.switch_to.frame(iframe)
    # 可直接使用id或者name定位
    # driver.switch_to.frame('ptlogin_iframe')
    
    # 点击qq头像登录
    driver.find_element_by_xpath('/html/body/div[1]/div[4]/div[8]/div/a/span[4]').click()
    sleep(5)

    # 保存cookies
    dictCookies = driver.get_cookies()  # 获取list的cookies
    print(type(dictCookies))
    jsonCookies = json.dumps(dictCookies)  # 转换成字符串保存
    with open('csdn_cookies.txt', 'w') as f:
        f.write(jsonCookies)
    print('cookies保存成功!')

    # 退出
    driver.quit()



test_loginCSDN.py:使用保存的cookie模拟免登录

from selenium import webdriver
import json

def openCSDN():
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get('https://www.csdn.net/')
    return driver

def log_CSDN(driver):
    with open('csdn_cookies.txt', 'r', encoding='utf8') as f:
        listCookies = json.loads(f.read())
        print(listCookies)

        # 往browser里添加cookies
        for cookie in listCookies:
            driver.add_cookie(cookie)
        # 刷新
        driver.refresh()


if __name__ == '__main__':
    driver = openCSDN()
    log_CSDN(driver)

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-10-07 14:07:22  更:2021-10-07 14:07:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 2:55:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码