У меня есть Javascript puppeteer
код и PuppeteerSharp for C#
. Я знаю, что эти библиотеки похожи, и я знаю их сайты.
Но моя проблема в том, что я едва могу управлять этими библиотеками, для каждой библиотеки есть множество методов, и трудно найти необходимые методы, даже если у меня есть рабочий пример, написанный на JS.
Пожалуйста, помогите мне переписать код JS на C #, чтобы он делал подобные вещи. Или, по крайней мере, имена функций, например, метод JS (puppeteer) = метод C # (puppeteerSharp).
(async function main() {
try {
const browser = await puppeteer.launch();
const [page] = await browser.pages();
page.setDefaultTimeout(0);
await page.goto('www.example.com');
await page.waitForSelector('#search-content button.btn-icon');
let count = 0;
while (await page.$('#search-content button.btn-icon') !== null && count != 1) {
const articlesForNow = (await page.$$('#search-content article')).length;
console.log(`Articles for now: ${articlesForNow}. Getting more...`);
count += 1;
await Promise.all([
page.evaluate(
() => {
document.querySelector('#search-content button.btn-icon').click();
}
),
page.waitForFunction(
old => document.querySelectorAll('#search-content article').length > old, {},
articlesForNow
),
]);
}
const articlesAll = (await page.$$('#search-content article')).length;
console.log(`All articles: ${articlesAll}.`);
fs.writeFileSync('full.html', await page.content());
fs.writeFileSync('articles.html', await page.evaluate(
() => document.querySelector('#search-content div.b-filter__inner').outerHTML
));
fs.appendFileSync('articles.txt', await page.evaluate(
(fr) => {
let items = document.querySelectorAll(".product__body");
let appartmentsData = "";
for (let i = 0; i < items.length; i++) {
let itemLink = items[i].querySelector(".product__link").href;
let itemName = items[i].querySelector(".product__link strong").innerHTML;
let itemPrice = items[i].querySelector(".product__value").innerHTML;
return appartmentsData;
}, fr
));
// rest of the code
То, что у меня так далеко:
using(var browser = await Puppeteer.LaunchAsync(new LaunchOptions())) {
var page = await browser.NewPageAsync();
await page.GoToAsync(LINK);
await page.WaitForSelectorAsync("#search-content button.btn-icon");
while (await page.QuerySelectorAsync("#search-content button.btn-icon") != null) {
var articlesForNow = await page.QuerySelectorAllAsync("#search-content article");
Console.WriteLine("Items proceed: " + articlesForNow.Length);
for (int i = 0; i < articlesForNow.Length; i++) {
string itemOuterHtml = await articlesForNow[i].EvaluateFunctionAsync < string > ("e => e.outerHTML");
}
await page.WaitForSelectorAsync("#search-content button.btn-icon").EvaluateFunctionAsync("e => e.click()");
}
}
Но это счет бесконечности и не останавливается. После того, как элемент равен 1275, он выдает ошибку о моем методе в цикле while.
PuppeteerSharp.WaitTaskTimeoutException: waiting for selector '#search-content button.btn-icon' failed: timeout 30000ms exceeded