简单的代码是:
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
答案 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)