我使用Selenium模块在Python中创建了一个小程序。
下面是我代码:
while True:
try:
btnOptions = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "/html/...."))).click()
firstElement = driver.find_elements(By.XPATH, "//*[text()='Click']")
if not firstElement:
tnTrash = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//*[text()='Move']"))).click()
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,
"/html/body/..."))).click()
else:
firstElement.click()
except NoSuchElementException:
break
该循环应该:
第一步:找到按钮选项按钮-〉按钮选项= WebDriverWait(驱动程序,10).until(EC.element_to_be_clickable((By.XPATH,“/html/....”))).单击()
菜单打开,在该菜单中可以有元素1或元素2;永远不要同时使用这两种方法。例如,
element1 is :
WebDriverWait(driver, 10).until(driver.find_elements(By.XPATH, "//*[text()='element1']"))
element2 is :
WebDriverWait(driver, 10).until(driver.find_elements(By.XPATH, "//*[text()='element2']"))
步骤2:如果找到元素1,则单击它并从开始处重新开始循环。如果找到的是元素2,则单击它并从开始处重新开始循环。
如果是要删除的帖子,则元素1会出现在下拉菜单中;如果是个人资料照片,则元素2会出现在下拉菜单中。
目前,只要我的程序找到了元素1,它就会继续运行,如果元素2存在,它就会停止,并显示一个错误,告诉我没有找到元素1
我想到了这一点,但还是行不通:
while True:
try:
btnOptions = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "/html/body/div..."))).click()
WebDriverWait(driver, 20).until(driver.find_element(By.XPATH("//*[text()='move to trash']"))).click() or WebDriverWait(driver, 20).until(driver.find_element(By.XPATH("//*[text()='Do not show in profile']"))).click()
except NoSuchElementException:
break
2条答案
按热度按时间0pizxfdo1#
您可以尝试以下操作:
您尝试单击您的元素,如果确定,则代码将在except块后继续,如果单击失败,则意味着元素不存在,因此它将在except块中运行您预期的代码
gj3fmq9x2#
验证元素是否存在的最简单的方法是使用
find_elements
方法,因为在这种情况下,如果没有找到元素,将不会抛出异常。您的代码中有几个问题需要改进:
1.由于您在此处单击元素,因此应使用
element_to_be_clickable
expected_conditions
,而不是presence_of_element_located
。1.使用
WebDriverWait
expected_conditions
时,无需在操作之间添加休眠。3)可以直接对返回的web元素对象执行
click()
,不需要放到临时变量中。4)你的定位器应该得到改善,但我不能在这里帮助,因为我不知道你在哪个页面上工作。
因此,您的代码可以如下所示: