人偶错误错误

bre*_*art 1 javascript chromium web-scraping cors puppeteer

您好,我在使用puppeteer的代码中遇到问题,cors错误随机发生,但在我的测试中占80%。这是我的代码感谢您的帮助。顺便说一句服务器响应是

可以从来源' https:/访问位于' https://secure-store.nike.com/eu/services/jcartService/?action=addItem&rt=json&country=GB®ion=eu&lang_locale=en_GB&catalogId=1&productId=12238990&qty=1&skuId=21502246 '的提取/www.nike.com '已被CORS策略阻止:所请求的资源上没有'Access-Control-Allow-Origin'标头。如果不透明的响应满足您的需求,请将请求的模式设置为“ no-cors”,以在禁用CORS的情况下获取资源。

const puppeteer = require('puppeteer');
const jsonfile = require('jsonfile')

function evaluate_click(element,page){
  page.evaluate((el) => {
     el.click()
  },element);
}

async function bot(){
const browser = await puppeteer.launch({headless: false})
const page = await browser.newPage()
setTimeout(function(){
    browser.close()
},120000)
await page.goto('https://www.nike.com/gb/launch/t/air-max-deluxe-midnight-navy-laser-orange-persian-violet/')
await page.waitForSelector('button.ncss-btn-accent.ncss-brand.pt3-sm.pb3-sm.pt2-lg.pb2-lg.u-uppercase.ta-sm-c.u-full-width')
await page.click('button.ncss-btn-accent.ncss-brand.pt3-sm.pb3-sm.pt2-lg.pb2-lg.u-uppercase.ta-sm-c.u-full-width')
await page.waitFor(1000)
await page.waitForSelector('button[aria-haspopup="true"]')
await page.click('button[aria-haspopup="true"]')
await page.waitForXPath("//ul[contains(@class,'')]//li[11]//button[1]")
var select_size = await page.$x("//ul[contains(@class,'')]//li[11]//button[1]")
await evaluate_click(select_size[0],page)
await page.waitFor(1000)
await page.waitForSelector('button.ncss-brand.ncss-btn-black.pb3-sm.prl5-sm.pt3-sm.u-uppercase.u-full-width')
await page.click('button.ncss-brand.ncss-btn-black.pb3-sm.prl5-sm.pt3-sm.u-uppercase.u-full-width')
await page.waitForSelector('a[data-qa="checkout-link"]')
await page.click('a[data-qa="checkout-link"]')
Run Code Online (Sandbox Code Playgroud)

}

bot()

Gra*_*ler 12

您可以将--disable-web-security标志传递puppeteer.launch()给禁用网络安全性:

const browser = await puppeteer.launch({
  args: [
    '--disable-web-security',
  ],
  headless: false,
});
Run Code Online (Sandbox Code Playgroud)


jen*_*nso 6

现在需要这些标志:

'--disable-features=IsolateOrigins', '--disable-site-isolation-trials'

等待 puppeteer.launch({headless: headless, devtools: true, args: ['--disable-web-security', '--disable-features=IsolateOrigins', '--disable-site-isolation-trials']} );

还要确保您拥有最新版本的 puppeteer,因为它会在 puppeteer@1.8.0 中因这些标志而崩溃

您可以在以下位置检查隔离是否已禁用:chrome://process-internals

建议在/sf/answers/3592422641/

有关该标志的更多信息:https : //www.chromium.org/Home/chromium-security/site-isolation

  • 感谢您提供更新的标志列表。在(撰写本文时)最新版本的 Chrome 中,仅使用 --disable-web-security 对我来说不起作用,我也必须使用您在此处建议的标志。谢谢。 (2认同)

Dag*_*all 5

当 Chrome 94 开始强制执行“专用网络访问”(CORS-RFC1918)时,我们在“公共”网络访问“专用”和“本地”网络时遇到问题,从而导致 CORS 错误。

对我们有用的是添加--disable-features=BlockInsecurePrivateNetworkRequests.