Selenium多条件等待

Selenium多条件等待

在Selenium的WebDriver中的等待时,我希望当出现两个元素中的任意一个元素即为成功,下面是我的代码,请问如何实现?

# --**--操作层模块,驱动浏览器进行操作--**--

# By:@rainzee

# At:2020.08.16

# --**--导入依赖库--**--

from time import sleep

from selenium import webdriver

from selenium.webdriver.support import expected_conditions

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

# --**--驱动器类--**--

# 驱动器类

class Driver(object):

'''驱动器类,初始化驱动器,并执行相关动作'''

def __init__(self, proxy, url:str, email:str, password:str, first_name:str, last_name:str, dateofbirth:str, gender:str):

'''构造函数参数绑定'''

self.proxy = proxy

self.url = url

self.email = email

self.password = password

self.first_name = first_name

self.last_name = last_name

self.dateofbirth = dateofbirth

self.gender = gender

self.sleep_time = 0.1

def init_driver(self):

'''初始化浏览器,设置启动方法和配置'''

# 初始化启动方法

option = webdriver.ChromeOptions()

# 启动参数部分

# --禁用图片加载

option.add_argument('blink-settings=imagesEnabled=false')

# --设置窗口尺寸

option.add_argument('window-size=1025,800')

# --设置窗口位置

option.add_argument('window-position=0,0')

# --配置代理

#option.add_argument(f'--proxy-server={self.proxy}')

# --忽略证书错误

option.add_argument('--ignore-certificate-errors')

# 初始化驱动引擎

driver = webdriver.Chrome(options=option)

# 初始化种子地址

driver.get(self.url)

# 成功标志

try:

WebDriverWait(driver, 15).until(expected_conditions.element_to_be_clickable((By.XPATH, "//a[@aria-label='Join Us']")))

return driver

except Exception:

driver.quit()

def drive(self):

'''驱动器操作函数,执行动作'''

# 载入已初始化的驱动引擎

self.driver = self.init_driver()

# 元素组件库

# --首页注册按钮

element_join = "//button[@data-type='click_navJoinLogin']"

# --注册框注册链接

element_join_us = "Join Us"

# --邮箱输入框

element_email = "//input[@data-componentname='emailAddress']"

# --密码输入框

element_password = "//input[@data-componentname='passwordCreate']"

# --firstname输入框

element_firstname = "//input[@data-componentname='firstName']"

# --lastname输入框

element_lastname = "//input[@data-componentname='lastName']"

# --生日输入框

element_date_of_birth = "//input[@data-componentname='dateOfBirth']"

# --性别选择按钮

element_gender = f"//ul[@data-componentname='gender']//li[{self.gender}]"

# --注册提交按钮

element_regist = "//input[@value='JOIN US']"

# 动作链

# --点击首页注册按钮

#self.driver.find_element_by_xpath(element_join).click()

#sleep(self.sleep_time)

# --点击注册框注册链接

#self.driver.find_element_by_link_text(element_join_us).click()

#sleep(self.sleep_time)

self.driver.find_element_by_xpath("//a[@aria-label='Join Us']").click()

WebDriverWait(self.driver, 20).until(expected_conditions.element_to_be_clickable((By.XPATH, "//input[@data-componentname='emailAddress']")))

# --输入注册邮箱

self.driver.find_element_by_xpath(element_email).send_keys(self.email)

sleep(self.sleep_time)

# --输入注册密码

self.driver.find_element_by_xpath(element_password).send_keys(self.password)

sleep(self.sleep_time)

# --输入firstname

self.driver.find_element_by_xpath(element_firstname).send_keys(self.first_name)

sleep(self.sleep_time)

# --输入lastname

self.driver.find_element_by_xpath(element_lastname).send_keys(self.last_name)

sleep(self.sleep_time)

# --输入生日

self.driver.find_element_by_xpath(element_date_of_birth).send_keys(self.dateofbirth)

sleep(self.sleep_time)

# --点击性别

self.driver.find_element_by_xpath(element_gender).click()

sleep(self.sleep_time)

# --注册提交

self.driver.find_element_by_xpath(element_regist).click()

# 成功指标

WebDriverWait(self.driver, 20).until(expected_conditions.element_to_be_clickable((By.XPATH, "//a[@aria-lable='Account']", "//")))

def close(self):

'''退出函数,增加代码健壮性'''

try:

self.driver.quit()

except Exception as error:

print(error)

old = find_element_by_id('xxx')

new = find_element_by_xpath('xxx')

if old or now is True:

在drive方法中的成功指标处,我希望实现

old = find_element_by_id('xxx')

new = find_element_by_xpath('xxx')

if old or new is True:

即new或者old中任意一个元素出现,结束等待,该如何实现,使用if等均报错。


回答:

这么简单都不会么,好像selenium库有这个功能的函数

while 1:

time.sleep(1)

old = find_element_by_id('xxx')

new = find_element_by_xpath('xxx')

if old or new:

break


回答:

https://stackoverflow.com/que...

根据上边的链接,可以使用以下方式实现多条件判断

Using CSS_SELECTOR:

element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, ".element_A_class, .element_B_class"))

Using XPATH through lambda:

element = WebDriverWait(driver,20).until(lambda driver: driver.find_element(By.XPATH,"element_A_xpath") or driver.find_element(By.XPATH,"element_B_xpath"))

条件的填入并不局限于上述两种,自己尝试即可

还有1楼,‘这么简单都不会么’,你说这话对提问的人有帮助么?

以上是 Selenium多条件等待 的全部内容, 来源链接: utcz.com/p/937878.html

回到顶部