Извлечь веб-элементы с веб-сайта электронной коммерции? - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь написать код для доступа к Али express и поиска товара, затем извлекаю детали, такие как название продукта, цена и т. Д. c .; постранично в документ Excel. Я просматриваю предыдущие вопросы, размещенные здесь, чтобы построить его. Благодаря этому.

Каким-то образом я смог найти элемент в течение первых 5 или 6 тестовых запусков, но вдруг Али express попросил меня войти или зарегистрироваться.

1.) Первый вопрос: почему ни один браузер не заходит на сайт без регистрации? Узнали ли они мой пользовательский агент?

2.) Во-вторых, тогда я написал код для автоматического входа в систему. Сайт содержит множество Javascripts, и это отзывчивый сайт. Некоторые элементы html появляются при нажатии на них. При автоматическом входе в систему мой код не обнаруживает элементы электронной почты или пароля на странице. Что-то мешает его обнаружению? Как я могу это решить?

Я поместил сюда свой пример кода:

public class Main {

public static void main(String[] args) throws IOException, InterruptedException {

    //To input the user's search
    Scanner nw1 = new Scanner(System.in);
    System.out.println("What do you want to search?");
    String a = nw1.nextLine();

    //Open the driver
    System.setProperty("webdriver.chrome.driver", 
    "E:\\JetBrains\\webdriver\\chrome\\chromedriver.exe");
    WebDriver AE = new ChromeDriver();

    //Open the web page and Login in.
    AE.get("https://www.aliexpress.com/");
    Thread.sleep(2000);

    //xpath of account button
    AE.findElement(By.xpath("//*[@id="nav-user-account"]/div/div/p[3]/a[2]")).click();

    //xpath of Sign in button
    AE.findElement(By.xpath("/html/body/div[9]/a")).click();
    AE.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

    //xpath of Email box 
    AE.findElement(By.xpath("//*[@id=\"fm-login-id\"]")).sendKeys("my-email");

    //xpath of password section to type  
    AE.findElement(By.xpath("//*[@id=\'fm-login-password\']")).sendKeys("my-password");
    AE.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

    // xpath of submit button
    AE.findElement(By.xpath("//*[@id="login-form"]/div[5]/button")).click()

Простите, я впервые здесь. Любые полезные комментарии приветствуются. Спасибо.

Ответы [ 2 ]

0 голосов
/ 26 мая 2020
  1. Попробуйте применить удаление файлов cookie, некоторые сайты обращаются к данным из кэша / файлов cookie, очистка может решить проблему. Также закройте драйвер в конце вашего скрипта и откройте новый экземпляр, например, driver.manage (). DeleteAllCookies (); and driver.quit ();
  2. xpath в вашем коде необходимо исправить как AE.findElement (By.xpath ("// * [@ id = 'nav-user-account'] / div / div / p [3] / a [2] ")). click (); Используйте одинарные кавычки внутри xpaths.
0 голосов
/ 26 мая 2020

Это связано с тем, что следующий путь x не нажатие кнопки учетной записи, а нажатие кнопки входа в систему

AE.findElement(By.xpath("//*[@id="nav-user-account"]/div/div/p[3]/a[2]")).click();

найти элемент по идентификатору. Идентификатор доступен для щелчка по учетной записи

"nav-user-account"

при нажатии убедитесь, что она развернута через следующий класс

"ng-item nav-pinfo-item nav-user-account user-account-unfold"

если развернуть содержит, чем поле открыто, иначе оно закрыто. Если близко, нажмите на него. Сначала попробуйте это.

...