Не находит элемент по xpath

Nelirr

Пользователь
Регистрация
23.03.2021
Сообщения
87
Реакции
7
Баллы
8
Всем привет
Не получается найти на мобилке элемент по xpath.
Ищу тут: https://www.wildberries.ru/catalog/0/search.aspx?search=скраб&page=1
Нужно найти товар "кокосовый скраб для тела" (синяя обложка у него), где -2см написано и скидка на него 77%
Сделал цикл, в котором или находит товар или переходит на следующую страницу:
C#:
Развернуть Свернуть Копировать
while(true){
                   
                    //MouseWheel2();
                   
                    project.SendInfoToLog("Значение VendorCode - " + VendorCode,true);
                   
                    System.Threading.Thread.Sleep(rnd.Next(500,1500));
                   
                    //tab.FullEmulationMouseWheel(0,9000);
                   
                    HtmlElement LoneProduct = instance.ActiveTab.FindElementByXPath(String.Format("//a[contains(@data-qa, 'catalog-product-card-image')]/div/div/div[contains(@style, '{0}')]|//div[contains(@style, '{0}')]", VendorCode), 0);
                   
                    //tab.FullEmulationMouseMoveToHtmlElement(LoneProduct);
                   
                    k++;
                   
                    WZTableList.DeleteRow(k);
                   
                    if(LoneProduct.IsVoid){
                       
                        project.SendInfoToLog("Нашли свой товар на странице",true);
                        project.SendInfoToLog("VendorCode - " + VendorCode,true);
                        System.Threading.Thread.Sleep(3000);
                       
                        if(Mobile){
                            tab.Touch.SwipeIntoView(LoneProduct);
                            tab.Touch.Touch(LoneProduct);
                        }else{
                            tab.FullEmulationMouseMoveToHtmlElement(LoneProduct);
                            tab.FullEmulationMouseClick("left","click");
                        }
                        tab.WaitDownloading();
                        System.Threading.Thread.Sleep(3000);
                       
                        //Парсим название товара для отчета + id
                        HtmlElement ProductNameHtml = tab.FindElementByXPath("//div[contains(@class, 'brand-and-name j-product-title')]/span",0);
                        project.Variables["ProductName"].Value = ProductNameHtml.GetAttribute("innertext");
                        project.SendInfoToLog("Имя товара - " + project.Variables["ProductName"].Value,true);
                       
                        HtmlElement ProductIdHtml = tab.FindElementByXPath("//div[contains(@class, 'article')]/span[contains(@data-link, 'selectedNomenclature')]",0);
                        project.Variables["ProductId"].Value = ProductIdHtml.GetAttribute("innertext");
                        project.SendInfoToLog("Id товара - " + project.Variables["ProductId"].Value,true);
                       
                        //instance.WaitForUserAction(50);
               
                        //Действия с самим товаром
                   
                        System.Threading.Thread.Sleep(3000);
                        //Лайк
                        HtmlElement LikePlace = tab.FindElementByXPath("//button[contains(@class, 'to-poned')]",0);
                        LikePlace.Click();
                        tab.WaitDownloading();
                        project.SendInfoToLog("Поставили лайк товару",true);
                       
                        //В корзину
                        HtmlElement ToCart = tab.FindElementByXPath("//button[contains(text(), 'Добавить в корзину')]",0);
                        ToCart.Click();
                        tab.WaitDownloading();
                        project.SendInfoToLog("Добавили товар в корзину",true);          
                       
                        //Отзыв
            //            HtmlElement ReviewPlace = tab.FindElementByXPath("//label[contains(@class, 'new-post-add')]",0);
            //            ReviewPlace.Click();
            //            tab.WaitDownloading();
                       
            //            string OrderStatus = WZTableList.GetCell("C", i);
                       // GoodsToWork.RemoveAt(0);
                        //GoodsToWork.Add(LoneName);
                       
                        //Переход в корзину + заказ
                   
                        System.Threading.Thread.Sleep(2000);                      
                       
                        //WZTableList.ColSeparator = ";";
                       //WZTableList.AddRow(DateTime.Now + ";" + OrderName + ";" + VendorCode);
                        break;
                    }else{
                       
                        int m = rnd.Next(1,2);
                        HtmlElement nextPage;
                       
                        if(m==1){
                            nextPage = instance.ActiveTab.FindElementByXPath("//a[contains(@class, 'pagination-next')]|//div[contains(@class, 'swiper-slide Kirrv swiper-slide-next')]", 0);
                        }else{
                            nextPage = instance.ActiveTab.FindElementByXPath("//div[contains(text(), 'Показать ещё')]", 0);
                        }
                       
                        project.SendWarningToLog("Не удалось найти товар на " + k + " странице. Переключаем дальше");
                        //nextPage = instance.ActiveTab.FindElementByXPath("//a[contains(@class, 'pagination-next')]|//div[contains(@class, 'swiper-slide Kirrv swiper-slide-next')]", 0);
                       
                        //HtmlElement nextPage = instance.ActiveTab.FindElementByXPath("//a[contains(@class, 'pagination-next')]", 0);
                       
                        if(Mobile){
                            tab.Touch.SwipeIntoView(nextPage);
                            tab.Touch.Touch(nextPage);
                            tab.WaitDownloading();
                            System.Threading.Thread.Sleep(rnd.Next(500,2300));
                        }else{
                            tab.FullEmulationMouseMoveToHtmlElement(nextPage);
                            tab.FullEmulationMouseClick("left","click");
                            tab.WaitDownloading();
                            System.Threading.Thread.Sleep(rnd.Next(500,2300));
                        }
                       
                        //nextPage = instance.ActiveTab.FindElementByXPath("//a[contains(@class, 'pagination-next')]", 0);
               
                        if(nextPage.IsVoid) break;
                        nextPage.Click();
                        instance.ActiveTab.WaitDownloading();
                    }
                }
Значение VendorCode - 20927158

Причем, самое интересное, когда на верстаке делаю такую конструкцию, находит без проблем, а в цикле не находит. Заходит на страницу, ждет нужное время и сразу уходит на след страницу

C#:
Развернуть Свернуть Копировать
string VendorCode = "20927158";
//div[contains(@style, '20927158')]
//a[contains(@data-qa, 'catalog-product-card-image')]/div/div/div[contains(@style, '{0}')]

HtmlElement LoneProduct = tab.FindElementByXPath(String.Format("//div[contains(@style, '20927158')]", VendorCode), 0);

tab.FullEmulationMouseMoveToHtmlElement(LoneProduct);
 
код не проверял, но судя по твоему логу, на 19 строке не хватает восклицательного знака:
C#:
Развернуть Свернуть Копировать
if(!LoneProduct.IsVoid)
т.к. сейчас ты говоришь, "если товар не найден"
 
  • Спасибо
Реакции: Nelirr
код не проверял, но судя по твоему логу, на 19 строке не хватает восклицательного знака:
C#:
Развернуть Свернуть Копировать
if(!LoneProduct.IsVoid)
т.к. сейчас ты говоришь, "если товар не найден"
Понял. Спасибо, попробую так
 
код не проверял, но судя по твоему логу, на 19 строке не хватает восклицательного знака:
C#:
Развернуть Свернуть Копировать
if(!LoneProduct.IsVoid)
т.к. сейчас ты говоришь, "если товар не найден"
Не получается так. Сделал короткий кусок кода, все равно мимо пролетает, сразу кликает на переключение страницы
C#:
Развернуть Свернуть Копировать
while(true){
    
                    List<HtmlElement> parents = instance.ActiveTab.FindElementsByXPath("//div[contains(@class, '_3UXcY')]").ToList();
                    
                    project.SendInfoToLog("Нашли товаров: " + parents.Count);                   
                    
                    foreach(HtmlElement parent in parents){
                        
                        HtmlElement LoneProduct = parent.FindChildByXPath(String.Format(".//div/div/div/a/div/div/div[contains(@style, '{0}')]|.//div[contains(@style, '{0}')]", VendorCode), 0);
                        
                        project.SendInfoToLog("Ищем свой товар",true);
                        
                        //Ищем элемент
                        if(!LoneProduct.IsVoid){
                            project.SendInfoToLog("Нашли свой товар, кликаем",true);
                            instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(LoneProduct);
                        }
                        
                    }
                    
                    int m = rnd.Next(1,2);
                    HtmlElement nextPage;
                
                    if(m==1){
                        nextPage = instance.ActiveTab.FindElementByXPath("//a[contains(@class, 'pagination-next')]|//div[contains(@class, 'swiper-slide Kirrv swiper-slide-next')]", 0);
                    }else{
                        nextPage = instance.ActiveTab.FindElementByXPath("//div[contains(text(), 'Показать ещё')]", 0);
                    }
                    
                    if(nextPage.IsVoid) break;
                    
                    if(Mobile){
                        tab.Touch.SwipeIntoView(nextPage);
                        tab.Touch.Touch(nextPage);
                        tab.WaitDownloading();
                        System.Threading.Thread.Sleep(rnd.Next(500,2300));
                    }else{
                        tab.FullEmulationMouseMoveToHtmlElement(nextPage);
                        tab.FullEmulationMouseClick("left","click");
                        tab.WaitDownloading();
                        System.Threading.Thread.Sleep(rnd.Next(500,2300));
                    }
                    instance.ActiveTab.WaitDownloading();
                }
 
C#:
Развернуть Свернуть Копировать
string VendorCode = "c20927158";
while(true)
{
    HtmlElement he = instance.ActiveTab.FindElementByXPath($"//div[@id='{VendorCode}']", 0);
    
    //если не найден, кликаем Next
    if(he.IsVoid)
    {
        HtmlElement nextPage = instance.ActiveTab.FindElementByXPath("//a[@class='pagination-next']", 0);
         if(nextPage.IsVoid)
         {
             project.SendInfoToLog("закончились кнопка следующая страница");
              break;
         }
         nextPage.Click();
         instance.ActiveTab.WaitDownloading();
         continue;
                  
    }
    //в ином случае кликаем по нему
    else
    {
        project.SendInfoToLog("нашли нужный товар");
        he.Click();
        instance.ActiveTab.WaitDownloading();
        break;
    }
}
свою логику сам навешаешь. в твоем коде не знаю что, долго не хочется копаться, на вскидку неверные xpath просто
 
C#:
Развернуть Свернуть Копировать
string VendorCode = "c20927158";
while(true)
{
    HtmlElement he = instance.ActiveTab.FindElementByXPath($"//div[@id='{VendorCode}']", 0);
   
    //если не найден, кликаем Next
    if(he.IsVoid)
    {
        HtmlElement nextPage = instance.ActiveTab.FindElementByXPath("//a[@class='pagination-next']", 0);
         if(nextPage.IsVoid)
         {
             project.SendInfoToLog("закончились кнопка следующая страница");
              break;
         }
         nextPage.Click();
         instance.ActiveTab.WaitDownloading();
         continue;
                 
    }
    //в ином случае кликаем по нему
    else
    {
        project.SendInfoToLog("нашли нужный товар");
        he.Click();
        instance.ActiveTab.WaitDownloading();
        break;
    }
}
свою логику сам навешаешь. в твоем коде не знаю что, долго не хочется копаться, на вскидку неверные xpath просто
Хорошо, понятно
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)