在等待页面加载后,Selenium没有响应

时间:2013-11-20 21:14:41

标签: python selenium web-scraping wait

背景

我正在使用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的新手,不知道还有什么可以尝试。

1 个答案:

答案 0 :(得分:0)

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

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