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

SlavenTyz

Client
Joined
Apr 30, 2018
Messages
1,107
Reaction score
31
Points
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
 
Last edited:

adr1enette

Client
Joined
Nov 30, 2022
Messages
55
Reaction score
14
Points
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
Joined
Apr 30, 2018
Messages
1,107
Reaction score
31
Points
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
Joined
Nov 30, 2022
Messages
55
Reaction score
14
Points
8

SlavenTyz

Client
Joined
Apr 30, 2018
Messages
1,107
Reaction score
31
Points
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
Joined
Nov 30, 2022
Messages
55
Reaction score
14
Points
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
Joined
Apr 30, 2018
Messages
1,107
Reaction score
31
Points
48
спасибо, а есть варианты что бы мышку подводить к нужному элементу, который определили в JSON
 

adr1enette

Client
Joined
Nov 30, 2022
Messages
55
Reaction score
14
Points
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");
 
  • Thank you
Reactions: SlavenTyz

SlavenTyz

Client
Joined
Apr 30, 2018
Messages
1,107
Reaction score
31
Points
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
 
Last edited:

adr1enette

Client
Joined
Nov 30, 2022
Messages
55
Reaction score
14
Points
8

SlavenTyz

Client
Joined
Apr 30, 2018
Messages
1,107
Reaction score
31
Points
48
Не понял. Что вы хотите еще раз?
В левом окне представлен JSON, на сайте я обвел красным квадратом элемент отвечающий за наличие графиков игры, если его нет значит и графика нет. Мне нужны игры где имеются графики игр, то есть нужно в JSON определить график игры имеется или нет. А в правом окне указал HtmlElement может как ни будь по ним можно узнать признак в JSON124198
 

SlavenTyz

Client
Joined
Apr 30, 2018
Messages
1,107
Reaction score
31
Points
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
 
Last edited:

adr1enette

Client
Joined
Nov 30, 2022
Messages
55
Reaction score
14
Points
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);
все равно коряво отрабатывает




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

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

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

LiMe

Client
Joined
Dec 10, 2015
Messages
624
Reaction score
343
Points
63
Если уже начинаете работать с запросами, работайте с ними, а то вы открываете JSON с данными, и пытаетесь в нем найти кнопку с графиком. Это не так работает, вы обращаетесь в первому endpoint'у, получаете данные, получаете ID матча, а потом обращаетесь к endpoint'у который отвечает за график, если его нет, он вам в ответе об этом скажет. А вы пытаетесь построить какой-то велосипед, не понятно для чего, правда)
 

SlavenTyz

Client
Joined
Apr 30, 2018
Messages
1,107
Reaction score
31
Points
48
Я не понимаю вашего негодования, не хотите не отвечайте. но меня реально мучают 2-ва вопроса, которые выше описал
 

LiMe

Client
Joined
Dec 10, 2015
Messages
624
Reaction score
343
Points
63
Я не понимаю вашего негодования, не хотите не отвечайте. но меня реально мучают 2-ва вопроса, которые выше описал
А причем тут наше негодования? Это совет, используйте что-то одно, либо API либо Web. При использование API, у вас есть все данные и все endpoint'ы для получение нужных вам данных. А вы просто пытается что-то построить, что не укладывается в наше понимание и в целом выглядит не нужными действиями. А вы почему-то воспринимаете это в штыки.
 

Users Who Are Viewing This Thread (Total: 1, Members: 0, Guests: 1)