我正在尝试使用 reqwest 库获取一个网站。
问题是某些网站将在几毫秒或大约一秒内完全呈现。 (就像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?;
Run Code Online (Sandbox Code Playgroud)
或者像硒一样,等到元素可见/显示?
所以我想等待一个特定的时间,但我不确定是否有办法。
tokio::time::sleep之后尝试过res,但显然这不是解决方案。
(超时,connect_timeout没有影响任何事情)
Reqwest 不执行此操作,它仅加载给定 URL 处的数据,仅此而已。您要求的是浏览器在加载网页时显示的内容,其中包括加载其他资源、嵌入页面、运行脚本等。
您需要一个功能齐全的浏览器才能获得此功能,这将需要一个网络驱动程序(例如 selenium)。只是四处寻找 Rust 解决方案,也许fantoccini或者chromiumoxide或者headless_chrome符合您的喜好。