Странный сайт, потому что после каликанье на кнопку Show All не понятно как парсить

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 077
Благодарностей
29
Баллы
48
Всем привет помогите разобраться с парсингом, сайт какой то хитрый https://www.sofascore.com/ru/football/2024-08-04



Я решил пойти 2-мя путями что бы собрать все элементы- Страна, Лига, Команды и Счет, но везде вылезают сложности.

1 Вариант представлен на картинке

Если коротко то нашел уникальный teg hr, от него беру родительский элемент и от родительского элемента все div это и есть нужные мне игры, а в дочерних элементах лежит все что нужно. Но родительских элементов почему то 2, а когда кликаю на Show All то появляется 3-ий родительский элемент. НО появившиеся игры я не могу считать

Вот пути которые я использовал

// Родительский элемент

string XPath="//hr[contains(@class,'HorizontalDivide')]/parent::div";



// Так вытаскиваю название игр

HtmlElement htmMain=Tab1.FindElementByXPath(XPath,i);

HtmlElement htmTeg=htmMain.FindChildByXPath("./*",y);

HtmlElement htmCity=htmTeg.FindChildByXPath("./descendant::a",0);

HtmlElement htmCity2=htmCity.FindChildByXPath("./*[name()='bdi']",0);



2 Вариант

Решил попробовать GET запросом получить JJSON

https://www.sofascore.com/api/v1/sport/football/scheduled-events/2024-08-02

Но здесь все так же все хорошо до нажатия на Show All, дальше опять фигня получается



Если коротко то до нажатия на кнопку Show All, все хорошо париться, но после нажатия фигня получается124169
 
Последнее редактирование:

adr1enette

Client
Регистрация
30.11.2022
Сообщения
54
Благодарностей
13
Баллы
8
get, который срабатывает по этой кнопке: https://www.sofascore.com/api/v1/sport/10800/event-count

ответ, который содержит в себе в формате json:
{
"football": {
"live": 15,
"total": 229
},
"tennis": {
"live": 39,
"total": 437
},
"basketball": {
"live": 0,
"total": 30
},
"ice-hockey": {
"live": 0,
"total": 1
},
"baseball": {
"live": 0,
"total": 55
},
"american-football": {
"live": 0,
"total": 1
},
"volleyball": {
"live": 0,
"total": 4
},
"futsal": {
"live": 0,
"total": 1
},
"minifootball": {
"live": 0,
"total": 42
},
"waterpolo": {
"live": 1,
"total": 6
},
"darts": {
"live": 0,
"total": 15
},
"cricket": {
"live": 3,
"total": 10
},
"badminton": {
"live": 1,
"total": 4
},
"beach-volley": {
"live": 0,
"total": 8
},
"table-tennis": {
"live": 13,
"total": 575
},
"esports": {
"live": 8,
"total": 102
}
}
 

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 077
Благодарностей
29
Баллы
48
get, который срабатывает по этой кнопке: https://www.sofascore.com/api/v1/sport/10800/event-count

ответ, который содержит в себе в формате json:
{
"football": {
"live": 15,
"total": 229
},
"tennis": {
"live": 39,
"total": 437
},
"basketball": {
"live": 0,
"total": 30
},
"ice-hockey": {
"live": 0,
"total": 1
},
"baseball": {
"live": 0,
"total": 55
},
"american-football": {
"live": 0,
"total": 1
},
"volleyball": {
"live": 0,
"total": 4
},
"futsal": {
"live": 0,
"total": 1
},
"minifootball": {
"live": 0,
"total": 42
},
"waterpolo": {
"live": 1,
"total": 6
},
"darts": {
"live": 0,
"total": 15
},
"cricket": {
"live": 3,
"total": 10
},
"badminton": {
"live": 1,
"total": 4
},
"beach-volley": {
"live": 0,
"total": 8
},
"table-tennis": {
"live": 13,
"total": 575
},
"esports": {
"live": 8,
"total": 102
}
}
я запутался, в данном JSON нет названия команд и счета то же нет, зачем мне этот JSON?
 

adr1enette

Client
Регистрация
30.11.2022
Сообщения
54
Благодарностей
13
Баллы
8

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 077
Благодарностей
29
Баллы
48
вот другой, ваш.. не понял, на что жалуетесь?

get https://www.sofascore.com/api/v1/sport/football/scheduled-events/2024-08-04/inverse
слишком большой, 3.6 MB
Спасибо за ответ, завтра детально посмотрю.Еще один вопрос, позволите. На основании JSON можно как ни будь кликнуть на по нужному элементу, в данном случае по нужной игре. Я пробовал так, да и другие варианты то же

C#:
Tab Tab1=instance.ActiveTab;
var Guest_trasleite    =project.Json.events[5].awayTeam.fieldTranslations.nameTranslation.ru;
HtmlElement htmMain=Tab1.FindElementByXPath("*[name()='bdi'][contains(string(),Guest_trasleite)]",0);
Tab1.FullEmulationMouseMoveToHtmlElement(htmMain);
Tab1.FullEmulationMouseClick("left", "click");

Но элемент не находится
 

adr1enette

Client
Регистрация
30.11.2022
Сообщения
54
Благодарностей
13
Баллы
8
У каждого матча свой id. При нажатии, происходит такой же триггер api. Парсишь id интересующего матча и обращаешься к api, например:
JSON:
"id": 12477145
GET https://www.sofascore.com/api/v1/event/12477145
{
"event": {
"tournament": {
"name": "Premiership",
"slug": "premiership",
"category": {
"name": "Scotland",
"slug": "scotland",
"sport": {
"name": "Football",
"slug": "football",
"id": 1
},
"id": 22,
"country": {
"alpha2": "SX",
"alpha3": "SCO",
"name": "Scotland"
},
"flag": "scotland",
"alpha2": "SX"
},
"uniqueTournament": {
"name": "Scottish Premiership",
"slug": "premiership",
"primaryColorHex": "#311B77",
"secondaryColorHex": "#57E7FC",
"category": {
"name": "Scotland",
"slug": "scotland",
"sport": {
"name": "Football",
"slug": "football",
"id": 1
},
"id": 22,
"country": {
"alpha2": "SX",
"alpha3": "SCO",
"name": "Scotland"
},
"flag": "scotland",
"alpha2": "SX"
},
"userCount": 56919,
"id": 36,
"country": {},
"crowdsourcingEnabled": false,
"hasPerformanceGraphFeature": false,
"hasEventPlayerStatistics": true,
"displayInverseHomeAwayTeams": false
},
"priority": 428,
"isGroup": false,
"competitionType": 1,
"isLive": false,
"id": 54
},
"season": {
"name": "Premiership 24/25",
"year": "24/25",
"editor": false,
"id": 62408
},
"roundInfo": {
"round": 1
},
"customId": "ZWshX",
"status": {
"code": 100,
"description": "Ended",
"type": "finished"
},
"winnerCode": 3,
"referee": {
"name": "David Dickinson",
"slug": "dickinson-david",
"yellowCards": 273,
"redCards": 5,
"yellowRedCards": 4,
"games": 59,
"sport": {
"id": 1,
"slug": "football",
"name": "Football"
},
"id": 787891,
"country": {
"alpha2": "SX",
"alpha3": "SCO",
"name": "Scotland"
}
},
"homeTeam": {
"name": "Dundee United",
"slug": "dundee-united",
"shortName": "Dundee Utd",
"gender": "M",
"sport": {
"name": "Football",
"slug": "football",
"id": 1
},
"userCount": 11423,
"manager": {
"name": "Jim Goodwin",
"slug": "jim-goodwin",
"shortName": "J. Goodwin",
"id": 792116,
"country": {
"alpha2": "IE",
"alpha3": "IRL",
"name": "Ireland"
},
"fieldTranslations": {
"nameTranslation": {
"ar": "جيم جودوين"
},
"shortNameTranslation": {
"ar": "ج. جودوين"
}
}
},
"venue": {
"city": {
"name": "Dundee"
},
"stadium": {
"name": "Tannadice Park",
"capacity": 14209
},
"id": 1991,
"country": {
"alpha2": "SX",
"alpha3": "SCO",
"name": "Scotland"
},
"fieldTranslations": {
"nameTranslation": {
"ar": "تاناديس پارك"
},
"shortNameTranslation": {}
}
},
"nameCode": "DUU",
"disabled": false,
"national": false,
"type": 0,
"id": 2349,
"country": {
"alpha2": "SX",
"alpha3": "SCO",
"name": "Scotland"
},
"subTeams": [],
"fullName": "Dundee United",
"teamColors": {
"primary": "#ff6600",
"secondary": "#ff6600",
"text": "#ff6600"
},
"foundationDateTimestamp": -1912636800,
"fieldTranslations": {
"nameTranslation": {
"ar": "داندي يونيتيد",
"ru": "Данди Юнайтед"
},
"shortNameTranslation": {}
}
},
"awayTeam": {
"name": "Dundee FC",
"slug": "dundee-fc",
"shortName": "Dundee",
"gender": "M",
"sport": {
"name": "Football",
"slug": "football",
"id": 1
},
"userCount": 12342,
"manager": {
"name": "Tony Docherty",
"slug": "tony-docherty",
"shortName": "T. Docherty",
"id": 801104,
"country": {
"alpha2": "SX",
"alpha3": "SCO",
"name": "Scotland"
}
},
"venue": {
"city": {
"name": "Dundee"
},
"stadium": {
"name": "Dens Park",
"capacity": 12085
},
"id": 3357,
"country": {
"alpha2": "SX",
"alpha3": "SCO",
"name": "Scotland"
}
},
"nameCode": "DUN",
"disabled": false,
"national": false,
"type": 0,
"id": 2357,
"country": {
"alpha2": "SX",
"alpha3": "SCO",
"name": "Scotland"
},
"subTeams": [],
"fullName": "Dundee FC",
"teamColors": {
"primary": "#000093",
"secondary": "#000000",
"text": "#000000"
},
"foundationDateTimestamp": -2417817600,
"fieldTranslations": {
"nameTranslation": {
"ar": "إف سي داندي",
"ru": "Данди"
},
"shortNameTranslation": {}
}
},
"homeScore": {
"current": 2,
"display": 2,
"period1": 2,
"period2": 0,
"normaltime": 2
},
"awayScore": {
"current": 2,
"display": 2,
"period1": 1,
"period2": 1,
"normaltime": 2
},
"time": {
"injuryTime1": 3,
"injuryTime2": 6,
"currentPeriodStartTimestamp": 1722781696
},
"changes": {
"changes": [
"time.currentPeriodStart",
"status.code",
"status.description",
"status.type",
"homeScore.period2",
"homeScore.normaltime",
"awayScore.period2",
"awayScore.normaltime"
],
"changeTimestamp": 1722781702
},
"hasGlobalHighlights": true,
"hasEventPlayerStatistics": true,
"hasEventPlayerHeatMap": true,
"detailId": 1,
"crowdsourcingDataDisplayEnabled": false,
"id": 12477145,
"defaultPeriodCount": 2,
"defaultPeriodLength": 45,
"defaultOvertimeLength": 15,
"crowdsourcingEnabled": false,
"currentPeriodStartTimestamp": 1722781696,
"startTimestamp": 1722774600,
"slug": "dundee-fc-dundee-united",
"finalResultOnly": false,
"feedLocked": false,
"fanRatingEvent": false,
"seasonStatisticsType": "overall",
"showTotoPromo": true,
"isEditor": false
}
}

GET https://www.sofascore.com/api/v1/event/12477145/incidents
{
"incidents": [
{
"text": "FT",
"homeScore": 2,
"awayScore": 2,
"isLive": false,
"time": 90,
"addedTime": 999,
"reversedPeriodTime": 1,
"incidentType": "period"
},
{
"length": 6,
"time": 90,
"addedTime": 0,
"reversedPeriodTime": 1,
"incidentType": "injuryTime"
},
{
"playerIn": {
"name": "Richard Odada",
"firstName": "",
"lastName": "",
"slug": "richard-odada",
"shortName": "R. Odada",
"position": "M",
"jerseyNumber": "12",
"userCount": 189,
"id": 1022057,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 975110400,
"fieldTranslations": {
"nameTranslation": {
"ar": "ريشارد أودادا"
},
"shortNameTranslation": {
"ar": "ر. أودادا"
}
}
},
"playerOut": {
"name": "Miller Thomson",
"firstName": "Miller Thomson",
"slug": "miller-thomson",
"shortName": "M. Thomson",
"position": "F",
"jerseyNumber": "29",
"userCount": 9,
"id": 1168585,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 1090281600
},
"id": 122903870,
"time": 86,
"injury": false,
"isHome": true,
"incidentClass": "regular",
"reversedPeriodTime": 5,
"incidentType": "substitution"
},
{
"playerIn": {
"name": "Louis Moult",
"slug": "louis-moult",
"shortName": "L. Moult",
"position": "F",
"jerseyNumber": "9",
"userCount": 54,
"id": 109512,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 705801600
},
"playerOut": {
"name": "Kristijan Trapanovski",
"firstName": "",
"lastName": "",
"slug": "kristijan-trapanovski",
"shortName": "K. Trapanovski",
"position": "F",
"jerseyNumber": "7",
"userCount": 42,
"id": 928162,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 934588800
},
"id": 122903871,
"time": 86,
"injury": false,
"isHome": true,
"incidentClass": "regular",
"reversedPeriodTime": 5,
"incidentType": "substitution"
},
{
"player": {
"name": "Declan Gallagher",
"slug": "declan-gallagher",
"shortName": "D. Gallagher",
"position": "D",
"jerseyNumber": "31",
"userCount": 26,
"id": 221884,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 666403200
},
"playerName": "Declan Gallagher",
"reason": "Foul",
"rescinded": false,
"id": 121458981,
"time": 84,
"isHome": true,
"incidentClass": "yellow",
"reversedPeriodTime": 7,
"incidentType": "card"
},
{
"from": "penalty",
"homeScore": 2,
"awayScore": 2,
"player": {
"name": "Luke McCowan",
"slug": "mccowan-luke",
"shortName": "L. McCowan",
"position": "M",
"jerseyNumber": "17",
"userCount": 71,
"id": 926363,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 881625600
},
"footballPassingNetworkAction": [],
"id": 185527078,
"time": 79,
"isHome": false,
"incidentClass": "penalty",
"reversedPeriodTime": 12,
"incidentType": "goal"
},
{
"playerIn": {
"name": "Kai Fotheringham",
"firstName": "Kai Fotheringham",
"lastName": "",
"slug": "kai-fotheringham",
"shortName": "K. Fotheringham",
"position": "M",
"jerseyNumber": "18",
"userCount": 32,
"id": 1083614,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 1050624000
},
"playerOut": {
"name": "Vicko Ševelj",
"firstName": "",
"lastName": "",
"slug": "vicko-sevelj",
"shortName": "V. Ševelj",
"position": "D",
"jerseyNumber": "5",
"userCount": 117,
"id": 970517,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 969321600
},
"id": 122903838,
"time": 79,
"injury": false,
"isHome": true,
"incidentClass": "regular",
"reversedPeriodTime": 12,
"incidentType": "substitution"
},
{
"player": {
"name": "Ross Graham",
"firstName": "",
"lastName": "",
"slug": "ross-graham",
"shortName": "R. Graham",
"position": "D",
"jerseyNumber": "6",
"userCount": 34,
"id": 999589,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 982627200
},
"playerName": "Ross Graham",
"reason": "Foul",
"rescinded": false,
"id": 121458966,
"time": 78,
"isHome": true,
"incidentClass": "yellow",
"reversedPeriodTime": 13,
"incidentType": "card"
},
{
"confirmed": false,
"player": {
"name": "Simon Murray",
"slug": "simon-murray",
"shortName": "S. Murray",
"position": "F",
"jerseyNumber": "15",
"userCount": 122,
"id": 786106,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 700617600
},
"isHome": false,
"id": 26941,
"time": 77,
"incidentClass": "penaltyNotAwarded",
"reversedPeriodTime": 14,
"incidentType": "varDecision"
},
{
"playerIn": {
"name": "Curtis Main",
"slug": "curtis-main",
"shortName": "C. Main",
"position": "F",
"jerseyNumber": "9",
"userCount": 73,
"id": 36759,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 708998400
},
"playerOut": {
"name": "Sebastian Palmer-Houlden",
"firstName": "",
"lastName": "",
"slug": "sebastian-palmer-houlden",
"shortName": "S. Palmer-Houlden",
"position": "F",
"jerseyNumber": "23",
"userCount": 47,
"id": 1389711,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 1084320000
},
"id": 122903823,
"time": 73,
"injury": false,
"isHome": false,
"incidentClass": "regular",
"reversedPeriodTime": 18,
"incidentType": "substitution"
},
{
"playerIn": {
"name": "Josh Mulligan",
"slug": "josh-mulligan",
"shortName": "J. Mulligan",
"position": "M",
"jerseyNumber": "8",
"userCount": 34,
"id": 988691,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 1037059200
},
"playerOut": {
"name": "Lyall Cameron",
"firstName": "",
"lastName": "",
"slug": "lyall-cameron",
"shortName": "L. Cameron",
"position": "M",
"jerseyNumber": "10",
"userCount": 45,
"id": 988690,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 1034208000
},
"id": 122903822,
"time": 73,
"injury": false,
"isHome": false,
"incidentClass": "regular",
"reversedPeriodTime": 18,
"incidentType": "substitution"
},
{
"playerIn": {
"name": "Scott Tiffoney",
"firstName": "",
"lastName": "",
"slug": "scott-tiffoney",
"shortName": "S. Tiffoney",
"position": "F",
"jerseyNumber": "7",
"userCount": 33,
"id": 858906,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 904089600
},
"playerOut": {
"name": "Ethan Ingram",
"slug": "ethan-ingram",
"shortName": "E. Ingram",
"position": "D",
"jerseyNumber": "2",
"userCount": 22,
"id": 1085949,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 1034985600
},
"id": 122903777,
"time": 64,
"injury": false,
"isHome": false,
"incidentClass": "regular",
"reversedPeriodTime": 27,
"incidentType": "substitution"
},
{
"text": "HT",
"homeScore": 2,
"awayScore": 1,
"isLive": false,
"time": 45,
"addedTime": 999,
"reversedPeriodTime": 1,
"incidentType": "period"
},
{
"length": 3,
"time": 45,
"addedTime": 0,
"reversedPeriodTime": 1,
"incidentType": "injuryTime"
},
{
"homeScore": 2,
"awayScore": 1,
"player": {
"name": "Miller Thomson",
"firstName": "Miller Thomson",
"slug": "miller-thomson",
"shortName": "M. Thomson",
"position": "F",
"jerseyNumber": "29",
"userCount": 9,
"id": 1168585,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 1090281600
},
"assist1": {
"name": "Vicko Ševelj",
"firstName": "",
"lastName": "",
"slug": "vicko-sevelj",
"shortName": "V. Ševelj",
"position": "D",
"jerseyNumber": "5",
"userCount": 117,
"id": 970517,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 969321600
},
"footballPassingNetworkAction": [
{
"player": {
"name": "Craig Sibbald",
"slug": "craig-sibbald",
"shortName": "C. Sibbald",
"position": "M",
"jerseyNumber": "14",
"userCount": 17,
"id": 164297,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 800755200
},
"eventType": "pass",
"time": 22,
"playerCoordinates": {
"x": 64,
"y": 53.6
},
"passEndCoordinates": {
"x": 63.4,
"y": 78.1
}
},
{
"player": {
"name": "Will Ferry",
"slug": "will-ferry",
"shortName": "W. Ferry",
"position": "M",
"jerseyNumber": "11",
"userCount": 68,
"id": 879386,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 976147200
},
"eventType": "pass",
"time": 23,
"playerCoordinates": {
"x": 64.3,
"y": 78.2
},
"passEndCoordinates": {
"x": 76.7,
"y": 93.6
}
},
{
"player": {
"name": "Kristijan Trapanovski",
"firstName": "",
"lastName": "",
"slug": "kristijan-trapanovski",
"shortName": "K. Trapanovski",
"position": "F",
"jerseyNumber": "7",
"userCount": 42,
"id": 928162,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 934588800
},
"eventType": "pass",
"time": 23,
"playerCoordinates": {
"x": 80,
"y": 91.4
},
"passEndCoordinates": {
"x": 69.4,
"y": 89
}
},
{
"player": {
"name": "Will Ferry",
"slug": "will-ferry",
"shortName": "W. Ferry",
"position": "M",
"jerseyNumber": "11",
"userCount": 68,
"id": 879386,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 976147200
},
"eventType": "ball-movement",
"time": 23,
"playerCoordinates": {
"x": 69.4,
"y": 89
},
"passEndCoordinates": {
"x": 91.5,
"y": 21.5
}
},
{
"player": {
"name": "Will Ferry",
"slug": "will-ferry",
"shortName": "W. Ferry",
"position": "M",
"jerseyNumber": "11",
"userCount": 68,
"id": 879386,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 976147200
},
"eventType": "pass",
"time": 23,
"playerCoordinates": {
"x": 73.8,
"y": 56.8
},
"passEndCoordinates": {
"x": 91.5,
"y": 21.5
}
},
{
"player": {
"name": "Vicko Ševelj",
"firstName": "",
"lastName": "",
"slug": "vicko-sevelj",
"shortName": "V. Ševelj",
"position": "D",
"jerseyNumber": "5",
"userCount": 117,
"id": 970517,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 969321600
},
"eventType": "pass",
"isAssist": true,
"time": 23,
"playerCoordinates": {
"x": 91.7,
"y": 21.7
},
"passEndCoordinates": {
"x": 97.3,
"y": 58.1
}
},
{
"player": {
"name": "Miller Thomson",
"firstName": "Miller Thomson",
"slug": "miller-thomson",
"shortName": "M. Thomson",
"position": "F",
"jerseyNumber": "29",
"userCount": 9,
"id": 1168585,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 1090281600
},
"eventType": "goal",
"bodyPart": "right-foot",
"time": 23,
"playerCoordinates": {
"x": 97,
"y": 55.1
},
"gkCoordinates": {
"x": 99,
"y": 50
},
"goalShotCoordinates": {
"x": 100,
"y": 53.9
},
"goalMouthCoordinates": {
"x": 29.03,
"y": 83.17
},
"goalkeeper": {
"name": "Jon McCracken",
"slug": "jon-mccracken",
"shortName": "J. McCracken",
"position": "G",
"jerseyNumber": "1",
"userCount": 38,
"id": 970399,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 959126400
}
}
],
"id": 185524546,
"time": 23,
"isHome": true,
"incidentClass": "regular",
"reversedPeriodTime": 23,
"incidentType": "goal"
},
{
"homeScore": 1,
"awayScore": 1,
"player": {
"name": "Sebastian Palmer-Houlden",
"firstName": "",
"lastName": "",
"slug": "sebastian-palmer-houlden",
"shortName": "S. Palmer-Houlden",
"position": "F",
"jerseyNumber": "23",
"userCount": 47,
"id": 1389711,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 1084320000
},
"footballPassingNetworkAction": [
{
"player": {
"name": "Luke McCowan",
"slug": "mccowan-luke",
"shortName": "L. McCowan",
"position": "M",
"jerseyNumber": "17",
"userCount": 71,
"id": 926363,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 881625600
},
"eventType": "pass",
"time": 18,
"playerCoordinates": {
"x": 42.6,
"y": 20.7
},
"passEndCoordinates": {
"x": 23.2,
"y": 11.7
}
},
{
"player": {
"name": "Simon Murray",
"slug": "simon-murray",
"shortName": "S. Murray",
"position": "F",
"jerseyNumber": "15",
"userCount": 122,
"id": 786106,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 700617600
},
"eventType": "pass",
"time": 18,
"playerCoordinates": {
"x": 14.8,
"y": 11.3
},
"passEndCoordinates": {
"x": 7.9,
"y": 27.6
}
},
{
"player": {
"name": "Luke McCowan",
"slug": "mccowan-luke",
"shortName": "L. McCowan",
"position": "M",
"jerseyNumber": "17",
"userCount": 71,
"id": 926363,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 881625600
},
"eventType": "pass",
"time": 18,
"playerCoordinates": {
"x": 7.3,
"y": 27.6
},
"passEndCoordinates": {
"x": 12.7,
"y": 35.4
}
},
{
"player": {
"name": "Sebastian Palmer-Houlden",
"firstName": "",
"lastName": "",
"slug": "sebastian-palmer-houlden",
"shortName": "S. Palmer-Houlden",
"position": "F",
"jerseyNumber": "23",
"userCount": 47,
"id": 1389711,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 1084320000
},
"eventType": "ball-movement",
"bodyPart": "left-foot",
"time": 18,
"playerCoordinates": {
"x": 12.7,
"y": 35.4
}
},
{
"player": {
"name": "Sebastian Palmer-Houlden",
"firstName": "",
"lastName": "",
"slug": "sebastian-palmer-houlden",
"shortName": "S. Palmer-Houlden",
"position": "F",
"jerseyNumber": "23",
"userCount": 47,
"id": 1389711,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 1084320000
},
"eventType": "goal",
"bodyPart": "left-foot",
"time": 18,
"playerCoordinates": {
"x": 4.3,
"y": 54.7
},
"gkCoordinates": {
"x": 1.8,
"y": 46.2
},
"goalShotCoordinates": {
"x": 0,
"y": 51.1
},
"goalMouthCoordinates": {
"x": 55.91,
"y": 96.83
},
"goalkeeper": {
"name": "Jack Walton",
"slug": "jack-walton",
"shortName": "J. Walton",
"position": "G",
"jerseyNumber": "1",
"userCount": 25,
"id": 793229,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 893289600,
"fieldTranslations": {
"nameTranslation": {
"ar": "جاك والتون"
},
"shortNameTranslation": {
"ar": "ج. والتون"
}
}
}
}
],
"id": 185524467,
"time": 18,
"isHome": false,
"incidentClass": "regular",
"reversedPeriodTime": 28,
"incidentType": "goal"
},
{
"homeScore": 1,
"awayScore": 0,
"player": {
"name": "Kristijan Trapanovski",
"firstName": "",
"lastName": "",
"slug": "kristijan-trapanovski",
"shortName": "K. Trapanovski",
"position": "F",
"jerseyNumber": "7",
"userCount": 42,
"id": 928162,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 934588800
},
"assist1": {
"name": "Jort van der Sande",
"slug": "jort-van-der-sande",
"shortName": "J. v. d. Sande",
"position": "M",
"jerseyNumber": "20",
"userCount": 101,
"id": 584062,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 822528000
},
"footballPassingNetworkAction": [
{
"player": {
"name": "Kristijan Trapanovski",
"firstName": "",
"lastName": "",
"slug": "kristijan-trapanovski",
"shortName": "K. Trapanovski",
"position": "F",
"jerseyNumber": "7",
"userCount": 42,
"id": 928162,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 934588800
},
"eventType": "goal",
"bodyPart": "right-foot",
"time": 13,
"playerCoordinates": {
"x": 88.6,
"y": 56.2
},
"gkCoordinates": {
"x": 99.1,
"y": 49.1
},
"goalShotCoordinates": {
"x": 100,
"y": 47.1
},
"goalMouthCoordinates": {
"x": 65.59,
"y": 91.5
},
"goalkeeper": {
"name": "Jon McCracken",
"slug": "jon-mccracken",
"shortName": "J. McCracken",
"position": "G",
"jerseyNumber": "1",
"userCount": 38,
"id": 970399,
"marketValueCurrency": "EUR",
"dateOfBirthTimestamp": 959126400
}
}
],
"id": 185524215,
"time": 13,
"isHome": true,
"incidentClass": "regular",
"reversedPeriodTime": 33,
"incidentType": "goal"
}
],
"home": {
"goalkeeperColor": {
"primary": "009933",
"number": "ffffff",
"outline": "009933",
"fancyNumber": "ffffff"
},
"playerColor": {
"primary": "ff4c1c",
"number": "000000",
"outline": "ff4c1c",
"fancyNumber": "222226"
}
},
"away": {
"goalkeeperColor": {
"primary": "ffff00",
"number": "000000",
"outline": "ffff00",
"fancyNumber": "222226"
},
"playerColor": {
"primary": "00274f",
"number": "ffffff",
"outline": "00274f",
"fancyNumber": "ffffff"
}
}
}

GET https://www.sofascore.com/api/v1/event/12477145/highlights
{
"highlights": [
{
"title": "Dundee United 2-2 Dundee FC",
"subtitle": "Full Highlights",
"url": "
",
"thumbnailUrl": "https://i.ytimg.com/vi/K17shK7w4FE/hqdefault.jpg",
"mediaType": 1,
"doFollow": false,
"keyHighlight": false,
"id": 5767182,
"createdAtTimestamp": 1722813089,
"sourceUrl": "
"
}
]
}
 

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 077
Благодарностей
29
Баллы
48
спасибо, а есть варианты что бы мышку подводить к нужному элементу, который определили в JSON
 

adr1enette

Client
Регистрация
30.11.2022
Сообщения
54
Благодарностей
13
Баллы
8
C#:
string id = "12642062";
string pattern = $@"//a[@data-id='{id}' and substring(@href, string-length(@href) - string-length('#id:{id}') + 1) = '#id:{id}']";

Tab Tab1=instance.ActiveTab;
HtmlElement htmMain=Tab1.FindElementByXPath(pattern, 0);
Tab1.FullEmulationMouseMoveToHtmlElement(htmMain);
Tab1.FullEmulationMouseClick("left", "click");
 
  • Спасибо
Реакции: SlavenTyz

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 077
Благодарностей
29
Баллы
48
C#:
string id = "12642062";
string pattern = $@"//a[@data-id='{id}' and substring(@href, string-length(@href) - string-length('#id:{id}') + 1) = '#id:{id}']";

Tab Tab1=instance.ActiveTab;
HtmlElement htmMain=Tab1.FindElementByXPath(pattern, 0);
Tab1.FullEmulationMouseMoveToHtmlElement(htmMain);
Tab1.FullEmulationMouseClick("left", "click");
Спасибо еще раз, а можете подсказать где искать в JSON нужный ТЭГ124189
 
Последнее редактирование:

adr1enette

Client
Регистрация
30.11.2022
Сообщения
54
Благодарностей
13
Баллы
8

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 077
Благодарностей
29
Баллы
48
Не понял. Что вы хотите еще раз?
В левом окне представлен JSON, на сайте я обвел красным квадратом элемент отвечающий за наличие графиков игры, если его нет значит и графика нет. Мне нужны игры где имеются графики игр, то есть нужно в JSON определить график игры имеется или нет. А в правом окне указал HtmlElement может как ни будь по ним можно узнать признак в JSON124198
 

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 077
Благодарностей
29
Баллы
48
Решил по эксперементировать с эмуляцией мышки, по пробывал ваш метод, работает. А вот мой нет уже замучился. Смысл в том, что через JSON определяю название команды и нахожу его в HtmlElement и кликаю по нему. Прикол в том, если задам в ручную, напишу сам название команды в XPath пути то все работает, а если подставлю из JSON, при этом название команды будет таким же то косяк. всплывает. Перефразирую если укажу значение (т.е напишу сам) как в переменной то все отработает, но если в путь XPath подставлю переменную (значение такое же), то все коряво работает. Это демонстрируется в логе. Да же значение XPath изменил
C#:
HtmlElement htmMain3=Tab1.FindElementByXPath("//*[name()='bdi'][contains(string(),"+strGuest_trasleite+")]",0);
и так пробывал
C#:
HtmlElement htmMain3=Tab1.FindElementByXPath("//*[name()='bdi'][contains(string(),@strGuest_trasleite)]",0);
все равно коряво отрабатывает




124199
 
Последнее редактирование:

adr1enette

Client
Регистрация
30.11.2022
Сообщения
54
Благодарностей
13
Баллы
8
Решил по эксперементировать с эмуляцией мышки, по пробывал ваш метод, работает. А вот мой нет уже замучился. Смысл в том, что через JSON определяю название команды и нахожу его в HtmlElement и кликаю по нему. Прикол в том, если задам в ручную, напишу сам название команды в XPath пути то все работает, а если подставлю из JSON, при этом название команды будет таким же то косяк. всплывает. Перефразирую если укажу значение (т.е напишу сам) как в переменной то все отработает, но если в путь XPath подставлю переменную (значение такое же), то все коряво работает. Это демонстрируется в логе. Да же значение XPath изменил
C#:
HtmlElement htmMain3=Tab1.FindElementByXPath("//*[name()='bdi'][contains(string(),"+strGuest_trasleite+")]",0);
и так пробывал
C#:
HtmlElement htmMain3=Tab1.FindElementByXPath("//*[name()='bdi'][contains(string(),@strGuest_trasleite)]",0);
все равно коряво отрабатывает




Посмотреть вложение 124199
Кажется, это выходит за рамки бесплатной помощи) совет, если собираетесь решить проблему сами: ищите по id матча, а не названию команды (любой из двух). Еще, советую использовать только запросы, без браузера. Такой простенький сайт с целым api позволяет это сделать (Newtonsoft.Json и HtmlAgilityPack в помощь).

Посмотрите разницу матчей с графиком и без, в чем их разница в json. Отследите запрос при клике на график, что если обратиться к api графика даже без иконки графика. Так постепенно смотрите что за что отвечает, кирпичик за кирпичиком.

Если влом делать самому - обращайтесь за консультацией, за символический прайс отвечу на все интересующие вопросы и помогу с проблемой/целым проектом :ah:
 
  • Спасибо
Реакции: Ribas

LiMe

Client
Регистрация
10.12.2015
Сообщения
613
Благодарностей
326
Баллы
63
Если уже начинаете работать с запросами, работайте с ними, а то вы открываете JSON с данными, и пытаетесь в нем найти кнопку с графиком. Это не так работает, вы обращаетесь в первому endpoint'у, получаете данные, получаете ID матча, а потом обращаетесь к endpoint'у который отвечает за график, если его нет, он вам в ответе об этом скажет. А вы пытаетесь построить какой-то велосипед, не понятно для чего, правда)
 

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 077
Благодарностей
29
Баллы
48
Я не понимаю вашего негодования, не хотите не отвечайте. но меня реально мучают 2-ва вопроса, которые выше описал
 

LiMe

Client
Регистрация
10.12.2015
Сообщения
613
Благодарностей
326
Баллы
63
Я не понимаю вашего негодования, не хотите не отвечайте. но меня реально мучают 2-ва вопроса, которые выше описал
А причем тут наше негодования? Это совет, используйте что-то одно, либо API либо Web. При использование API, у вас есть все данные и все endpoint'ы для получение нужных вам данных. А вы просто пытается что-то построить, что не укладывается в наше понимание и в целом выглядит не нужными действиями. А вы почему-то воспринимаете это в штыки.
 

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