如何使用Apify登录网站并单击按钮?

时间:2019-10-03 11:53:34

标签: puppeteer zapier apify

我需要使用ApifyZapier来自动执行i)登录到受密码保护的网页,以及ii)单击一个按钮。我该怎么办?

我认为我应该在Actor中使用Puppeteer,但是我不确定如何使用。

目标URL会不时更改。它们的格式为https://studio.example.com/products/videocloud/media/videos/{id_code},其中{id_code}6091481925001

1。 Zapier

Zapier应该调用Apify Actor来完成工作。现有zap中的操作已经可以访问动态{id_code}。另一项操作应“运行Actor”以批准,将{id_code}或完整URL https://studio.example.com/products/videocloud/media/videos/6091481925001传递给Apify以继续运行。

如何正确通过“输入正文”将值传递给Apify?

enter image description here

2。登录

在未经身份验证的情况下访问该页面时,页面将重定向到https://signin.example.com/?redirect=https%3A%2F%2Fstudio.example.com%2Fproducts%2Fvideocloud%2Fmedia%2Fvideos%2F6091481925001上的登录表单,其中包含:

  • “电子邮件地址”(带有inputid="email"的{​​{1}})
  • “密码”(name="email"inputid="password"
  • “登录”按钮(带有name="password"button的{​​{1}})

如何使用Actor在此处登录?

enter image description here

3。点击

通过身份验证后,将显示目标页面。它具有一个包含“激活”按钮的按钮栏(id="signinButton"的子type="submit"文本只有在允许我们单击的情况下才必须是“激活”)。

(有关信息-单击后,按钮文本应变为“停用”。)

如何获得Apify单击此处的“激活”按钮?

enter image description here

据我了解,这不是 scraping 作业,因为我不想从网页上返回数据,所以我不应该使用apify/puppeteer-scraper或{{3 }}。

更新:

到目前为止,我有以下内容。但是,Apify中的Puppeteer超时-长达9000ms的相当长的值,表明它不一定是页面加载问题(?)

button

2 个答案:

答案 0 :(得分:0)

1)您可以将任意JSON传递给输入。像

一样传递
{
   "id_code": "ID_CODE_FROM_ZAPIER"
}

2)在Apify方面,您需要先使用

阅读输入内容
const input = await Apify.getInput();
const { id_code } = input;

然后,您需要获取凭据。如果它们没有变化,我会将它们另存为参与者的环境变量。如果您将它们命名为EMAILPASSWORD,则可以通过以下方式在代码中访问它们:

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)

  1. 您可以使用 waitUntil 参数,例如
await page.waitForNavigation({
   waitUntil: "networkidle2"  
});

**检查文档以获取更多信息https://pptr.dev/#?product=Puppeteer&version=v1.20.0&show=api-pagewaitfornavigationoptions

  1. 或者您也可以等待元素选择器出现在页面中 例如
await page.waitForSelector('.buttonSelector')

**检查文档以获取更多信息https://pptr.dev/#?product=Puppeteer&version=v1.20.0&show=api-pagewaitforselectorselector-options