-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcyber_divination.py
More file actions
1010 lines (970 loc) · 36.6 KB
/
cyber_divination.py
File metadata and controls
1010 lines (970 loc) · 36.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
import random
import time
import tempfile
import uuid
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
# 周易八卦和六十四卦数据库
TRIGRAM_MAP = {
(0,0,0): '坤',
(0,0,1): '震',
(0,1,0): '坎',
(0,1,1): '兑',
(1,0,0): '艮',
(1,0,1): '离',
(1,1,0): '巽',
(1,1,1): '乾'
}
HEXAGRAM_DB = {
# 上乾下乾(乾为天)
('乾', '乾'): {
'name': '乾',
'text': '元亨利贞',
'lines': [
'潜龙勿用',
'见龙在田,利见大人',
'君子终日乾乾,夕惕若,厉无咎',
'或跃在渊,无咎',
'飞龙在天,利见大人',
'亢龙有悔'
]},
# 上坤下坤(坤为地)
('坤', '坤'): {
'name': '坤',
'text': '元亨,利牝马之贞',
'lines': [
'履霜,坚冰至',
'直方大,不习无不利',
'含章可贞,或从王事',
'括囊,无咎无誉',
'黄裳元吉',
'龙战于野,其血玄黄'
]},
# 上坎下震(水雷屯)
('坎', '震'): {
'name': '屯',
'text': '元亨利贞,勿用有攸往',
'lines': [
'磐桓,利居贞,利建侯',
'屯如邅如,乘马班如,匪寇婚媾。女子贞不字,十年乃字',
'即鹿无虞,惟入于林中,君子几不如舍,往吝',
'乘马班如,求婚媾,往吉无不利',
'屯其膏,小贞吉,大贞凶',
'乘马班如,泣血涟如'
]},
# 上艮下坎(山水蒙)
('艮', '坎'): {
'name': '蒙',
'text': '亨。匪我求童蒙,童蒙求我',
'lines': [
'发蒙,利用刑人,用说桎梏,以往吝',
'包蒙吉,纳妇吉,子克家',
'勿用取女,见金夫不有躬,无攸利',
'困蒙,吝',
'童蒙,吉',
'击蒙,不利为寇,利御寇'
]},
# 上坎下乾(水天需)
('坎', '乾'): {
'name': '需',
'text': '有孚,光亨,贞吉',
'lines': [
'需于郊,利用恒,无咎',
'需于沙,小有言,终吉',
'需于泥,致寇至',
'需于血,出自穴',
'需于酒食,贞吉',
'入于穴,有不速之客三人来,敬之终吉'
]},
# 上乾下坎(天水讼)
('乾', '坎'): {
'name': '讼',
'text': '有孚窒惕,中吉终凶',
'lines': [
'不永所事,小有言,终吉',
'不克讼,归而逋,其邑人三百户无眚',
'食旧德,贞厉终吉',
'不克讼,复即命,渝安贞吉',
'讼元吉',
'或锡之鞶带,终朝三褫之'
]},
# 上坤下坎(地水师)
('坤', '坎'): {
'name': '师',
'text': '贞,丈人吉,无咎',
'lines': [
'师出以律,否臧凶',
'在师中吉,无咎,王三锡命',
'师或舆尸,凶',
'师左次,无咎',
'田有禽,利执言,无咎。长子帅师,弟子舆尸,贞凶',
'大君有命,开国承家,小人勿用'
]},
# 上坎下坤(水地比)
('坎', '坤'): {
'name': '比',
'text': '吉。原筮元永贞,无咎',
'lines': [
'有孚比之,无咎。有孚盈缶,终来有它吉',
'比之自内,贞吉',
'比之匪人',
'外比之,贞吉',
'显比,王用三驱失前禽,邑人不诫,吉',
'比之无首,凶'
]},
# 上巽下乾(风天小畜)
('巽', '乾'): {
'name': '小畜',
'text': '亨。密云不雨,自我西郊',
'lines': [
'复自道,何其咎?吉',
'牵复,吉',
'舆说辐,夫妻反目',
'有孚,血去惕出,无咎',
'有孚挛如,富以其邻',
'既雨既处,尚德载。妇贞厉。月几望,君子征凶'
]},
# 上乾下兑(天泽履)
('乾', '兑'): {
'name': '履',
'text': '履虎尾,不咥人,亨',
'lines': [
'素履往,无咎',
'履道坦坦,幽人贞吉',
'眇能视,跛能履,履虎尾咥人,凶',
'履虎尾,愬愬终吉',
'夬履,贞厉',
'视履考祥,其旋元吉'
]},
# 上坤下乾(地天泰)
('坤', '乾'): {
'name': '泰',
'text': '小往大来,吉亨',
'lines': [
'拔茅茹,以其汇,征吉',
'包荒,用冯河,不遐遗;朋亡,得尚于中行',
'无平不陂,无往不复,艰贞无咎',
'翩翩不富以其邻,不戒以孚',
'帝乙归妹,以祉元吉',
'城复于隍,勿用师,自邑告命,贞吝'
]},
# 上乾下坤(天地否)
('乾', '坤'): {
'name': '否',
'text': '否之匪人,不利君子贞',
'lines': [
'拔茅茹,以其汇,贞吉亨',
'包承,小人吉,大人否亨',
'包羞',
'有命无咎,畴离祉',
'休否,大人吉。其亡其亡,系于苞桑',
'倾否,先否后喜'
]},
# 上乾下离(天火同人)
('乾', '离'): {
'name': '同人',
'text': '同人于野,亨。利涉大川,利君子贞',
'lines': [
'同人于门,无咎',
'同人于宗,吝',
'伏戎于莽,升其高陵,三岁不兴',
'乘其墉,弗克攻,吉',
'同人,先号啕而后笑,大师克相遇',
'同人于郊,无悔'
]},
# 上离下乾(火天大有)
('离', '乾'): {
'name': '大有',
'text': '元亨',
'lines': [
'无交害,匪咎;艰则无咎',
'大车以载,有攸往,无咎',
'公用亨于天子,小人弗克',
'匪其彭,无咎',
'厥孚交如,威如,吉',
'自天祐之,吉无不利'
]},
# 上坤下艮(地山谦)
('坤', '艮'): {
'name': '谦',
'text': '亨,君子有终',
'lines': [
'谦谦君子,用涉大川,吉',
'鸣谦,贞吉',
'劳谦君子,有终吉',
'无不利,撝谦',
'不富以其邻,利用侵伐,无不利',
'鸣谦,利用行师,征邑国'
]},
# 上震下坤(雷地豫)
('震', '坤'): {
'name': '豫',
'text': '利建侯行师',
'lines': [
'鸣豫,凶',
'介于石,不终日,贞吉',
'盱豫,悔。迟有悔',
'由豫,大有得,勿疑,朋盍簪',
'贞疾,恒不死',
'冥豫,成有渝,无咎'
]},
# 上兑下震(泽雷随)
('兑', '震'): {
'name': '随',
'text': '元亨,利贞,无咎',
'lines': [
'官有渝,贞吉。 出门交有功',
'系小子,失丈夫',
'系丈夫,失小子。随有求得,利居贞',
'随有获,贞凶。有孚在道,以明,何咎',
'孚于嘉,吉',
'拘系之,乃从维之。王用亨于西山'
]},
# 上艮下巽(山风蛊)
('艮', '巽'): {
'name': '蛊',
'text': '元亨,利涉大川。先甲三日,后甲三日',
'lines': [
'干父之蛊,有子,考无咎。厉,终吉',
'干母之蛊,不可贞',
'干父之蛊,小有悔,无大咎',
'裕父之蛊,往见吝',
'干父之蛊,用誉',
'不事王侯,高尚其事'
]},
# 上坤下兑(地泽临)
('坤', '兑'): {
'name': '临',
'text': '元,亨,利,贞。至于八月有凶',
'lines': [
'咸临,贞吉',
'咸临,吉,无不利',
'甘临,无攸利。即忧之,无咎',
'至临,无咎',
'知临,大君之宜,吉',
'敦临,吉,无咎'
]},
# 20上下(风地观)
('巽', '坤'): {
'name': '观',
'text': '盥而不荐,有孚顒若',
'lines': [
'童观,小人无咎,君子吝',
'窥观,利女贞',
'观我生,进退',
'观国之光,利用宾于王',
'观我生,君子无咎',
'观其生,君子无咎'
]},
# 21(火雷噬嗑)
('离', '震'): {
'name': '噬嗑',
'text': '亨。利用狱',
'lines': [
'屦校灭趾,无咎',
'噬肤灭鼻,无咎',
'噬腊肉,遇毒。小吝,无咎',
'噬干胏,得金矢。利艰贞,吉',
'噬干肉,得黄金。贞厉,无咎',
'何校灭耳,凶'
]},
# 22(山火贲)
('艮', '离'): {
'name': '贲',
'text': '亨。小利有攸往',
'lines': [
'贲其趾,舍车而徒',
'贲其须',
'贲如,濡如,永贞吉',
'贲如,皤如,白马翰如,匪寇婚媾',
'贲于丘园,束帛戋戋。吝,终吉',
'白贲,无咎'
]},
# 23上下(山地剥)
('艮', '坤'): {
'name': '剥',
'text': '不利有攸往',
'lines': [
'剥床以足,蔑贞,凶',
'剥床以辨,蔑贞,凶',
'剥之,无咎',
'剥床以肤,凶',
'贯鱼,以宫人宠,无不利',
'硕果不食,君子得舆,小人剥庐'
]},
# 24上下(地雷复)
('坤', '震'): {
'name': '复',
'text': '亨。出入无疾,朋来无咎。反复其道,七日来复,利有攸往',
'lines': [
'不远复,无只悔,元吉',
'休复,吉',
'频复,厉,无咎',
'中行独复',
'敦复,无悔',
'迷复,凶,有灾眚。用行师,终有大败,以其国君凶,至于十年不克征'
]},
# 25上下(天雷无妄)
('乾', '震'): {
'name': '无妄',
'text': '元,亨,利,贞。其匪正有眚,不利有攸往',
'lines': [
'无妄,往吉',
'不耕获,不菑畲,则利有攸往',
'无妄之灾。或系之牛,行人之得,邑人之灾',
'可贞,无咎',
'无妄之疾,勿药有喜',
'无妄,行有眚,无攸利'
]},
# 上下(山天大畜)
('艮', '乾'): {
'name': '大畜',
'text': '利贞,不家食,吉。利涉大川',
'lines': [
'有厉,利已',
'舆说輹',
'良马逐,利艰贞。曰闲舆卫,利有攸往',
'童豕之牿,元吉',
'豮豕之牙,吉',
'何天之衢,亨'
]},
# 27上下(山雷颐)
('艮', '震'): {
'name': '颐',
'text': '贞吉。观颐,自求口实',
'lines': [
'舍尔灵龟,观我朵颐,凶',
'颠颐,拂经;于丘颐,征凶',
'拂颐,贞凶。十年勿用,无攸利',
'颠颐,吉。虎视眈眈,其欲逐逐,无咎',
'拂经,居贞吉。不可涉大川',
'由颐,厉吉。利涉大川'
]},
# 28上下(泽风大过)
('兑', '巽'): {
'name': '大过',
'text': '栋桡。利有攸往,亨',
'lines': [
'藉用白茅,无咎',
'枯杨生稊,老夫得其女妻,无不利',
'栋桡,凶',
'栋隆,吉。有它吝',
'枯杨生花,老妇得其士夫,无咎无誉',
'过涉灭顶,凶,无咎'
]},
# 上下(坎为水)
('坎', '坎'): {
'name': '坎',
'text': '习坎,有孚,维心亨,行有尚',
'lines': [
'习坎,入于坎窞。凶',
'坎有险,求小得',
'来之坎坎,险且枕,入于坎窞,勿用',
'樽酒簋贰,用缶,纳约自牖,终无咎',
'坎不盈,只既平,无咎',
'系用徵纆,寘于丛棘,三岁不得,凶'
]},
# 30上下(离为火)
('离', '离'): {
'name': '离',
'text': '利贞,亨。畜牝牛,吉',
'lines': [
'履错然,敬之,无咎',
'黄离,元吉',
'日昃之离。不鼓缶而歌,则大耋之嗟,凶',
'突如其来如,焚如,死如,弃如',
'出涕沱若,戚嗟若,吉',
'王用出征,有嘉。折首,获匪其丑,无咎'
]},
# 上下(泽山咸)
('兑', '艮'): {
'name': '咸',
'text': '亨,利贞。取女吉',
'lines': [
'咸其拇',
'咸其腓,凶,居吉',
'咸其股,执其随,往吝',
'贞吉悔亡,憧憧往来,朋从尔思',
'咸其脢,无悔',
'咸其辅,颊,舌'
]},
# 32上下(雷风恒)
('震', '巽'): {
'name': '恒',
'text': '亨,无咎,利贞。利有攸往',
'lines': [
'浚恒,贞凶,无攸利',
'悔亡',
'不恒其德,或承之羞,贞吝',
'田无禽',
'恒其德,贞。妇人吉,夫子凶',
'振恒,凶'
]},
# 33上下(天山遁)
('乾', '艮'): {
'name': '遁',
'text': '亨。小利贞',
'lines': [
'遁尾,厉。勿用有攸往',
'执之用黄牛之革,莫之胜说',
'系遁,有疾厉。畜臣妾,吉',
'好遁,君子吉,小人否',
'嘉遁,贞吉',
'肥遁,无不利'
]},
# 34上下(雷天大壮)
('震', '乾'): {
'name': '大壮',
'text': '利贞',
'lines': [
'壮于趾,征凶,有孚',
'贞吉',
'小人用壮,君子用罔,贞厉。羝羊触藩,羸其角',
'贞吉,悔亡;藩决不羸,壮于大舆之輹',
'丧羊于易,无悔',
'羝羊触藩,不能退,不能遂,无攸利。艰则吉'
]},
# 35上下(火地晋)
('离', '坤'): {
'name': '晋',
'text': '康侯用锡马蕃庶,昼日三接',
'lines': [
'晋如,摧如,贞吉。罔孚,裕,无咎',
'晋如,愁如,贞吉。受兹介福,于其王母',
'众允,悔亡',
'晋如鼫鼠,贞厉',
'悔亡,失得勿恤,往吉,无不利',
'晋其角,维用伐邑,厉吉无咎,贞吝'
]},
# 上下(地火明夷)
('坤', '离'): {
'name': '明夷',
'text': '利艰贞',
'lines': [
'明夷于飞,垂其翼。君子于行,三日不食。有攸往,主人有言',
'明夷,夷于左股,用拯马壮,吉',
'明夷于南狩,得其大首,不可疾,贞',
'入于左腹,获明夷之心,出于门庭',
'箕子之明夷,利贞',
'不明晦,初登于天,后入于地'
]},
# 37上下(风火家人)
('巽', '离'): {
'name': '家人',
'text': '利女贞',
'lines': [
'闲有家,悔亡',
'无攸遂,在中馈,贞吉',
'家人嗃嗃,悔厉,吉;妇子嘻嘻,终吝',
'富家,大吉',
'王假有家,勿恤,吉',
'有孚威如,终吉'
]},
# 上下(火泽睽)
('离', '兑'): {
'name': '睽',
'text': '小事吉',
'lines': [
'悔亡,丧马勿逐,自复。见恶人,无咎',
'遇主于巷,无咎',
'见舆曳,其牛掣。其人天且劓,无初有终',
'睽孤,遇元夫。交孚,厉无咎',
'悔亡,厥宗噬肤,往何咎',
'睽孤,见豕负涂,载鬼一车。先张之弧,后说之弧,匪寇婚媾。往遇雨则吉'
]},
# 上下(水山蹇)
('坎', '艮'): {
'name': '蹇',
'text': '利西南,不利东北。利见大人,贞吉',
'lines': [
'往蹇来誉',
'王臣蹇蹇,匪躬之故',
'往蹇来反',
'往蹇来连',
'大蹇朋来',
'往蹇来硕,吉。利见大人'
]},
# 40上下(雷水解)
('震', '坎'): {
'name': '解',
'text': '利西南。无所往,其来复吉。有攸往,夙吉',
'lines': [
'无咎',
'田获三狐,得黄矢,贞吉',
'负且乘,致寇至,贞吝',
'解而拇,朋至斯孚',
'君子维有解,吉,有孚于小人',
'公用射隼,于高墉之上,获之无不利'
]},
# 41上下(山泽损)
('艮', '兑'): {
'name': '损',
'text': '有孚,元吉,无咎,可贞。利有攸往。曷之用?二簋可用享',
'lines': [
'已事遄往,无咎,酌损之',
'利贞,征凶。弗损,益之',
'三人行,则损一人;一人行,则得其友',
'损其疾,使遄有喜,无咎',
'或益之,十朋之龟,弗克违。元吉',
'弗损,益之,无咎。贞吉。利有攸往,得臣无家'
]},
# 42上下(风雷益)
('巽', '震'): {
'name': '益',
'text': '利有攸往,利涉大川',
'lines': [
'利用为大作,元吉,无咎',
'或益之,十朋之龟,弗克违,永贞吉。王用享于帝,吉',
'益之用凶事,无咎。有孚中行,告公用圭',
'中行,告公从。利用为依迁国',
'有孚惠心,勿问元吉。有孚惠我德',
'莫益之,或击之,立心勿恒,凶'
]},
# 43上下(泽天夬)
('兑', '乾'): {
'name': '夬',
'text': '扬于王庭,孚号,有厉。告自邑,不利即戎,利有攸往',
'lines': [
'壮于前趾,往不胜为咎',
'惕号,莫夜有戎,勿恤',
'壮于頄,有凶。君子夬夬,独行遇雨,若濡有愠,无咎',
'臀无肤,其行次且。牵羊悔亡,闻言不信',
'苋陆夬夬,中行无咎',
'无号,终有凶'
]},
# 44上下(天风姤)
('乾', '巽'): {
'name': '姤',
'text': '女壮,勿用取女',
'lines': [
'系于金柅,贞吉。有攸往,见凶。羸豕孚蹢躅',
'包有鱼,无咎,不利宾',
'臀无肤,其行次且。厉,无大咎',
'包无鱼,起凶',
'以杞包瓜,含章,有陨自天',
'姤其角,吝,无咎'
]},
# 45上下(泽地萃)
('兑', '坤'): {
'name': '萃',
'text': '亨,王假有庙。利见大人,亨,利贞。用大牲吉。利有攸往',
'lines': [
'有孚不终,乃乱乃萃。若号,一握为笑。勿恤,往无咎',
'引吉,无咎。孚乃利用禴',
'萃如,嗟如,无攸利。往无咎,小吝',
'大吉,无咎',
'萃有位,无咎。匪孚,元永贞,悔亡',
'赍咨涕洟,无咎'
]},
# 上下(地风升)
('坤', '巽'): {
'name': '升',
'text': '元亨。用见大人,勿恤,南征吉',
'lines': [
'允升,大吉',
'孚乃利用禴,无咎',
'升虚邑',
'王用亨于岐山,吉,无咎',
'贞吉,升阶',
'冥升,利于不息之贞'
]},
# 上下(泽水困)
('兑', '坎'): {
'name': '困',
'text': '亨,贞,大人吉,无咎。有言不信',
'lines': [
'臀困于株木,入于幽谷,三岁不见',
'困于洒食,朱绂方来,利用享祀。征凶,无咎',
'困于石,据于疾藜。入于其宫,不见其妻,凶',
'来徐徐,困于金车,吝,有终',
'劓刖,困于赤绂。乃徐,有说,利用祭祀',
'困于葛藟,于臲卼,曰动悔。有悔,征吉'
]},
# 上下(水风井)
('坎', '巽'): {
'name': '井',
'text': '改邑不改井,无丧无得。往来井井。汔至,亦未繘井,羸其瓶,凶',
'lines': [
'井泥不食,旧井无禽',
'井谷射鲋,瓮敝漏',
'井渫不食,为我心恻。可用汲,王明,并受其福',
'井甃,无咎',
'井冽,寒泉食',
'井收勿幕,有孚元吉'
]},
# 上下(泽火革)
('兑', '离'): {
'name': '革',
'text': '己日乃孚。元亨利贞。悔亡',
'lines': [
'巩用黄牛之革',
'己日乃革之。征吉,无咎',
'征凶,贞厉。革言三就,有孚',
'悔亡,有孚,改命,吉',
'大人虎变,未占有孚',
'君子豹变,小人革面。征凶,居贞吉'
]},
# 50上下()
('离', '巽'): {
'name': '鼎',
'text': '元吉,亨',
'lines': [
'鼎颠趾,利出否。得妾以其子,无咎',
'鼎有实,我仇有疾,不我能即,吉',
'鼎耳革,其行塞,雉膏不食。方雨,亏悔,终吉',
'鼎折足,覆公餗,其形渥,凶',
'鼎黄耳金铉,利贞',
'鼎玉铉,大吉,无不利'
]},
# 51上下(震为雷)
('震', '震'): {
'name': '雷',
'text': '亨。震来虩虩,笑言哑哑。震惊百里,不丧匕鬯',
'lines': [
'震来虩虩,后笑言哑哑,吉',
'震来厉,亿丧贝。跻于九陵,勿逐,七日得',
'震苏苏,震行无眚',
'震遂泥',
'震往来厉,亿无丧,有事',
'震索索,视矍矍,征凶。震不于其躬,于其邻,无咎。婚媾有言'
]},
# 上下(艮为山)
('艮', '艮'): {
'name': '山',
'text': '艮其背,不获其身。行其庭,不见其人。无咎',
'lines': [
'艮其趾,无咎。利永贞',
'艮其腓,不拯其随,其心不快',
'艮其限,列其夤,厉薰心',
'艮其身,无咎',
'艮其辅,言有序,悔亡',
'敦艮,吉'
]},
# 上下(风山渐)
('巽', '艮'): {
'name': '渐',
'text': '女归吉,利贞',
'lines': [
'鸿渐于干,小子厉。有言,无咎',
'鸿渐于磐,饮食衎衎,吉',
'鸿渐于陆,夫征不复,妇孕不育,凶。利御寇',
'鸿渐于木,或得其桷,无咎',
'鸿渐于陵,妇三岁不孕,终莫之胜,吉',
'鸿渐于陆,其羽可用为仪,吉'
]},
# 上下(雷泽归妹)
('震', '兑'): {
'name': '归妹',
'text': '征凶,无攸利',
'lines': [
'归妹以娣,跛能履,征吉',
'眇能视,利幽人之贞',
'归妹以须,反归以娣',
'归妹愆期,迟归有时',
'帝乙归妹,其君之袂,不如其娣之袂良。月几望,吉',
'女承筐无实,士刲羊无血,无攸利'
]},
# 55上下(雷火丰)
('震', '离'): {
'name': '丰',
'text': '亨。王假之,勿忧,宜日中',
'lines': [
'归妹以娣,跛能履,征吉',
'丰其蔀,日中见斗。往得疑疾。有孚发若,吉',
'丰其沛,日中见昧。折其右肱,无咎',
'丰其蔀,日中见斗。遇其夷主,吉',
'来章,有庆誉,吉',
'丰其屋,蔀其家,窥其户,阒其无人,三岁不见,凶'
]},
# 56上下(火山旅)
('离', '艮'): {
'name': '旅',
'text': '小亨,旅贞吉',
'lines': [
'旅琐琐,斯其所取灾',
'旅即次,怀其资,得童仆,贞',
'旅焚其次,丧其童仆,贞厉',
'旅于处,得其资斧,我心不快',
'射雉一矢亡,终以誉命',
'鸟焚其巢,旅人先笑后号啕。丧牛于易,凶'
]},
# 上下(巽为风)
('巽', '巽'): {
'name': '风',
'text': '小亨。利有攸往,利见大人',
'lines': [
'进退,利武人之贞',
'巽在床下,用史巫纷若,吉,无咎',
'频巽,吝',
'悔亡,田获三品',
'贞吉,悔亡,无不利。无初有终。先庚三日,后庚三日,吉',
'巽在床下,丧其资斧,贞凶'
]},
# 上下(兑为泽)
('兑', '兑'): {
'name': '泽',
'text': '亨,利,贞',
'lines': [
'和兑,吉',
'孚兑,吉,悔亡',
'来兑,凶',
'商兑,未宁,介疾有喜',
'孚于剥,有厉',
'引兑'
]},
# 59上下(风水涣)
('巽', '坎'): {
'name': '涣',
'text': '亨,王假有庙。利涉大川,利贞',
'lines': [
'用拯马壮,吉',
'涣奔其机,悔亡',
'涣其躬,无悔',
'涣其群,元吉。涣有丘,匪夷所思',
'涣汗其大号,涣王居,无咎',
'涣其血,去逖出,无咎'
]},
# 60上下(水泽节)
('坎', '兑'): {
'name': '节',
'text': '亨,苦节不可贞',
'lines': [
'不出户庭,无咎',
'不出门庭,凶',
'不节若,则嗟若。无咎',
'安节,亨',
'甘节,吉,往有尚',
'苦节,贞凶。悔亡'
]},
# 61上下(风泽中孚)
('巽', '兑'): {
'name': '中孚',
'text': '豚鱼,吉。利涉大川,利贞',
'lines': [
'虞吉,有它不燕',
'鸣鹤在阴,其子和之。我有好爵,吾与尔靡之',
'得敌,或鼓或罢,或泣或歌',
'月既望,马匹亡,无咎',
'有孚挛如,无咎',
'翰音登于天,贞凶'
]},
# 上下(雷山小过)
('震', '艮'): {
'name': '小过',
'text': '亨,利贞。可小事,不可大事。飞鸟遗之音。不宜上,宜下,大吉',
'lines': [
'飞鸟以凶',
'过其祖,遇其妣。不及其君,遇其臣,无咎',
'弗过防之,从或戕之,凶',
'无咎,弗过遇之,往厉必戒。勿用,永贞',
'密云不雨,自我西郊。公弋取彼在穴',
'弗遇过之,飞鸟离之,凶。是谓灾眚'
]},
# 上下(水火既济)
('坎', '离'): {
'name': '既济',
'text': '亨,小利贞,初吉终乱',
'lines': [
'曳其轮,濡其尾,无咎',
'妇丧其茀,勿逐,七日得',
'高宗伐鬼方,三年克之。小人勿用',
'繻有衣袽,终日戒',
'东邻杀牛,不如西郊之禴祭,实受其福',
'濡其首,厉'
]},
# 64上下(火水未济)
('离', '坎'): {
'name': '未济',
'text': '亨,小狐汔济,濡其尾,无攸利',
'lines': [
'濡其尾,吝',
'曳其轮,贞吉',
'未济,征凶,利涉大川',
'贞吉,悔亡,震用伐鬼方。三年有赏于大国',
'贞吉,无悔,君子之光。有孚,吉',
'有孚于饮酒,无咎。濡其首,有孚失是'
]}
}
#下面是代码实现部分(本质上就是随机数)
# 取55根蓍草(55为天地之数),拿掉其中6根,将剩下49根随机分成两份,分别模4得到余数,相加再加1得到一变
# 49减去一变得到的数代入重复这个过程,称为二变,类推得到三变,三变得到的数除以4,得到一爻,即三变得一爻
def yarrow_method():
n = 55 - 5 - 1
for _ in range(3):
a = random.randint(1, n - 1)
b = n - a
b -= 1
r1 = a % 4 or 4
r2 = b % 4 or 4
n = n - 1 - (r1 + r2)
return n // 4
# 六爻得一卦,6/7/8/9分别代表老阴/少阳/少阴/老阳
def generate_hexagram():
hexagram = []
for _ in range(6):
num = yarrow_method()
if num == 6:
hexagram.append("--老阴")
elif num == 7:
hexagram.append("—少阳")
elif num == 8:
hexagram.append("--少阴")
elif num == 9:
hexagram.append("—老阳")
return hexagram
# 根据六爻得到的本卦推出变卦(老阴变阳,老阳变阴)
def generate_changed_hexagram(original):
changed = []
for yao in original:
if "--老阴" in yao:
changed.append("—变阳")
elif "—老阳" in yao:
changed.append("--变阴")
else:
changed.append(yao)
return changed
# 转换本卦变卦信息
def get_hexagram_info(yaos):
# 将爻字符串转换为二进制数值(阴爻0,阳爻1)
def yao_to_binary(yao):
return 0 if '--' in yao else 1
# 提取下卦和上卦的三爻
lower_trigram_bin = tuple(yao_to_binary(yao) for yao in yaos[:3])
upper_trigram_bin = tuple(yao_to_binary(yao) for yao in yaos[3:6])
# 获取八卦名称
lower_trigram = TRIGRAM_MAP.get(lower_trigram_bin, '?')
upper_trigram = TRIGRAM_MAP.get(upper_trigram_bin, '?')
# 获取卦象信息
hexagram_info = HEXAGRAM_DB.get(
(upper_trigram, lower_trigram),
{'name': '某卦', 'text': '', 'lines': [''] * 6}
)
return hexagram_info, lower_trigram, upper_trigram
# 分析本卦信息
def analyze_changes(original):
changes = []
for idx, yao in enumerate(original):
if '老阴' in yao or '老阳' in yao:
changes.append({
'position': idx + 1,
'type': '阴变阳' if '老阴' in yao else '阳变阴',
'original': yao,
'changed': '—变阳' if '老阴' in yao else '--变阴'
})
return changes
# 解卦
def interpret_hexagram(ben_gua, bian_gua):
ben_info, lower, upper = get_hexagram_info(ben_gua)
changes = analyze_changes(ben_gua)
print("\n解卦:")
print(f"本卦卦象:{upper}上{lower}下 {ben_info['name']}卦")
print(f"卦辞:{ben_info['text']}")
# 变爻分析
if len(changes) == 0:
print("无变爻,直接参考本卦卦辞")
else:
print(f"变爻有{len(changes)}:")
for change in changes:
pos = change['position']
if 1 <= pos <= 6 and len(ben_info['lines']) >= pos:
line_text = ben_info['lines'][pos - 1]
print(f"第{pos}爻解:{line_text}")
else:
print(f"第{pos}爻解:无对应爻辞")
if len(changes) > 3:
print("\n多爻变动,观其整体变化趋势")
bian_info, _, _ = get_hexagram_info(bian_gua)
print(f"变卦卦象:{bian_info['name']}卦")
print(f"变卦卦辞:{bian_info['text']}")
# 返回关键数据给主函数
return {
"ben_info": ben_info,
"lower": lower,
"upper": upper,
"changes": changes,
"bian_info": get_hexagram_info(bian_gua)[0]
}
#将结果交给AI分析
def submit_AI(ben_info, upper, lower, changes, bian_info):
question = input("\n请确认你的问题:")
user_input = input("是否跳转到AI分析?(yes/no):").lower()
if user_input != 'yes':
return
driver = None
try:
# 创建浏览器实例
driver = create_safe_driver()
# 页面操作
driver.get("https://kimi.moonshot.cn")
# 定位输入框
input_box = WebDriverWait(driver, 120).until(
EC.presence_of_element_located((By.CSS_SELECTOR, '.chat-input-editor'))
)
# 构造消息
message = ("假设你是一个资深易学专家,请根据以下信息进行解析并简要回答"
f"\n要占卜的问题是:{question}\n"
f"本卦卦象:{upper}上{lower}下 {ben_info['name']}卦\n"
f"本卦卦辞:{ben_info['text']}\n"
f"变爻数量:{len(changes)}条\n"
)
# 添加变爻详情
for change in changes:
pos = change['position']
line_text = ben_info['lines'][pos - 1] if pos <= 6 else "无对应爻辞"
message += f"第{pos}爻变动:{line_text}\n"
# 添加变卦信息
if len(changes) > 0:
message += f"\n变卦卦象:{bian_info['name']}卦\n"
message += f"变卦卦辞:{bian_info['text']}"
# 模拟输入
for line in message.split('\n'):
input_box.send_keys(line)
input_box.send_keys(Keys.SHIFT + Keys.ENTER)
time.sleep(random.uniform(0.1, 0.3))
# 提交查询
input_box.send_keys(Keys.ENTER)
print("问题已提交,等待AI分析...")
except Exception as e:
print(f"自动化操作失败:{str(e)}")
#清栈
def create_safe_driver():
# 生成唯一用户目录
user_dir = f"{tempfile.gettempdir()}/chrome_{uuid.uuid4().hex[:8]}"
# 配置浏览器选项
options = webdriver.ChromeOptions()
options.add_argument(f"--user-data-dir={user_dir}")
options.add_argument("--disable-gpu")
options.add_argument("--no-sandbox")
options.add_experimental_option("detach", True) # 保持窗口打开
# 自动管理驱动版本
service = ChromeService(ChromeDriverManager().install())
try:
return webdriver.Chrome(service=service, options=options)
except SessionNotCreatedException:
print(f"清理残留目录:{user_dir}")
shutil.rmtree(user_dir, ignore_errors=True)
return webdriver.Chrome(service=service, options=options)
#主函数
def main():
question = input("\n你想占卜的问题是:")
# 生成卦象
ben_gua = generate_hexagram()
bian_gua = generate_changed_hexagram(ben_gua)
# 获取解卦结果
interpretation = interpret_hexagram(ben_gua, bian_gua)
# 提取关键变量
ben_info = interpretation['ben_info']