AttributeError: 'bytes' 对象没有属性 'presence_of_element_located'

时间:2021-06-25 21:11:35

标签: python selenium selenium-webdriver selenium-chromedriver

简单的代码是:

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

但是无论我从该页面、xpath 还是 id 中选择,我总是收到此错误 AttributeError: 'bytes' object has no attribute 'presence_of_element_located' 我在网络不幸。有任何想法吗?谢谢。

我正在切换到该代码之前的帧,我不确定这是否有影响。因为我必须这样做,但是当我使用足够的 time.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

2 个答案:

答案 0 :(得分:1)

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

这些是导入

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

正如您所提到的“我正在切换到该代码之前的帧,我不确定这是否有效果。”

如果 ID content 在同一个 iframe 中,则不需要更改,但如果它在 tokenpageiframe iframe 之外,那么首先您需要切换到默认内容:

driver.switch_to.default_content()

并尝试一下。

下面的代码也是等价的:

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

答案 1 :(得分:0)

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

element_present.decode('utf-8')

然后你再试一次。

WebDriverWait(driver, timeout).until(element_present)