Rust reqwest:如何等到页面完全加载?

Rust reqwest: how to wait until the page is fully loaded?

我正在尝试获取一个带有 reqwest 库的网站。

问题是一些网站将在几毫秒或大约一秒内完全呈现。 (比如 table 元素在 html 渲染后加载)

let client = reqwest::Client::builder()
    .danger_accept_invalid_certs(true)
    .timeout(Duration::from_secs(5))
    .connect_timeout(Duration::from_secs(2))
    .user_agent("User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36")
    .build()?;

let res = client.get(PROBLEM_WEBSITE).send().await?;

let body = res.text().await?;

或者像 selenium 一样,等到元素是 visible/shown?

所以我想等一个特定的时间,但我不确定是否有办法。

res 之后尝试了 tokio::time::sleep,但显然这不是解决方案。

(超时,connect_timeout 没有任何影响)

Reqwest 不会这样做,它只会在给定的 URL 处加载数据,仅此而已。您要求的是浏览器在加载网页时显示的内容,其中包括加载其他资产、嵌入页面、运行 脚本等

您需要 full-on 浏览器才能获得此功能,这需要 web-driver(如 selenium)。只是四处寻找 Rust 解决方案,也许 fantoccini or chromiumoxide or headless_chrome 会引起您的兴趣。