簡體   English   中英

我可以在node.js命令行窗口中逐行編寫人偶腳本嗎?

[英]Can I script puppeteer line by line in the node.js command line window?

我有一個網站正在嘗試自動從中抓取數據。 我有一個合法帳戶,需要通過編程收集數據來簡化生活。 問題是,對於偽造者代碼的每次迭代,我的帳戶都重新登錄,並且經過幾輪編碼后,我從服務(MLS)收到一封電子郵件,他們注意到我的帳戶存在可疑活動。 我的問題是,是否可以實時編寫操縱p的代碼,因此我可以在同一會話中測試不同的代碼行?

到目前為止,我已經嘗試過了:

const puppeteer = require('puppeteer');
const fs = require("fs");
const browser = puppeteer.launch({headless: false, ignoreHTTPSErrors: true, args: ['--start-maximized'], defaultViewport: null, slowMo: 150})
const page = browser.newPage();
page.goto('https://idp.sdmls.com/idp/Authn/UserPassword',{waitUntil: 'networkidle2'});

Chromium窗口打開,但沒有其他顯示。 我在命令行窗口中得到這個:

> const puppeteer = require('puppeteer');
undefined
> const fs = require("fs");
undefined
>
> const browser = puppeteer.launch({headless: false, ignoreHTTPSErrors: true, args: ['--start-maximized'], defaultViewport: null, slowMo: 150})
undefined
> const page = browser.newPage();
TypeError: browser.newPage is not a function
> page.goto('https://idp.sdmls.com/idp/Authn/UserPassword',{waitUntil: 'networkidle2'});
ReferenceError: page is not defined
>

puppeteer.launch是一個異步函數,它返回Promise 這意味着您應該在async函數中await它,或者將后續代碼放入.then()

由於要使用Node.js命令行,因此無法直接await它。 有幾種選擇:

選項1:將您的代碼放入.then()

$ node
Welcome to Node.js v12.1.0.
Type ".help" for more information.
> const options = {headless: false, ignoreHTTPSErrors: true, args: ['--start-maximized'], defaultViewport: null, slowMo: 150};
...
> const puppeteer = require('puppeteer');
undefined
> const browserPromise = puppeteer.launch(options);
undefined
> const pagePromise = browserPromise.then(browser => { return browser.newPage(); });
undefined
> pagePromise.then(page => { page.goto('http://stackoverflow.com'); });
Promise { <pending> }

選項2(適合調試,但不要嘗試在實際代碼中使用 ):將promise結果保存到全局對象中並重用。

> puppeteer.launch(options).then(browser => { global.browser = browser; });
Promise { <pending> }

等待一段時間,直到承諾解決並分配了全局對象,然后繼續:

> global.browser.newPage().then(page => { global.page = page; });
Promise { <pending> }

再次等待,然后繼續:

> global.page.goto('http://stackoverflow.com')
Promise { <pending> }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM