【问题标题】:Is there a reason on why its not skipping to the else (Selenium)?为什么它不跳到其他(硒)有什么原因吗?
【发布时间】:2021-06-14 06:50:53
【问题描述】:
def addtocart():
    #driver.get("https://www.mrporter.com/en-gb/mens/product/nike/shoes/low-top-sneakers/space-hippie-04-recycled-stretch-knit-sneakers/19971654707345242")
    driver.get("https://www.mrporter.com/en-gb/mens/product/nike/shoes/low-top-sneakers/plus-sacai-blazer-low-colour-block-leather-sneakers/10163292708776845?ntfyeu=jo5suw")
    
    while driver.find_element_by_xpath("/html/body/main/div/div[2]/div/div[1]/div[2]/div[8]/div[2]").is_displayed():
        time.sleep(2)
        driver.refresh()
        print("Item out of stock , waiting for product")
    else:    
        driver.find_element_by_xpath("/html/body/main/div/div[2]/div/div[1]/div[2]/div[6]/div/div/div").click()
         

addtocart()

在我的代码中,如果页面上显示“对不起,此商品已售罄。请将其添加到您的愿望清单,这样您就不会错过如果它再次可用”我希望它保持刷新直到它成为库存(评论的链接有一个例子)。当产品有库存时(该消息不再显示在页面上)我希望它跳到其他地方。

由于某种原因,它没有跳到其他地方

【问题讨论】:

    标签: python selenium selenium-chromedriver


    【解决方案1】:

    我猜你已经目睹了“有货”事件。

    由于某种原因,它没有跳到其他地方。

    您所定位的元素可能仍然存在于相同的XPath 中,即使其内容已更改。解释为什么它一直被视为displayed,即对用户可见。

    无论如何,您可以尝试通过将 XPath 更改为更奇特的东西来让事情变得更加动态,减少对 DOM 结构的依赖,比如

    # [...]
    while driver.find_element_by_xpath("//*[contains(text(), 'this item is sold out')]").is_displayed():
        # [...]
    

    上述 XPath 执行partial text matching

    【讨论】:

    • The element you are targeting may still exist at the same xpath 基本上是在复制我的回答,哈哈
    • “已显示”表示已显示 @Jared。再读一遍所写的,你会发现没有人抄袭任何人。此外(鉴于SO 上的问题应该是自移植的),我们当时不知道事情是如何隐藏的,真的是 CSS-display:none; 或其他。 OP 的话不应被严格理解,她的问题是改进方法的时机,同时防止任何XY problem 公式化。
    • 有任何问题@Joshcampbell7 ?
    猜你喜欢
    • 2021-04-09
    • 2012-09-16
    • 1970-01-01
    • 2014-08-25
    • 2019-01-13
    • 1970-01-01
    • 2018-01-08
    • 2021-11-05
    • 1970-01-01
    相关资源
    最近更新 更多