【问题标题】:Selenium wait for element to be clickable pythonSelenium 等待元素可点击 python
【发布时间】:2016-12-29 06:24:35
【问题描述】:

所有,我需要一些 Selenium 等待方面的帮助。我似乎无法弄清楚如何等待元素准备好。

我需要等待的元素我可以通过下面的代码使用我的脚本找到并单击...

CreateJob = driver.find_element_by_xpath(".//*[@id='line']/div[1]/a")

CreateJob = driver.find_element_by_partial_link_text("Create Activity")

在尝试单击该元素之前,我需要等待该元素出现在页面上并且可以单击。

我可以使用sleep 命令,但我必须等待 5 秒或更长时间,而且它似乎不可靠,并且出错了大约 8 次。

我似乎找不到要使用的正确语法。

HTML 代码如下。

<document>
<html manifest="https://tddf/index.php?m=manifest&a=index">
<head>
<body class="my-own-class mozilla mozilla48 mq1280 lt1440 lt1680 lt1920 themered" touch-device="not">
<noscript style="text-align: center; display: block;">Please enable JavaScript in your browser settings.</noscript>
<div id="wait" style="display: none;">
<div id="processing" class="hidden" style="display: none;"/>
<div id="loading" class="hidden" style="display: none;"/>
<div id="loadingPartsCatalog" class="hidden"/>
<div id="panel">
<div id="top-toolbar" class="hidden" style="display: block;">
<div id="commands-line" class="hidden" style="display: block;">
<div id="line">
<div class="action-link">
<a class="tap-active" href="#m=activity/a=set" action_link_label="create_activity" component_gui="action" component_type="action">Create Activity</a>
</div>
<div class="action-link">
<div class="action-link">
<div class="action-link">
</div>
<div id="commands-more" style="display: none;">
<div id="commands-list" class="hidden">
</div>
<div id="provider-search-bar" class="hidden center"  

【问题讨论】:

    标签: python selenium


    【解决方案1】:

    这是 Python Selenium 文档的“等待”部分的链接:http://selenium-python.readthedocs.io/waits.html#explicit-waits

    你的等待应该是这样的:

    element = WebDriverWait(driver, 10).until(
        EC.visibility_of((By.XPATH, ".//*[@id='line']/div[1]/a"))
    )
    

    【讨论】:

    • 那行得通。知道如何根据元素的文本使用它吗?
    • element = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.LINK_TEXT, "Create Activity")) )..
    • @th2112 Saurabh 是正确的,还有一个 By.PARTIAL_LINK_TEXT。 selenium-python.readthedocs.io/locating-elements.html
    • 两者都成功了!谢谢,我只是对它的语法有问题......仍在学习......
    【解决方案2】:

    我觉得这是最简单的:

    driver.implicitly_wait(10) 
    

    如果不满足预期条件,它可能会在脚本崩溃之前等待长达 10 秒。我认为这比总是检查元素的可见性、可点击性或任何关于元素的内容要好。然而,效率较低且更容易出错。所以这将更多地取决于你为什么使用硒。

    它还让我减少了我的 selenium 脚本中的 try/except 语句,自从我发现了这一点后,我也减少了很多 time.sleep() 函数。

    【讨论】:

      猜你喜欢
      • 2020-02-23
      • 2019-10-16
      • 1970-01-01
      • 2012-03-26
      • 2018-02-19
      • 2020-02-23
      • 2022-11-28
      • 1970-01-01
      • 2015-10-11
      相关资源
      最近更新 更多