我需要使用Apify和Zapier来自动化 i)登录到受密码保护的网页和 ii)单击按钮。我怎样才能做到这一点?
我想我应该在 Actor 中使用 Puppeteer,但我不确定如何。
目标 URL 会不时更改。它们的格式是https://studio.example.com/products/videocloud/media/videos/{id_code}where {id_code}is,例如6091481925001.
1.扎皮尔
Zapier 应该调用 Apify Actor 来完成这项工作。现有 zap 中的操作已经可以访问动态{id_code}. 一个额外的动作应该“运行 Actor”给 Apify,将一个{id_code}或完整的 URL传递https://studio.example.com/products/videocloud/media/videos/6091481925001给 Apify 以在其上运行。
如何通过“输入正文”正确地将值传递给 Apify?
2. 登录
在未经身份验证的情况下访问时,页面将重定向到登录表单https://signin.example.com/?redirect=https%3A%2F%2Fstudio.example.com%2Fproducts%2Fvideocloud%2Fmedia%2Fvideos%2F6091481925001:
- “电子邮件地址”(
input带有id="email"和name="email") - “密码”(
input带id="password"和name="password") - “登录”按钮(
button带有id="signinButton"和type="submit")
如何在此处使用 Actor 登录?
3. 点击
一旦通过身份验证,就会出现目标页面。它有一个按钮栏,包括“激活”按钮(如果我们被允许单击它button,其子span文本只能是“激活”)。
(有关信息 - 单击后,按钮文本应变为“停用”)。
如何让 Apify 在此处单击“激活”按钮?
据我了解,这不是抓取工作,因为我不希望从网页返回数据,所以我不应该使用apify/puppeteer-scraper或apify/web-scraper。
更新:
到目前为止,我有以下内容。但是,Apify 中的 Puppeteer 超时 - 相当长的值高达 9000 毫秒,这表明它不一定是页面加载问题(?)
const Apify = require('apify');
Apify.main(async () => {
// Get credentials
const { EMAIL, PASSWORD } = Apify.getEnv(); // Docs for using values: https://apify.com/docs/actor#source-env-vars
// Launch Puppeteer
const browser = await Apify.launchPuppeteer();
const page = await browser.newPage();
await page.goto('https://signin.example.com/login');
// Login
await page.type('#email', process.env.EMAIL);
console.log('Attempted to enter email');
await page.type('#password', process.env.PASSWORD);
console.log('Attempted to enter password');
await page.click('#signinButton');
console.log('Attempted to click button');
// Times-out here
await page.waitForNavigation();
console.log('Attempted to wait for navigation');
// Get cookies
const cookies = await page.cookies();
console.log('Attempted to wait for cookies');
await browser.close();
console.log('Done.');
});


