【问题标题】:Trouble getting an element to be clicked using Selenium使用 Selenium 获取要单击的元素时遇到问题
【发布时间】:2020-12-12 21:15:10
【问题描述】:

我正在尝试访问以下网址

https://twitter.com/explore

在我使用的文本框中输入 HBO Max

By.cssSelector("input[placeholder='Search Twitter']")

然后我想选择出现在下拉列表中的 HBO Max 选项。我要选择的元素的定位器是

By.xpath("//div[@role='option']//li/div/div[2]")

有时元素被点击,然后我进入新页面,有时没有。我在我的框架中等待元素可以使用 WebDriverWait 进行点击。该元素既可见又启用,因为我在单击元素之前打印了这些值。

执行了额外的调试步骤 -

  1. 使用 JavaScript 进行单击似乎具有相同的行为。
  2. 我相信我使用了正确的定位器,因为鼠标事件是为此元素生成的。
  3. Thread.Sleep 似乎可以工作,这表明可能是时间问题

任何输入都会很棒。

【问题讨论】:

    标签: selenium click webdriverwait


    【解决方案1】:
    try:
        myElem = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.ID, 'ID')))
        print("Page is ready!")
    except TimeoutException:
        print("Loading took too much time!")
    

    试试这个! 它的作用:它一直等到网站的特定元素被加载。如果花费的时间超过指定的时间,只会给你一个输出,因为“加载也花费了............”

    您可以修改等待所需的时间。

    【讨论】:

    • 不,不是这个。在采取任何行动之前,我的框架已经等待元素出现。此外,就像我提到的那样,该元素也是启用且可见的。我怀疑即使元素在那里并且可以点击,当我点击它时,click 事件的事件处理程序还没有注册到该元素。有解决方法。例如,我总是可以创建一个自定义的预期等待条件,等待元素可点击以及点击时更改 URL。但更感兴趣的是试图理解为什么它在这里不起作用
    • 我检查了 twitter 网页,搜索了 hbo max,xpath 似乎不正确。我得到的是 hbo 配置文件的 xpath 是 "//*[@id="typeaheadDropdown-4"]/div[6]/div/li/div"
    • 只搜索第一个建议,那么我得到的xpath是"//*[@id="typeaheadDropdown-4"]/div[2]/div/div/div"
    猜你喜欢
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    • 2021-08-05
    • 2014-11-29
    • 1970-01-01
    相关资源
    最近更新 更多