python - 元素有时出现有时不出现,如何继续脚本?

标签 python html selenium if-statement element

我的selenium(python)脚本正在一个仪表板网站上做一些工作,即当我与该仪表板上的元素交互时,实际的网页/链接不会改变。我提到这一点是因为我考虑通过 driver.get() 命令简单地跳转到不同的链接,以避免我现在遇到的一些问题。

在某一时刻,脚本到达仪表板的一部分,由于某种原因,在我的一些测试运行期间有一个元素,而其他时候该元素不存在。我有几行与此元素交互,因为它是我想要 .click() 的另一个元素的方式。因此,当该元素不存在时,我的脚本将停止工作。这是一个在开始时会重复相同操作但略有变化的脚本,因此我想我需要以某种方式集成某种“if”命令。

我的目标是写一些可以做到这一点的东西: - 如果此元素不存在,则跳过与其交互的代码行并跳转到下一行操作。如果该元素存在显然继续。

day = driver.find_element_by_xpath('/html/body/div[4]/table/tbody/tr[4]/td[2]/a')
ActionChains(driver).move_to_element(day).click().perform()

driver.implicitly_wait(30)

lizard2 = driver.find_element_by_xpath('/html/body/div[5]/div/div[2]/div[1]/img')
ActionChains(driver).move_to_element(lizard2).perform()
x2 = driver.find_element_by_xpath('/html/body/div[5]/div/div[2]/div[2]')
ActionChains(driver).move_to_element(x2).click().perform()

driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')

因此,以“lizard2”开头并进入 ActionChains 行的 block 是与此元素交互的 block ,当脚本来回执行任务时,该 block 有时很明显,有时则不明显。

上面两行只是让我进入具有此随机出现元素的仪表板阶段的代码。最后的滚动命令如下。如前所述,如果找不到“lizard2”和“x2”元素,我需要忽略中间部分并继续滚动部分。

如果这令人困惑并且不够简洁,我深表歉意,我很高兴听到你们的想法并提供任何其他信息/细节,谢谢!

最佳答案

您可以简单地在 try/except block 中执行 find_element_by_xpath,如下所示:

from selenium.common.exceptions import NoSuchElementException
try:
    myElement = driver.find_element_by_xpath(...)
    #Element exists, do X
except NoSuchElementException:
    #Element doesn't exist, do Y

编辑:就像补充一下,在你的问题的评论中有人建议这个方法是“hacky”,它实际上非常Pythonic并且非常标准。

关于python - 元素有时出现有时不出现,如何继续脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60011289/

相关文章:

java - Selenium Java API 为什么 driver.findElement(By.tagName ("title")).getText() 总是返回空

python - 如何在 PyQT 中分离 ui 和实现?

python - 在 Python 中的同一迭代中查找最小值和最大值

Python 时区全名

javascript - 为什么我的 Bootstrap 弹出窗口不起作用?

Java Selenium 测试NG : problems with framework (a project) when used by another project

Selenium 从 xpath 获取动态 id

python - 无法导入名称getoutput

css - 整页 Div 不显示

javascript - HTML 页面被添加到 iFrame 中