【问题标题】:Python Selenium - Close Driver When Text is no longer foundPython Selenium - 不再找到文本时关闭驱动程序
【发布时间】:2021-03-27 08:33:54
【问题描述】:

您好,我正在使用 selenium 对网页进行自动化测试。我正在使用 selenium 和 python,并且只想在这个框架中得到答案。我运行循环脚本来检查是否仍然找到文本,如果没有则关闭浏览器。我已经尝试了我的脚本,但只有在文本上有链接时才能工作

    while True:
        try:
            element = WebDriverWait(driver, 5).until(
           EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, "My Text"))  
            )
    
        except:
            break
    driver.close()
    driver.quit()

当文本有链接时,该脚本正在工作,问题是我的文本是没有任何链接的纯文本。我不能使用 css 选择器,因为文本会在几分钟后发生变化,所以我需要定位文本而不是 xpath 或其他文本。希望有人可以提供帮助。谢谢

【问题讨论】:

    标签: python selenium automation


    【解决方案1】:

    您正在使用By.PARTIAL_LINK_TEXT,它旨在仅在链接中查找文本。 如果要在所有元素中查找文本,需要使用XPATH

    EC.presence_of_element_located((By.XPATH, "//*[contains(text(), 'My Text')]")) 
    

    参见参考: https://stackoverflow.com/a/18701085/14241710

    【讨论】:

    • 我这样做了,但是当文本改变时驱动程序不会关闭。我错过了什么吗?
    • 顺便说一句,这是我的文本的 xpath //*[@id="container"]/h1/yt-formatted-string/text()
    • 几乎可以工作,我点击不同的地址后它会关闭,但是当文本发生变化时不会自行关闭,有什么建议吗?
    • 附言。我需要刷新页面,以便驱动程序将关闭
    【解决方案2】:

    试试看,可能会有帮助:

    def check_no_longer_present(text):
       try:
           if driver.find_element_by_xpath("//[contains(text(), '{}')".format(text)).is_displayed():
               return False
       except NoSuchElementException:
           return True
    
    if check_no_longer_present('you_text'):
        driver.quit()
    

    【讨论】:

    • 我应该把我的文字放在哪里?
    • @MukhammadAnwarFuadi 你知道元素的文本吗???
    • 我的意思是,您在“//[contains(text(), '{}}')”上有 {}},我应该用我的文本替换它吗?我尝试更改 you_text on if check_no_longer_present('you_text') whit 我的文字但仍然无法正常工作,我错过了什么吗?谢谢
    • @MukhammadAnwarFuadi 您只需要使用 check_no_longer_present('you_text'),其中 you_test - 是您对元素的测试
    • "//[contains(text(), '{}}').format() 会自动将文本放到选择器中
    猜你喜欢
    • 2018-08-15
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    • 2020-04-16
    相关资源
    最近更新 更多