【问题标题】:Selenium unresponsive after waiting for page to load等待页面加载后 Selenium 无响应
【发布时间】: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


【解决方案1】:

这并不是真正的解决方案,但解决我的问题的解决方法是从使用 Chrome 驱动程序切换到 Firefox 驱动程序。

ETA:Chrome 驱动程序无法在 Linux 上运行。

【讨论】:

    猜你喜欢
    • 2018-03-20
    • 2017-03-27
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 2011-08-17
    • 2018-06-14
    相关资源
    最近更新 更多