我正试图抓取此网站的$('a[href^="mailto:"]')
:https://celsius.network/
当我进入浏览器控制台运行时,我会得到一个链接,所以我知道它就在那里。
问题是我的请求(使用Axios库)在加载javascript之前返回DOM。我已经设置了User-Agent,但看起来它不起作用。
const axiosClient = () =>
axios.create({
headers: {
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.3 (KHTML, like Gecko) Version/8.0 Mobile/12A4345d Safari/600.1.4"
},
timeout: 10000
});
axiosClient()
.get("https://celsius.network")
.then(({ data }) => {
console.log("DATAAAAAAAA: ", data);
})
这将返回原始HTML,正文:
<body>
<div id="app"> </div>
....
而不是在所有javascript操纵DOM之后完全加载的那个。
P.S。我是通过firebase函数来做到这一点的,所以我认为我可以安装的内容有限制。
更新
const findEmail = url =>
new Promise((resolve, reject) => {
// here!
});
答案 0 :(得分:0)
您的请求方法不足以模拟您在浏览器中访问页面时所期望的内容。虽然有一些选择,puppeteer可能是这项工作的候选人。
您可以在浏览器中手动执行的大多数事情都可以使用Puppeteer来完成!
查看以下内容......
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.ww.lab.MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Do it!"
android:id="@+id/button"
android:onClick="sendNotification"/>
</android.support.constraint.ConstraintLayout>
我对你的约束并不完全清楚......
我可以安装的内容有限制
如果你有axios,我假设你可以安装这个npm包吗?
根据您的更新,木偶操纵者也可以通过promise api制作。以下应该为你做...
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://celsius.network/');
const textContent = await page.evaluate(() => document.querySelector('a[href^="mailto:"]').textContent);
console.log(textContent); // presale@celsius.network
browser.close();
})();