Node.js 木偶演员Ubereats.com表单输入不';行不通

Node.js 木偶演员Ubereats.com表单输入不';行不通,node.js,forms,web-scraping,google-cloud-functions,puppeteer,Node.js,Forms,Web Scraping,Google Cloud Functions,Puppeteer,我正试图通过木偶表演和谷歌云功能,在UberEats上自动点菜。但是,填写表单位置并单击“下一步”将不起作用。我目前正在使用Node.js8和puppeter版本2.1.1 exports.main=(请求、回复)=>{ const puppeter=require('puppeter'); 让选择器='按钮[class=“c1 cg ch ci bb bc bd cj ch az ao aq bu aj c1 ck cl cm cn co”]; 异步函数运行(){ 试一试{ const bro

我正试图通过木偶表演和谷歌云功能,在UberEats上自动点菜。但是,填写表单位置并单击“下一步”将不起作用。我目前正在使用Node.js8和puppeter版本2.1.1

exports.main=(请求、回复)=>{
const puppeter=require('puppeter');
让选择器='按钮[class=“c1 cg ch ci bb bc bd cj ch az ao aq bu aj c1 ck cl cm cn co”];
异步函数运行(){
试一试{
const browser=wait puppeter.launch({args:['--no sandbox']});
const page=wait browser.newPage();
等待页面。转到(“https://ubereats.com/nl");
wait page.waitFor('input[id=“location typeahead home input”]”);
等待页面。评估(()=>{
document.querySelector('input[id=“location typeahead home input”]”)。value=“Leuven”;
document.querySelector('selector')。单击();
});
等待page.waitForSelector('div[class=“f5 bc bd be ew bf b1 he”]”);
让元素=等待页面。评估(()=>{
return document.querySelector('h2').innerText;
})
browser.close();
返回元素;
}捕获(e){
返回e;
}
}
运行()
.然后(el=>{
res.set('Content-Type','text/html');
资源状态(200)。发送(el);
})
.catch(错误=>{
控制台错误(err);
res.status(500).send(“发生错误”+错误);
})
};

网页垃圾处理网页效果很好。运行此代码不会返回任何错误,只返回一个空对象。

我已经找到了一种方法,尽管非常粗糙,但如何做到这一点。我想这与反应迟钝有关。不管怎样,代码如下:

import{launch}来自“木偶演员”;
main();
异步函数main(){
试一试{
const browser=等待启动({
无头:错,
});
const[page]=wait browser.pages();
等待page.setUserAgent(
'Mozilla/5.0(Windows NT 10.0;Win64;x64;rv:74.0)Gecko/20100101 Firefox/74.0'
);
等待页面。转到('https://www.ubereats.com/nl');
常量输入选择器='#位置类型前置主输入';
等待页面。等待选择器(inputSelector);
等待页面。等待(3000);
等待page.type(inputSelector,'Leuven');
等待页面。等待(3000);
等待页面。单击('button.c1');
//代码的其余部分
}捕捉(错误){
//错误处理
}
}

您是否尝试使用他们的api?这是解决方案,但不适用于谷歌云功能。但我认为GCF将无法完成此功能,因为它不会设置UserAgent。我看到你将headless设置为false,这可能意味着UberEats网站“可能正在寻找添加到UA字符串中的headless并阻止它。或者他们可能正在使用一些技术来检测自动访问并阻止它。”但无论如何,谢谢你!