温馨提示:本文翻译自stackoverflow.com,查看原文请点击:python - Element sometimes appears and sometimes does not, how to continue script either way?
html if-statement python selenium element

python - 元素有时出现而有时不出现,如何以任何一种方式继续执行脚本?

发布于 2020-04-08 00:26:47

我的 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行的块是与该元素进行交互的块,有时该脚本有时不明显,因为脚本来回执行该任务。

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

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

查看更多

提问者
plx23
被浏览
63
arkadiyala 2020-02-01 05:24
private boolean isElementPresent(By by) {
try {
    driver.findElement(by);
    return true;
} catch (NoSuchElementException e) {
    return false;
}

}