Не получается спарсить данные с помощью XPath

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 526
Благодарностей
1 323
Баллы
113
Всем доброго времени суток. Подскажите, пожалуйста, что я сделал не так?
53745

Через DevTools - нашел мне нужные элементы, код сформировался верно, по крайней мере об этом говорит желтая обводка на картинке.
Но когда вставляю в C# для парсинга всех ItemHolder элементов, выдает кубик ошибку:
Компиляция кода Ошибка в действии "CS1525" "Недопустимый терм ")" в выражении". [Строка: 2; Cтолбец: 132]
Как я понял, из-за скобок внутри Xpath? Что я сделал не так?
C#:
IZennoList list = project.Lists["List2"]; // список проекта, в который класть результат
Tab tab = instance.ActiveTab;
HtmlElementCollection elements = tab.FindElementsByXPath("//*[@id="inventory_76561198849702257_730_2"]/div[1]/div[1]/div[1]/img[1]");
list.AddRange(elements.Select(e => e.GetAttribute("innerhtml")));
Попытался скобки переделать в коде xpath:
C#:
IZennoList list = project.Lists["List2"]; // список проекта, в который класть результат
Tab tab = instance.ActiveTab;
HtmlElementCollection elements = tab.FindElementsByXPath("//*[@id='inventory_76561198849702257_730_2']/div[1]/div[1]/div[1]/img[1]");
list.AddRange(elements.Select(e => e.GetAttribute("innerhtml")));
Выдало ошибку:
Выполнение действия CSharp OwnCode. Последовательность не содержит соответствующий элемент

И если есть возможность, помогите, пожалуйста составить верную дорогу, если у меня коряво сделана ко всем img src ссылкам?
 
Последнее редактирование:

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
кавычки нельзя использовать в C#
C#:
HtmlElementCollection elements = tab.FindElementsByXPath(@"//*[@id='inventory_76561198849702257_730_2']/div[1]/div[1]/div[1]/img[1]");
к src

C#:
list.AddRange(elements.Select(e => e.GetAttribute("src")));
 
  • Спасибо
Реакции: Gunjubasik

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 526
Благодарностей
1 323
Баллы
113

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 526
Благодарностей
1 323
Баллы
113
Вот как вышло:
C#:
IZennoList list = project.Lists["List2"]; // список проекта, в который класть результат
Tab tab = instance.ActiveTab;
HtmlElementCollection elements = tab.FindElementsByXPath(@"//*[@id='inventory_76561198849702257_730_2']/div[1]/div[1]/div[1]/img[1]");
list.AddRange(elements.Select(e => e.GetAttribute("src")));
Ошибка теперь:
Выполнение действия CSharp OwnCode. Последовательность не содержит соответствующий элемент


я заменил . только одиночные кавычки в xpath
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
вообще за такие значения как inventory_76561198849702257_730_2 , очень плохая идея цепляться. видно сразу это автоматически сгенерированное значение. при следующей загрузке страницы его уже не будет.

а по ошибке. это не на этот код ругается. я проверил , код отрабатывает в пустом проекте на ок.
CSharp OwnCode это общий код
 
  • Спасибо
Реакции: Gunjubasik

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 526
Благодарностей
1 323
Баллы
113
А как мне найти в чем ошибка то?
C#:
IZennoList list = project.Lists["List2"]; // список проекта, в который класть результат
Tab tab = instance.ActiveTab;
HtmlElementCollection elements = tab.FindElementsByXPath("//*[@id='inventory_76561198849702257_730_2']/div[1]/div[1]/div[1]/img");
list.AddRange(elements.Select(e => e.GetAttribute("src")));
вообще за такие значения как inventory_76561198849702257_730_2 , очень плохая идея цепляться. видно сразу это автоматически сгенерированное значение. при следующей загрузке страницы его уже не будет.

а по ошибке. это не на этот код ругается. я проверил , код отрабатывает в пустом проекте на ок.
CSharp OwnCode это общий код
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 526
Благодарностей
1 323
Баллы
113
Все, спасибо, нашел проблему. List2 с маленькой нужно было....
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 526
Благодарностей
1 323
Баллы
113
Извините, а что означает @ в начале Xpath- tab.FindElementsByXPath(@"

кавычки нельзя использовать в C#
C#:
HtmlElementCollection elements = tab.FindElementsByXPath(@"//*[@id='inventory_76561198849702257_730_2']/div[1]/div[1]/div[1]/img[1]");
к src

C#:
list.AddRange(elements.Select(e => e.GetAttribute("src")));
 
Последнее редактирование:

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 526
Благодарностей
1 323
Баллы
113
Не могу спарсить -24.44% ,в результате выходит пустое поле. Что я делаю не так? Подскажите, пожалуйста.
53750
C#:
var list = project.Lists["list2"]; // список проекта, в который класть результат
var tab = instance.ActiveTab;
HtmlElementCollection elements = tab.FindElementsByXPath("//*[@id='data-table']/tbody/tr/td[7]/span");
list.AddRange(elements.Select(e => e.GetAttribute("per red")));
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 526
Благодарностей
1 323
Баллы
113

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
А как вы понимаете, текст нужно или другой код?
Надо изучить один раз какие атрибуты есть и что они возвращают и сами будете ориентироваться нормально.
в .GetAttribute подставляются теже атрибуты что и на скриншоте


53763
 
  • Спасибо
Реакции: Gunjubasik

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 526
Благодарностей
1 323
Баллы
113
Извините, что снова обращаюсь по коду, но тут одна проблемка, нужно спарсить имя Inscribed Bitterwing , но парсит:
<a class="market_listing_item_name_link" href="https://steamcommunity.com/market/listings/570/Inscribed20Bitterwing">Inscribed Bitterwing</a>
53762

Сам код кубика:
var list = project.Lists["list2"]; // список проекта, в который класть результат
var tab = instance.ActiveTab;
HtmlElementCollection elements = tab.FindElementsByXPath("//*[@id='tabContentsMyActiveMarketListingsRows']//div[@class='market_listing_item_name_block']//span[@class='market_listing_item_name economy_item_hoverable']");
list.AddRange(elements.Select(e => e.GetAttribute("innerhtml")));
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Извините, что снова обращаюсь по коду, но тут одна проблемка, нужно спарсить имя Inscribed Bitterwing , но парсит:
[/SPOILER]

Сам код кубика:
var list = project.Lists["list2"]; // список проекта, в который класть результат
var tab = instance.ActiveTab;
HtmlElementCollection elements = tab.FindElementsByXPath("//*[@id='tabContentsMyActiveMarketListingsRows']//div[@class='market_listing_item_name_block']//span[@class='market_listing_item_name economy_item_hoverable']");
list.AddRange(elements.Select(e => e.GetAttribute("innerhtml")));
имя Inscribed Bitterwing в другом элементе.
//*[@id='tabContentsMyActiveMarketListingsRows']//div[@class='market_listing_item_name_block']//span[@class='market_listing_item_name economy_item_hoverable']/a
 
  • Спасибо
Реакции: Gunjubasik

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