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

  • Автор темы Автор темы SlavenTyz
  • Дата начала Дата начала

SlavenTyz

Client
Регистрация
30.04.2018
Сообщения
1 173
Реакции
37
Баллы
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
 
Последнее редактирование:
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
}
}
 
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?
 
вот другой, ваш.. не понял, на что жалуетесь?

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");


Но элемент не находится
 
У каждого матча свой 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": "
"
}
]
}
 
спасибо, а есть варианты что бы мышку подводить к нужному элементу, который определили в JSON
 
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
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
 
Последнее редактирование:
Не понял. Что вы хотите еще раз?
В левом окне представлен JSON, на сайте я обвел красным квадратом элемент отвечающий за наличие графиков игры, если его нет значит и графика нет. Мне нужны игры где имеются графики игр, то есть нужно в JSON определить график игры имеется или нет. А в правом окне указал HtmlElement может как ни будь по ним можно узнать признак в JSON124198
 
Решил по эксперементировать с эмуляцией мышки, по пробывал ваш метод, работает. А вот мой нет уже замучился. Смысл в том, что через 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
 
Последнее редактирование:
Решил по эксперементировать с эмуляцией мышки, по пробывал ваш метод, работает. А вот мой нет уже замучился. Смысл в том, что через 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
Если уже начинаете работать с запросами, работайте с ними, а то вы открываете JSON с данными, и пытаетесь в нем найти кнопку с графиком. Это не так работает, вы обращаетесь в первому endpoint'у, получаете данные, получаете ID матча, а потом обращаетесь к endpoint'у который отвечает за график, если его нет, он вам в ответе об этом скажет. А вы пытаетесь построить какой-то велосипед, не понятно для чего, правда)
 
Я не понимаю вашего негодования, не хотите не отвечайте. но меня реально мучают 2-ва вопроса, которые выше описал
 
Я не понимаю вашего негодования, не хотите не отвечайте. но меня реально мучают 2-ва вопроса, которые выше описал

А причем тут наше негодования? Это совет, используйте что-то одно, либо API либо Web. При использование API, у вас есть все данные и все endpoint'ы для получение нужных вам данных. А вы просто пытается что-то построить, что не укладывается в наше понимание и в целом выглядит не нужными действиями. А вы почему-то воспринимаете это в штыки.
 

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