This is my code it works without headless, the website gives makes the request as expected but in headless mode it doesnt make the expected request. It can be about the website that im trying to log requests but i dont know how to bypass it or something
import { Options, WebDriver, until, Builder, By } from 'selenium-webdriver';
import chrome from 'selenium-webdriver/chrome';
import CDP from 'chrome-remote-interface';
import { download } from './download';
interface Response {
url: string;
}
interface ResponseReceivedParams {
response: Response;
}
const options = new chrome.Options();
//options.addArguments('--headless=new')
options.addArguments('--no-sandbox');
options.addArguments('--disable-dev-shm-usage');
options.addArguments('--remote-debugging-port=9224'); // Remote debugging port
options.addArguments('--window-size=1920x1080');
options.addArguments('--disable-blink-features=AutomationControlled');
//options.addArguments("--use-fake-ui-for-media-stream")
const driver = await new Builder()
.forBrowser('chrome')
.setChromeOptions(options)
.build();
export async function getAlucard(url: string, selectedFansub: string) {
let responseReceived = false; // Flag to track if the desired response has been received
const client = await CDP({ port: 9224 });
const { Network } = client;
try {
await Network.enable();
Network.responseReceived(({ response }: ResponseReceivedParams) => {
console.log('Response URL:', response.url);
if (!responseReceived && response.url.includes('https://alucard.stream/cdn/playlist/')) {
console.log('Bulunan URL:', response.url);
responseReceived = true;
download(response.url);
}
});
await driver.get(url);
const specificElementSelector = '.btn-group.pull-right';
await driver.wait(until.elementLocated(By.css(specificElementSelector)), 10000);
const ajax = 'https://www.turkanime.co/' + selectedFansub;
const script =
`IndexIcerik('${ajax}','videodetay');`
;
await driver.executeScript(script);
const timeout = setTimeout(() => {
if (!responseReceived) {
console.warn('Timeout: Closing driver.');
responseReceived = true; // Mark to avoid calling quit again
client.close();
driver.close();
driver.quit();
}
}, 10000); // Adjust timeout duration as needed
await new Promise((resolve) => {
const checkResponseInterval = setInterval(() => {
if (responseReceived) {
clearInterval(checkResponseInterval);
clearTimeout(timeout);
resolve(null);
}
}, 500);
});
} catch (error) {
console.error('Hata:', error);
} finally {
await client.close(); // Close the CDP client
await driver.close();
await driver.quit(); // Ensure driver quits on completion or error
}
}
Tried with headless, headless=new
It resulted headless gives some policy errors:
[0804/134121.329:INFO:CONSOLE(110)] "Permissions policy violation: accelerometer is not allowed in this document.", source: https://secure-ds.serving-sys.com/BurstingCachedScripts//Ad_2_263_3_0/ebHtml5Banner.js (110)
....
headless=new doesnt give any error.