属性错误: 'bytes'对象没有属性'presence_of_element_located'



简单地说,代码是:

timeout = 3
element_present = EC.presence_of_element_located((By.ID, 'content'))
WebDriverWait(driver, timeout).until(element_present)

但是,无论我从该页面、xpath或id中选择什么,我总是会收到以下错误AttributeError:"bytes"对象没有属性"presence_of_element_located">,不幸的是,我在网上找不到一个解决方案。有什么想法吗?谢谢

我正在切换到该代码之前的帧,我不确定这是否有影响。因为我必须这样做,但当我使用足够的时间.sleep((时,它并没有导致错误,我试图通过使用WebDriverWait来节省时间,但它不起作用。

frame = driver.find_element_by_xpath('//*[@id="tokenpageiframe"]')
driver.switch_to.frame(frame)

编辑:没有提到,但所有需要的东西都已经导入了。

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from telnetlib import EC

看起来像@ble:提到的导入问题

这些将是进口

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

也正如你提到的";我正在切换到该代码之前的帧,我不确定这是否有影响">

如果IDcontent在同一iframe中,则不需要更改,但如果它在tokenpageiframeiframe之外,则首先需要切换到默认内容:

driver.switch_to.default_content()

尝试一下。

以下代码也是等效的:

wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.ID, 'content')))

这个问题没有足够的信息可以回答,但是,看看你的代码,可能你用来查找的变量之一有一个"b";在你的文本之前。示例:b"内容"。这个回溯说明了这一点。要使用此变量,您应该将其解码回utf-8示例:

element_present.decode('utf-8')

然后你再试一次。

WebDriverWait(driver, timeout).until(element_present)

最新更新