【发布时间】:2013-12-05 02:36:20
【问题描述】:
背景:
我正在使用 Python 下载页面的源代码。我让 Selenium 登录网站,然后“找到”HTML。
elem = driver.find_element_by_id("account_id")
elem.send_keys("username")
elem = driver.find_element_by_id("password")
elem.send_keys("abc123")
elem.send_keys(Keys.RETURN)
print "Finding element..."
html = driver.find_element_by_xpath('//*')
然后将 HTML 保存到一个文本文件中,这可以完美运行,通常在 5 秒后完成。
问题:
如果我尝试等待页面的(相当复杂的)JavaScript 先加载,Selenium 找不到该元素。我尝试了以下方法:
import time
...
elem.send_keys(Keys.RETURN)
print "Waiting for page to load..."
time.sleep(10)
print "Finding element..."
html = driver.find_element_by_xpath('//*')
在最后一次打印之后,永远不会完成。类似的方法
wait = raw_input("Press Enter after the page has finished loading.")
有同样的问题,永远找不到任何东西。
我也尝试过这种不那么“蛮力”的方法:
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import selenium.webdriver.support.ui as ui
...
elem.send_keys(Keys.RETURN)
print "Waiting for page to load..."
element = ui.WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "SomeElement")))
无论我使用什么元素 ID,它都不会停止等待。
我是 Selenium 的新手,不知道还能尝试什么。
【问题讨论】:
-
如果元素在 iframe 中,您必须切换到 iframe。不确定是不是,但值得一看
-
原来它在 iframe 中,但我最终处于几乎相同的情况。我可以在 JavaScript 加载之前使用 switch_to_frame("name") 获取 iframe 的 HTML,但如果我在 JavaScript 加载后执行相同操作,它将找不到它。
标签: python selenium web-scraping wait