try...except...else

import random
import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC, select, wait 
from selenium.webdriver.common.by import By
driver=webdriver.Chrome('K:/zhusc/chromedriver.exe')
def wait_for_you(myDynamicElement):
    try:
        wait=WebDriverWait(driver,20)
        element=wait.until(EC.presence_of_element_located((By.XPATH,myDynamicElement)))
        driver.find_element_by_xpath(myDynamicElement).click()
    except:
        print('can not find xpath:',myDynamicElement)               
def switch_iframe(myDynamicElement):   #切换iframe 
    try:
        wait = WebDriverWait(driver, 20)
        element = wait.until(EC.presence_of_element_located((By.XPATH,myDynamicElement)))
        el_path = driver.find_element_by_xpath(myDynamicElement)
        time.sleep(random.random())
        driver.switch_to.frame(el_path)
    except:
        print('can not find iframe:',myDynamicElement)
driver.get("https://weibo.com/")
driver.maximize_window() #窗口最大化
t1=time.time()
switch_iframe('//*[@id="pl_login_form"]/div/div[5]/div/iframe')
print('定位iframe所需时间:',time.time()-t1)
t2=time.time()
wait_for_you('//*[@id="J_Login1"]/div/a')
print('定位xpath所需时间:',time.time()-t2)
driver.quit()

运行结果如图示,符合预期,找不到的xpath消耗约20秒
wait = WebDriverWait(driver, 20)
本来就设置20秒内等待目标xpath
在这里插入图片描述
但换了URL,换了XPATH,就不一样啦,居然不等待20秒,1秒而过。秒杀。
https://blog.csdn.net/xm_csdn/article/details/53419133
//[@id=“kp_box_58”]/iframe
//
[@id=“7488”]/div/div/a
在这里插入图片描述
但同一网址,注释掉iframe,又能符合预期,等待20秒查找xpath
如果你认为是iframe导致的,但第一张图也有iframe啊
在这里插入图片描述
后来终于懂了,这不是玄学,是元素无法被点击

import random
import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC, select, wait 
from selenium.webdriver.common.by import By
driver=webdriver.Chrome('K:/zhusc/chromedriver.exe')
def wait_for_you(myDynamicElement):
    try:
        wait=WebDriverWait(driver,20)
        element=wait.until(EC.presence_of_element_located((By.XPATH,myDynamicElement)))        
    except:
        print('can not find the element:',myDynamicElement)
    else:
        try:
            driver.find_element_by_xpath(myDynamicElement).click()
        except:
            print('the element can not be clicked')
def switch_iframe(myDynamicElement):   #切换iframe 
    try:
        wait = WebDriverWait(driver, 20)
        element = wait.until(EC.presence_of_element_located((By.XPATH,myDynamicElement)))
        el_path = driver.find_element_by_xpath(myDynamicElement)
        driver.switch_to.frame(el_path)
    except:
        print('can not find iframe:',myDynamicElement)
driver.get("https://blog.csdn.net/xm_csdn/article/details/53419133")
driver.maximize_window() #窗口最大化
switch_iframe('//*[@id="kp_box_58"]/iframe')
t2=time.time()
wait_for_you('//*[@id="7488"]/div/div/a')
print('定位xpath所需时间:',time.time()-t2)
driver.quit()

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值