У меня возникла проблема с моим Java-проектом. Я создал бота, который собирает данные с разных веб-сайтов. Хотя технически бот работает, он не собирает все доступные данные на веб-сайтах. Он имеет тенденцию зависать, а затем переходит к следующему веб-сайту, продолжая собирать данные.
Чтобы предоставить более подробную информацию, у меня есть список из 10 веб-сайтов, и я использую цикл for для сбора данных. данные с каждого сайта. Каждый веб-сайт имеет разное количество страниц: например, веб-сайт A имеет 40 страниц, веб-сайт B — 4, веб-сайт C — 23, веб-сайт D — 12 и т. д. В настоящее время бот запрограммирован на определение количества страниц на каждом веб-сайте и парсинг столько раз.
Сначала он работает, определяет количество страниц и правильно парсит около 8 страниц, но затем зависает, прекращает парсинг этого веб-сайта и переходит к следующему. . Я не уверен, почему это происходит. Я каждый раз получаю сообщение об ошибке, в котором говорится, что он не может найти следующую кнопку, но я не понимаю, почему это не удается после работы на 8 страницах подряд. У меня есть функция try-catch для решения этой проблемы, но, похоже, она мало чем помогает.
Буду признателен за любую помощь.
Я считаю, что код не может найти следующую кнопку после 8-й страницы для всех веб-сайтов, но я не уверен на 100%, является ли это основной причиной. Я попробовал 3 разных способа нажатия следующей кнопки. В настоящее время существует цикл while, чтобы проверить, доступна ли кнопка, и он попытается это сделать 3 раза. Но раньше это был простой цикл попытки и перехвата, чтобы нажать кнопку, но я все равно получаю ту же ошибку.
Я получаю следующую ошибку:
Exception caught while clicking the next button: Expected condition failed: waiting for element to be clickable: By.xpath: /html[1]/body[1]/div[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[3]/div[1]/div[1]/div[1]/button[8]/span[1]/span[1]/span[1] (tried for 5 second(s) with 500 milliseconds interval)
Build info: version: '4.20.0', revision: '866c76ca80'
System info: os.name: 'Mac OS X', os.arch: 'aarch64', os.version: '14.3', java.version: '21.0.2'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities {acceptInsecureCerts: false, browserName: chrome-headless-shell, browserVersion: 124.0.6367.208, chrome: {chromedriverVersion: 123.0.6312.122 (31f8248cdd9..., userDataDir: /var/folders/c7/bvfrp2ld1bl...}, fedcm:accounts: true, goog:chromeOptions: {debuggerAddress: localhost:51003}, networkConnectionEnabled: false, pageLoadStrategy: normal, platformName: mac, proxy: Proxy(), se:cdp: ws://localhost:51003/devtoo..., se:cdpVersion: 124.0.6367.208, setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webauthn:extension:credBlob: true, webauthn:extension:largeBlob: true, webauthn:extension:minPinLength: true, webauthn:extension:prf: true, webauthn:virtualAuthenticators: true}
Session ID: c77b39f545a3ce401fd2a762f06b2f9d
public class main {
private static List allData = new ArrayList();
private static WebDriver driver;
public static void main(String[] args) throws TimeoutException {
System.setProperty("webdriver.chrome.driver","/src/Chromedriver/chromedriver");
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
options.addArguments("--disable-gpu"); // applicable to Windows
options.addArguments("--window-size=1920,1080");
driver = new ChromeDriver(options);
LoginIn();
Company();
SendtoFile("/src/loads.csv");
driver.quit();
}
private static void LoginIn() {
driver.get("https://x.com/auth/login");
String Name = "xx";
String Pass = "xx";
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
WebElement usernameInput = wait.until(ExpectedConditions.elementToBeClickable(By.name("username")));
usernameInput.sendKeys(Name);
WebElement passwordInput = wait.until(ExpectedConditions.elementToBeClickable(By.name("password")));
passwordInput.sendKeys(Pass);
WebElement loginButton = driver.findElement(By.xpath("/html/body/div[2]/div/div/div[3]/div[2]/div/div/div/form/div[2]/button"));
loginButton.click();
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void SendtoFile(String filePath) {
try (FileWriter fileWriter = new FileWriter(filePath)) {
// Create header row
String[] headers = { "Name1", "Name2", ""Name3", "Name4", "Name5", "Name6", "Name7", "Name8", "Name9" };
fileWriter.append(String.join(",", headers));
fileWriter.append("\n");
// Write data rows
for (List rowData : allData) {
fileWriter.append(String.join(",", rowData));
fileWriter.append("\n");
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Data successfully written to CSV file");
}
private static void Company() throws TimeoutException {
List websites = new ArrayList();
websites.add("https://a.com");
websites.add("https://b.com");
websites.add("https://c.com");
for (String website : websites) {
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5));
driver.get(website);
WebElement button = wait.until(ExpectedConditions.presenceOfElementLocated(By.className("css-1wcgx3p")));
String pages = button.getAttribute("pages");
String[] pagesArray = pages.split(",");
int numOfPages = pagesArray.length;
System.out.println("Number of pages: " + numOfPages + " for the company: " + website);
for (int pageIndex = 1; pageIndex
Подробнее здесь: https://stackoverflow.com/questions/785 ... t-figure-o
Мой Java-код запускается, но перестает делать то, что должен, и я не могу понять, почему [закрыто] ⇐ JAVA
Программисты JAVA общаются здесь
1716414365
Anonymous
У меня возникла проблема с моим Java-проектом. Я создал бота, который собирает данные с разных веб-сайтов. Хотя технически бот работает, он не собирает все доступные данные на веб-сайтах. Он имеет тенденцию зависать, а затем переходит к следующему веб-сайту, продолжая собирать данные.
Чтобы предоставить более подробную информацию, у меня есть список из 10 веб-сайтов, и я использую цикл for для сбора данных. данные с каждого сайта. Каждый веб-сайт имеет разное количество страниц: например, веб-сайт A имеет 40 страниц, веб-сайт B — 4, веб-сайт C — 23, веб-сайт D — 12 и т. д. В настоящее время бот запрограммирован на определение количества страниц на каждом веб-сайте и парсинг столько раз.
Сначала он работает, определяет количество страниц и правильно парсит около 8 страниц, но затем зависает, прекращает парсинг этого веб-сайта и переходит к следующему. . Я не уверен, почему это происходит. Я каждый раз получаю сообщение об ошибке, в котором говорится, что он не может найти следующую кнопку, но я не понимаю, почему это не удается после работы на 8 страницах подряд. У меня есть функция try-catch для решения этой проблемы, но, похоже, она мало чем помогает.
Буду признателен за любую помощь.
Я считаю, что код не может найти следующую кнопку после 8-й страницы для всех веб-сайтов, но я не уверен на 100%, является ли это основной причиной. Я попробовал 3 разных способа нажатия следующей кнопки. В настоящее время существует цикл while, чтобы проверить, доступна ли кнопка, и он попытается это сделать 3 раза. Но раньше это был простой цикл попытки и перехвата, чтобы нажать кнопку, но я все равно получаю ту же ошибку.
Я получаю следующую ошибку:
Exception caught while clicking the next button: Expected condition failed: waiting for element to be clickable: By.xpath: /html[1]/body[1]/div[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[3]/div[1]/div[1]/div[1]/button[8]/span[1]/span[1]/span[1] (tried for 5 second(s) with 500 milliseconds interval)
Build info: version: '4.20.0', revision: '866c76ca80'
System info: os.name: 'Mac OS X', os.arch: 'aarch64', os.version: '14.3', java.version: '21.0.2'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities {acceptInsecureCerts: false, browserName: chrome-headless-shell, browserVersion: 124.0.6367.208, chrome: {chromedriverVersion: 123.0.6312.122 (31f8248cdd9..., userDataDir: /var/folders/c7/bvfrp2ld1bl...}, fedcm:accounts: true, goog:chromeOptions: {debuggerAddress: localhost:51003}, networkConnectionEnabled: false, pageLoadStrategy: normal, platformName: mac, proxy: Proxy(), se:cdp: ws://localhost:51003/devtoo..., se:cdpVersion: 124.0.6367.208, setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webauthn:extension:credBlob: true, webauthn:extension:largeBlob: true, webauthn:extension:minPinLength: true, webauthn:extension:prf: true, webauthn:virtualAuthenticators: true}
Session ID: c77b39f545a3ce401fd2a762f06b2f9d
public class main {
private static List allData = new ArrayList();
private static WebDriver driver;
public static void main(String[] args) throws TimeoutException {
System.setProperty("webdriver.chrome.driver","/src/Chromedriver/chromedriver");
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
options.addArguments("--disable-gpu"); // applicable to Windows
options.addArguments("--window-size=1920,1080");
driver = new ChromeDriver(options);
LoginIn();
Company();
SendtoFile("/src/loads.csv");
driver.quit();
}
private static void LoginIn() {
driver.get("https://x.com/auth/login");
String Name = "xx";
String Pass = "xx";
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
WebElement usernameInput = wait.until(ExpectedConditions.elementToBeClickable(By.name("username")));
usernameInput.sendKeys(Name);
WebElement passwordInput = wait.until(ExpectedConditions.elementToBeClickable(By.name("password")));
passwordInput.sendKeys(Pass);
WebElement loginButton = driver.findElement(By.xpath("/html/body/div[2]/div/div/div[3]/div[2]/div/div/div/form/div[2]/button"));
loginButton.click();
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void SendtoFile(String filePath) {
try (FileWriter fileWriter = new FileWriter(filePath)) {
// Create header row
String[] headers = { "Name1", "Name2", ""Name3", "Name4", "Name5", "Name6", "Name7", "Name8", "Name9" };
fileWriter.append(String.join(",", headers));
fileWriter.append("\n");
// Write data rows
for (List rowData : allData) {
fileWriter.append(String.join(",", rowData));
fileWriter.append("\n");
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Data successfully written to CSV file");
}
private static void Company() throws TimeoutException {
List websites = new ArrayList();
websites.add("https://a.com");
websites.add("https://b.com");
websites.add("https://c.com");
for (String website : websites) {
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5));
driver.get(website);
WebElement button = wait.until(ExpectedConditions.presenceOfElementLocated(By.className("css-1wcgx3p")));
String pages = button.getAttribute("pages");
String[] pagesArray = pages.split(",");
int numOfPages = pagesArray.length;
System.out.println("Number of pages: " + numOfPages + " for the company: " + website);
for (int pageIndex = 1; pageIndex
Подробнее здесь: [url]https://stackoverflow.com/questions/78519886/my-java-code-runs-but-stops-doing-it-what-its-supposed-to-do-and-i-cant-figure-o[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия