我需要使用Apify和Zapier来自动执行i)登录到受密码保护的网页,以及ii)单击一个按钮。我该怎么办?
我认为我应该在Actor中使用Puppeteer,但是我不确定如何使用。
目标URL会不时更改。它们的格式为https://studio.example.com/products/videocloud/media/videos/{id_code}
,其中{id_code}
是6091481925001
。
Zapier应该调用Apify Actor来完成工作。现有zap中的操作已经可以访问动态{id_code}
。另一项操作应“运行Actor”以批准,将{id_code}
或完整URL https://studio.example.com/products/videocloud/media/videos/6091481925001
传递给Apify以继续运行。
如何正确通过“输入正文”将值传递给Apify?
在未经身份验证的情况下访问该页面时,页面将重定向到https://signin.example.com/?redirect=https%3A%2F%2Fstudio.example.com%2Fproducts%2Fvideocloud%2Fmedia%2Fvideos%2F6091481925001
上的登录表单,其中包含:
input
和id="email"
的{{1}})name="email"
和input
和id="password"
)name="password"
和button
的{{1}})如何使用Actor在此处登录?
通过身份验证后,将显示目标页面。它具有一个包含“激活”按钮的按钮栏(id="signinButton"
的子type="submit"
文本只有在允许我们单击的情况下才必须是“激活”)。
(有关信息-单击后,按钮文本应变为“停用”。)
如何获得Apify单击此处的“激活”按钮?
据我了解,这不是 scraping 作业,因为我不想从网页上返回数据,所以我不应该使用apify/puppeteer-scraper或{{3 }}。
到目前为止,我有以下内容。但是,Apify中的Puppeteer超时-长达9000ms的相当长的值,表明它不一定是页面加载问题(?)
button
答案 0 :(得分:0)
1)您可以将任意JSON传递给输入。像
一样传递{
"id_code": "ID_CODE_FROM_ZAPIER"
}
2)在Apify方面,您需要先使用
阅读输入内容const input = await Apify.getInput();
const { id_code } = input;
然后,您需要获取凭据。如果它们没有变化,我会将它们另存为参与者的环境变量。如果您将它们命名为EMAIL
和PASSWORD
,则可以通过以下方式在代码中访问它们:
const { EMAIL, PASSWORD } = Apify.getEnv();
现在,您需要启动Puppeteer,进入登录页面,填写输入字段,然后单击Submit。很简单,示例显示在此article中。您现在无需担心Cookie。
3)登录后,您需要通过
转到所需的URL。await page.goto(`https://studio.example.com/products/videocloud/media/videos/${id_code}`)
使用JQuery并找到文本,可以找到没有有用选择器时要单击的确切元素。我无法登录,所以我不是100%确信这会起作用。
// We need to inject JQuery first
await Apify.utils.puppeteer.injectJQuery(page);
// We can use JQuery only in the browser context, which means inside evaluate
await page.evaluate(() => {
$('button:contains("Activate")').click()
})
答案 1 :(得分:0)
await page.waitForNavigation({
waitUntil: "networkidle2"
});
**检查文档以获取更多信息https://pptr.dev/#?product=Puppeteer&version=v1.20.0&show=api-pagewaitfornavigationoptions
await page.waitForSelector('.buttonSelector')
**检查文档以获取更多信息https://pptr.dev/#?product=Puppeteer&version=v1.20.0&show=api-pagewaitforselectorselector-options