在Selenium中返回源代码之前等待(不是timeout())

时间:2017-06-06 19:40:32

标签: python selenium

我正在尝试网络浏览this website。正如您所看到的,在打开之后,它会首先显示第一个错误的页面几秒钟,然后加载我感兴趣的实际右页。

为清楚起见。 First/wrong pagesecond, right page

正如所料,使用BeautifulSoupRequests我只设法获取“第一页”的html,而不是“正确”页面。

我尝试使用Seleniumset_page_load_timeout(),它只返回“第一个/错误”页面而不是实际页面。

driver = webdriver.Chrome()
driver.set_page_load_timeout(7)
url = 'https://images.nga.gov/en/search/do_quick_search.html?q=%221949.7.1%22'
driver.get(url)
source = BeautifulSoup(driver.page_source, 'html.parser')
print(source)

我已经尝试过寻找相关问题,但是他们都是关于设置超时,这似乎不是问题,因为页面正在加载,它不是我想要的页面。

有没有办法在7秒后获得source? (即在获取源之前等待7秒,而不是在7秒后超时)

1 个答案:

答案 0 :(得分:1)

您可以使用title_is() expected condition等待特定时刻打开所需页面(页面标题从"Just a moment..."更改为"National Gallery of Art | NGA Images"):

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait as wait


driver = webdriver.Chrome()
url = 'https://images.nga.gov/en/search/do_quick_search.html?q=%221949.7.1%22'
title = "National Gallery of Art | NGA Images"
driver.get(url)
wait(driver, 10).until(EC.title_is(title))
source = BeautifulSoup(driver.page_source, 'html.parser')
print(source)