Python 即使存在元素,WebdriverWait也会失败

Python 即使存在元素,WebdriverWait也会失败,python,html,selenium,xpath,selenium-webdriver,Python,Html,Selenium,Xpath,Selenium Webdriver,这是我的密码: def CheckQueue(driver): qdone = False qID_xpath_start = "/html/body/div[5]/form/table/tbody[1]/tr[" qID_xpath_end = "]/td[2]/a" qIDindex = 1 while qdone == False: print "enter loop" print driver.find_elemen

这是我的密码:

def CheckQueue(driver):
    qdone = False
    qID_xpath_start = "/html/body/div[5]/form/table/tbody[1]/tr["
    qID_xpath_end = "]/td[2]/a"
    qIDindex = 1
    while qdone == False:
        print "enter loop"
        print driver.find_element_by_xpath(qID_xpath_start+str(qIDindex)+qID_xpath_end).text #This prints
        try:
            element = WebDriverWait(driver, 6000).until(ec.presence_of_element_located(By.XPATH((qID_xpath_start+str(qIDindex)+qID_xpath_end)))) #This fails
            print "found"
        except:
            qdone= True
            print "could not be found"

        print driver.find_element_by_xpath(qID_xpath_start+str(qIDindex)+qID_xpath_end).text
        if qdone == False:
            print driver.find_element_by_xpath(qID_xpath_start+str(qIDindex)+qID_xpath_end).text
            print "testing"

        qIDindex +=1
        print "loop"
    return driver
我返回了这个(14453是我正在寻找的xpath的链接文本)

我的代码似乎能够找到链接,但当被要求检查链接是否存在时,它失败,并激活except语句。如果它已经被找到并打印出来,为什么会失败呢

而且,它几乎立刻就失败了,尽管我已经分配了这么多时间来查看它

知道我哪里出错了吗

我试过了

element = WebDriverWait(driver, 6000).until(ec.presence_of_element_located(By.XPATH((qID_xpath_start+str(qIDindex)+qID_xpath_end))))

element = WebDriverWait(driver, 6000).until(EC.presence_of_element_located(By.XPATH((qID_xpath_start+str(qIDindex)+qID_xpath_end))))

element = WebDriverWait(driver, 6000).until(ec.presence_of_element_located(By.XPATH, qID_xpath_start+str(qIDindex)+qID_xpath_end))

element = WebDriverWait(driver, 6000).until(ec.presence_of_element_located(By.xpath, qID_xpath_start+str(qIDindex)+qID_xpath_end))
我使用的是Python 2.7、Selenium 2.43、Firefox 23.0.3

顺便说一句,为了测试xpath元素是否可以在某些点找到,我加入了几个可能感觉不合适的print语句

编辑:删除try语句时,出现此错误

element = WebDriverWait(driver, 6000).until(EC.presence_of_element_located(By.XPATH((qID_xpath_start+str(qIDindex)+qID_xpath_end))))
NameError:未定义全局名称“By”

我的代码中有以下导入语句:

from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0
from selenium.webdriver.support import expected_conditions as EC # available since 2.26.0
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.action_chains import ActionChains
我想我确实需要添加一个import语句,但我似乎找不到如何通过

我试过:

from selenium.webdriver.common.by import By
当我运行它时,我克服了那个错误,但收到了这个错误:

element=WebDriverWait(driver,6000).until(EC.presence_of_element_located(By.XPATH)((qID_XPATH_start+str(qIDindex)+qID_XPATH_end))) TypeError:“str”对象不可调用

然后,我更新了我的WebDriverWait行,以反映alecxe的建议

element = WebDriverWait(driver, 6000).until(EC.presence_of_element_located((By.XPATH, qID_xpath_start+str(qIDindex)+qID_xpath_end)))
现在它似乎正在发挥作用

错误,应该是:

WebDriverWait(driver, 60).until(ec.presence_of_element_located((By.XPATH, qID_xpath_start+str(qIDindex)+qID_xpath_end)))
注意传递到
presence\u of_element\u located()
方法中的元组

请注意,
60
在这里是60秒



此外,为了成功地调试和理解正在发生的事情,让它失败通常会有所帮助-删除
try/except
,查看引发了什么类型的错误。

删除
try/except
块,并发布您得到的完整错误回溯。现在已经晚了,但值得指出的是,
WebDriverWait
只需几秒钟,而不是几毫秒。在这个答案中留下6000可能会导致某人被解雇。@Tgsmith61591啊,我知道我是如何混淆的-webdriverjs在
浏览器中使用毫秒。wait()
。对我来说,selenium绑定太多了:)我做同样的事情。每当我从Java转到Python时,我都会不经意地等待很长一段时间才意识到
时间。sleep(1000)
线程不同。sleep(1000)
:-)如果你想要外部参照的一部分,你可以使用
元素的存在((By.XPATH,//a[以(@href)开头,”https://www.bla-bla)
。不知道是否可以写得更短,只是在其他帖子中看到了。@AlexeiMartianov它可以是:
presence\u of_element\u located((By.CSS\u SELECTOR,'a[href^=”https://www.bla-bla“]”)
:)
WebDriverWait(driver, 60).until(ec.presence_of_element_located((By.XPATH, qID_xpath_start+str(qIDindex)+qID_xpath_end)))