Selenium 如何同时寻找元素 A 和元素 B,A 先出现就执行步骤 A,B 先出现就执行步骤 B

wwasdassss · 2024年05月31日 · 最后由 迪迦奥特曼 回复于 2024年05月31日 · 2557 次阅读

如题

共收到 11 条回复 时间 点赞

写个 for 循环,然后返回第一个找到的元素,没找到就继续循环;然后根据找到的元素判断你要做什么

try:
    # 设置等待时间
    timeout = 10  # 等待10秒

    # 等待元素A或B出现
    element_a = WebDriverWait(driver, timeout).until(
        lambda d: d.find_elements(By.ID, '元素A的ID') or d.find_elements(By.ID, '元素B的ID')
    )

    # 检查元素A是否先出现
    if element_a[0].get_attribute('id') == '元素A的ID':
        # 执行步骤A
        print("元素A先出现,执行步骤A")
        # 这里添加步骤A的代码
    else:
        # 执行步骤B
        print("元素B先出现,执行步骤B")
        # 这里添加步骤B的代码

except TimeoutException:
    print("在指定的时间内没有找到元素A或B")

finally:
    # 关闭浏览器
    driver.quit()

from selenium import webdriver

driver = webdriver.Chrome()

try:
driver.get('your_url')

# 不断轮询检查元素 A 和元素 B 是否存在
while True:
try:
if driver.find_element_by_xpath('element_A_xpath'):
# 元素 A 先出现,执行步骤 A
print("元素 A 先出现,执行步骤 A")
break
elif driver.find_element_by_xpath('element_B_xpath'):
# 元素 B 先出现,执行步骤 B
print("元素 B 先出现,执行步骤 B")
break
except:
pass
finally:
driver.quit()

Pactortester 回复

没有唯一的 id 用的 xpath 表达式,😢 😢

wwasdassss 回复

。。。。。。。。。。。。。。。。。我不知道说啥了。。。。

Pactortester 回复

要喂到嘴边

@wwasdassss

element_a = WebDriverWait(driver, timeout).until(
    lambda d: d.find_elements(By.XPATH, '元素A的XPATH') or d.find_elements(By.XPATH, '元素B的XPATH')
)
disable 回复

哎无语了😁


个人整理的元素定位,基本可以解决 90% 的元素定位,其中 # 是占位符

disable 回复

if element_a[0].get_attribute('id') == '元素 A 的 ID':
是这里没想好怎么改

这个有点 bug😢

wwasdassss 回复

有什么 bug 你贴出来报错看看

wwasdassss 关闭了讨论 05月31日 17:14
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册