Selenium等待元素可点击python

时间:2016-08-22 15:59:16

标签: python selenium

所有,我需要一些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次左右的时间内出错1次。

我似乎无法找到正确的语法。

此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"  

3 个答案:

答案 0 :(得分:4)

以下是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"))
)

答案 1 :(得分:1)

我发现这是最简单的:

const date = moment("2016-08-16T17:00:00Z").date();
const month = moment("2016-08-16T17:00:00Z").month();
const hour = moment("2016-08-16T17:00:00Z").hour();
const year = moment("2016-08-16T17:00:00Z").year();
const minute = moment("2016-08-16T17:00:00Z").minute();
const sec = moment("2016-08-16T17:00:00Z").second();
// implementing some logic
console.log('' + date + '/' + month + '/' + year + ' ' + hour + ':' + minute + ':' + sec);

如果没有达到预期的条件,它会在脚本崩溃之前等待最多10秒。我认为比检查元素的可见性,可点击性或其他任何内容都要好。但是,效率更低,更容易出错。所以它更多地取决于你使用硒的原因。

它还允许我减少我的selenium脚本中的try / except语句,因为我已经发现了这个,我也减少了许多time.sleep()函数。

答案 2 :(得分:0)

如果您使用的是Java,请尝试使用WebDriverWait语法 -

new WebDriverWait(driver,10,100).until(ExpectedConditions.visibilityOf(CreateJob));

等待10次并每100毫秒轮询以使CreateJob元素可见。也可以使用ExpectedConditions.elementToBeClickable(CreateJob)