Python学习笔记——selenium定位iframe和元素(快速定位)

在使用selenium过程,发现定位iframe、元素比较困难,所以制作一个辅助小工具。

一、selenium定位

# 1.导入库
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
import traceback
import keyboard
from selenium.webdriver.common.by import By
import time


def test_a():
    global driver

    # 1.获得360浏览器(使用谷歌浏览器可忽略)
    __browser_url = r"D:\360极速浏览器\install\360Chrome\Chrome\Application\360chrome.exe"  # 换成自己的目录
    chrome_options = Options()
    chrome_options.binary_location = __browser_url

    # 2.获得驱动
    driver = Chrome(executable_path=r'drive/chromedriver.exe', options=chrome_options)
    # 3使用驱动 ,打开网页
    driver.get("https://www.csdn.net/")

    # 4.使用驱动,获取元素,操作元素

    # -------------------------第二轮定位调试页面(首次注释)-------------------------
    # 可以有多组,多次进入子iframe
    # a_frame = driver.find_elements(By.TAG_NAME, "iframe")
    # driver.switch_to.frame(a_frame[0])
    # --------------------------------------------------------------------

    # ======================获取当前界面的html代码==================
    file = open("当前界面.txt", mode='w', encoding='utf-8')
    file.write(driver.page_source)
    file.close()

    find_msg = input("请输入要查找的内容:")
    if find_msg in driver.page_source:
        print("当前界面,=====================>包含:{}".format(find_msg))
    else:
        print("当前界面,不包含:{}".format(find_msg))
    # =============================================================

    # 切换上到上一级
    #driver.switch_to.parent_frame()

    # =========================获取嵌入的iframe====================
    a_frame = driver.find_elements(By.TAG_NAME, "iframe")
    print("当前界面共有:", len(a_frame), "个iframe")

    for i in range(len(a_frame)):
        driver.switch_to.frame(a_frame[i])  # 切换到下一个界面

        # 1.将内容写入text,方便手动定位
        file = open("第{}个iframe.txt".format(i), mode='w', encoding='utf-8')
        file.write(driver.page_source)
        file.close()
        # 2.直接判断,当前是否包含目标:
        if find_msg in driver.page_source:
            print("第{}个里,=====================>包含:{}".format(str(i), find_msg))
        else:
            print("第{}个里,不包含:{}".format(str(i), find_msg))

        # 切换上到上一级iframe,为下一次循环做准备
        driver.switch_to.parent_frame()
        # 再次获取iframe
        a_frame = driver.find_elements(By.TAG_NAME, "iframe")
    # =============================================================


if __name__ == '__main__':
    try:
        print("a键开始")
        keyboard.add_hotkey('a', test_a)  # 按 a 调用 test_a函数
        keyboard.wait()  # 循环监听
    except Exception as e:
        traceback.print_exc()
        input("回车键结束:")

 当前界面没有,调整driver位置

 二、元素定位

1.Xpath定位

 2,.其他定位方式

三、防止定位、操作失败

获取元素、操作失败重复操作,直至操作成功。

while True:
	try:
        #等待X秒
		#定位元素,操作
		break
	except:
		continue

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值