简单地说,代码是:
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中,则不需要更改,但如果它在tokenpageiframe
iframe之外,则首先需要切换到默认内容:
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)