【问题标题】:python selenium : selenium.common.exceptions.TimeoutException: Message: line 20python selenium:selenium.common.exceptions.TimeoutException:消息:第 20 行
【发布时间】:2015-06-19 10:37:57
【问题描述】:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import  time

driver = webdriver.Firefox()
driver.get("http://www.youtube.com")
assert "YouTube" in driver.title

def waiter(browser):
    elements = browser.find_element_by_xpath(filterButton)
    if len(elements) != 0:
        return elements
    return False

search = "//input[@id='masthead-search-term']"
searchButton = "//button[@id='search-btn']"
filterButton = "//button[@class='yt-uix-button yt-uix-button-size-small yt-uix-button-default filter-button yt-uix-expander-head yt-uix-button-toggled']"
textFieldElement = WebDriverWait(driver, 10).until(lambda driver1: driver.find_element_by_xpath(search))
textFieldElement.clear()
textFieldElement.send_keys("How to iron the clothes")
searchButtonElement = WebDriverWait(driver, 10).until(lambda driver1: driver.find_element_by_xpath(searchButton))
searchButtonElement.click()
filterButtonElement = WebDriverWait(driver, 20).until(waiter)
filterButtonElement.clickandWait()
time.sleep(10)
driver.quit()

我正在尝试使用 selenium python 绑定浏览 youtube 站点,但它在第 20 行出现超时异常错误错误。我认为这是由于 span 标签不可见。所以请给我一个解决这个问题的方法

错误生成:// selenium.common.exceptions.TimeoutException: 消息:第 20 行

【问题讨论】:

    标签: python python-3.x selenium selenium-webdriver


    【解决方案1】:

    通常,您的 XPath 表达式非常脆弱 - 不要依赖于面向布局的类,例如 yt-uix-button-size-smallyt-uix-expander-head。相反,例如,依赖“过滤器”按钮文本。

    不要使用自定义等待函数,而是使用built-in Expected Conditions

    # -*- coding: utf-8 -*-
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.support.ui import WebDriverWait
    
    
    driver = webdriver.Firefox()
    driver.get("http://www.youtube.com")
    wait = WebDriverWait(driver, 10)
    
    textFieldElement = wait.until(EC.visibility_of_element_located((By.ID, "masthead-search-term")))
    textFieldElement.clear()
    textFieldElement.send_keys("How to iron the clothes")
    
    searchButtonElement = wait.until(EC.visibility_of_element_located((By.ID, "search-btn")))
    searchButtonElement.click()
    
    filterButtonElement = wait.until(EC.visibility_of_element_located((By.XPATH, "//button[span = 'Filters']")))
    filterButtonElement.click()
    

    【讨论】:

    • 或者更好的是,只依赖特定的标识符,专门为 selenium 制作(如果您可以控制项目的 HTML 标记),因为任何前端内容都可能更改。
    猜你喜欢
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 2023-03-06
    • 2014-11-07
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    相关资源
    最近更新 更多