ApifyとZapierを使用して、i) パスワードで保護された Web ページへのログインと、ii) ボタンのクリックを自動化する必要があります。これどうやってするの?
Actor で Puppeteer を使用する必要があると思いますが、方法がわかりません。
ターゲット URL は随時変更されます。それらの形式はhttps://studio.example.com/products/videocloud/media/videos/{id_code}
where {id_code}
is です。たとえば、6091481925001
.
1. ザピア
Zapier は、作業を行うために Apify アクターを呼び出す必要があります。既存の zap のアクションは、すでに動的 にアクセスできます{id_code}
。追加のアクションは、Apify に「Run Actor」を実行する必要があり、Apify にいずれか{id_code}
または完全な URLhttps://studio.example.com/products/videocloud/media/videos/6091481925001
を渡して実行します。
「入力本文」を介して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"
アクターを使用してここにログインするにはどうすればよいですか?
3. クリック
認証されると、ターゲット ページが表示されます。ボタン「アクティブ化」を含むボタンバーがあります(button
その子span
テキストは、クリックが許可されている場合にのみ「アクティブ化」する必要があります)。
(参考までに - クリックすると、ボタンのテキストが「非アクティブ化」になるはずです)。
ここでApifyに「アクティブ化」ボタンをクリックさせるにはどうすればよいですか?
私が理解しているように、これはスクレイピングジョブではありません。Web ページからデータを返すつもりはないため、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.');
});