-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCrawlerControlPanel.frm
5195 lines (4765 loc) · 479 KB
/
CrawlerControlPanel.frm
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
VERSION 5.00
Begin {C62A69F0-16DC-11CE-9E98-00AA00574A4F} CrawlerControlPanel
Caption = "Crawler control panel"
ClientHeight = 12144
ClientLeft = 48
ClientTop = 372
ClientWidth = 12168
OleObjectBlob = "CrawlerControlPanel.frx":0000
ShowModal = 0 'False
StartUpPosition = 1 '所有者中心
End
Attribute VB_Name = "CrawlerControlPanel"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'Author: 趙健
'E-mail: [email protected]
'Telephont Number: +86 18604537694
'Date: 歲在丙申
'The codes were enhanced for both VBA7 (64-bit) and others (32-bit) by Long Vh.
#If VBA7 Then
Private Declare PtrSafe Sub sleep Lib "kernel64" Alias "Sleep" (ByVal dwMilliseconds As Long): Rem 64 位軟件使用這條語句聲明
Private Declare PtrSafe Function timeGetTime Lib "winmm.dll" () As Long: Rem 64 位軟件使用這條語句聲明
'聲明 SendMessage 函數,函數 SendMessage 是 Windows 系統 API 函數,使用前必須先聲明,然後才能使用。
Private Declare PtrSafe Function sendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long: Rem 64 位軟件使用這條語句聲明
#Else
Private Declare Sub sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long): Rem 32 位軟件使用這條語句聲明,聲明 sleep 函數,函數 sleep 是 Windows API 函數,使用前,必須先聲明,然後再使用。這條語句是為後面使用 sleep 函數精確延時使用的,如果程序中不使用 sleep 函數,可以刪除這條語句。函數 sleep 的使用方法是,sleep 3000 '3000 表示 3000 毫秒。函數 sleep 延時是毫秒級的,精確度比較高,但它在延時時,會將程序挂起,使操作系統暫時無法響應用戶操作,所以長延時不適合使用。
Private Declare Function timeGetTime Lib "winmm.dll" () As Long: Rem 32 位軟件使用這條語句聲明,聲明 timeGetTime 函數,函數 timeGetTime 是 Windows API 函數,使用前,必須先聲明,然後再使用。這條語句是為後面使用 timeGetTime 函數精確延時使用的,如果程序中不需要使用 timeGetTime 函數也可以刪除這條語句。函數 timeGetTime 返回的是開機到現在的毫秒數,可以支持 1 毫秒的間隔時間,一直增加。
'聲明 SendMessage 函數,函數 SendMessage 是 Windows 系統 API 函數,使用前必須先聲明,然後才能使用。
Private Declare Function sendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long: Rem 32 位軟件使用這條語句聲明,聲明 SendMessage 函數,函數 SendMessage 是 Windows 系統 API 函數,使用前必須先聲明,然後才能使用。
#End If
Private Const WM_SYSCOMMAND = &H112: Rem 聲明函數參數使用的常數值
Private Const SC_MINIMIZE = &HF020&: Rem 聲明函數參數使用的常數值
'使用函數示例
'SendMessage IEA.hwnd, WM_SYSCOMMAND, SC_MINIMIZE, 0: Rem 向瀏覽器窗口發送消息,最小化瀏覽器窗口,這是使用的 Windows 系統的 API 函數,在模塊頭部的幾條語句中聲明過
'如果使用全局變量 public 的方法實現,在用戶窗體裏邊的全局變量賦值方式如下:
Option Explicit: Rem 語句 Option Explicit 表示强制要求變量需要先聲明後使用;聲明全局變量,可以跨越函數和子過程之間使用的,用于監測窗體中按钮控件點擊狀態。
Public PublicCurrentWorkbookName As String: Rem 定義一個全局型(Public)字符串型變量“PublicCurrentWorkbookName”,用於存放當前工作簿的名稱
Public PublicCurrentWorkbookFullName As String: Rem 定義一個全局型(Public)字符串型變量“PublicCurrentWorkbookFullName”,用於存放當前工作簿的全名(工作簿路徑和名稱)
Public PublicCurrentSheetName As String: Rem 定義一個全局型(Public)字符串型變量“PublicCurrentSheetName”,用於存放當前工作表的名稱
Public Public_Browser_Name As String: Rem 表示判斷使用的辨識瀏覽器種類,可以取值:("InternetExplorer", "Edge", "Chrome", "Firefox"),如果空白不傳入該參數,預設值表示使用 "Edge" 瀏覽器加載指定網頁
Public Public_Browser_page_window_object As Object: Rem 定義一個全局型(Public)對象變量(IWebBrowser2),用於存放瀏覽器加載的目標數據源頁面窗口對象的句柄,用於後續操作頁面
Public PublicVariableStartORStopCollectDataButtonClickState As Boolean: Rem 定義一個全局型(Public)布爾型变量“PublicVariableStartORStopCollectDataButtonClickState”用於監測窗體中數據採集按钮控件的點擊狀態,即是否正在進行采集的狀態提示
Public Public_Current_page_number As Integer: Rem 獲取到的載入當前頁碼值的存儲
Public Public_Max_page_number As Integer: Rem 獲取到的允許載入最大頁碼值的存儲
Public Public_Number_of_entrance_from_first_level_page_to_second_level_page As Integer 'Max_Entry_number As Integer: Rem 當前第一層級頁面中,進入對應第二層級頁面的入口元素數目,即獲取到的載入最大條目值的存儲
Public Public_Data_Server_Url As String: Rem 用於存儲采集結果的數據庫服務器網址,字符串變量
Public Public_Data_Receptors As String: Rem 用於存儲采集結果的容器類型複選框值,字符串變量
Public Public_Key_Word As String: Rem 執行關鍵詞檢索動作時,傳入的關鍵詞,字符串變量
Public Public_Start_page_number As Integer: Rem 開始采集的第一層級網頁的頁碼號,短整型變量
Public Public_Start_entry_number As Integer: Rem 開始采集的第二層級網頁的頁碼號,短整型變量
Public Public_End_page_number As Integer: Rem 結束采集的第一層級網頁的頁碼號,短整型變量
Public Public_Data_level As String: Rem 目標數據源網頁層級結構,字符串型變量,取 "1" 值表示只采集當前頁中的數據,取 "2" 表示還需自動進入第二層級頁面讀取數據
Public Public_Delay_length_input As Long: Rem 循環點擊操作之間延遲等待的時長的基礎值,單位毫秒
Public Public_Delay_length_random_input As Single: Rem 循環點擊操作之間延遲等待的時長的隨機化範圍,單位為基礎值的百分比
Public Public_Delay_length As Long: Rem 循環點擊操作之間延遲等待的時長,單位毫秒
'定位目標數據源網頁中各元素的 XPath 值變量
Public Public_Crawler_Strategy_module_name As String: Rem 導入的爬蟲策略模塊的自定義命名值字符串
Public Public_Custom_name_of_data_page As String: Rem 目標數據源網站頁面的自定義標記命名值字符串
Public Public_URL_of_data_page As String: Rem 目標數據源網站頁面的網址 URL 值字符串
Public Public_First_level_page_number_source_xpath As String: Rem 定位“當前第一層級頁面中頁碼信息源元素”的 XPath 值字符串
Public Public_First_level_page_data_source_xpath As String: Rem 定位“當前第一層級頁面中目標數據源元素”的 XPath 值字符串
Public Public_First_level_page_KeyWord_query_textbox_xpath As String: Rem 定位“關鍵詞檢索”輸入框的 XPath 值字符串
Public Public_First_level_page_KeyWord_query_button_xpath As String: Rem 定位“關鍵詞檢索”按鈕的 XPath 值字符串
Public Public_First_level_page_skip_textbox_xpath As String: Rem 定位“跳頁”輸入框的 XPath 值字符串
Public Public_First_level_page_skip_button_xpath As String: Rem 定位“跳頁”按鈕的 XPath 值字符串
Public Public_First_level_page_next_button_xpath As String: Rem 定位“下一頁”按鈕的 XPath 值字符串
Public Public_First_level_page_back_button_xpath As String: Rem 定位“上一頁”按鈕的 XPath 值字符串
Public Public_From_first_level_page_to_second_level_page_xpath As String: Rem 定位“當前第一層級頁面中進入對應的第二層級頁面的入口元素”的 XPath 值字符串
'Public Public_Second_level_page_number_source_xpath As String: Rem 定位“當前第二層級頁面中頁碼信息源元素”的 XPath 值字符串
Public Public_Second_level_page_data_source_xpath As String: Rem 定位“當前第二層級頁面中目標數據源元素”的 XPath 值字符串
Public Public_From_second_level_page_return_first_level_page_xpath As String: Rem 定位“當前第二層級頁面中返回對應的第一層級頁面的入口元素”的 XPath 值字符串
Public Public_Inject_data_page_JavaScript As String: Rem 待插入目標數據源頁面的 JavaScript 脚本字符串
Public Public_Inject_data_page_JavaScript_filePath As String: Rem 待插入目標數據源頁面的 JavaScript 脚本文檔路徑全名
Public Public_First_level_page_number_source_tag_name As String: Rem 定位“當前第一層級頁面中頁碼信息源元素”的標簽名稱值字符串
Public Public_First_level_page_number_source_position_index As Integer: Rem 定位“當前第一層級頁面中頁碼信息源元素”的位置索引整數值
Public Public_First_level_page_data_source_tag_name As String: Rem 定位“當前第一層級頁面中目標數據源元素”的標簽名稱值字符串
Public Public_First_level_page_data_source_position_index As Integer: Rem 定位“當前第一層級頁面中目標數據源元素”的位置索引整數值
Public Public_First_level_page_KeyWord_query_textbox_tag_name As String: Rem 定位“關鍵詞檢索”輸入框的標簽名稱值字符串
Public Public_First_level_page_KeyWord_query_textbox_position_index As Integer: Rem 定位“關鍵詞檢索”輸入框的位置索引整數值
Public Public_First_level_page_KeyWord_query_button_tag_name As String: Rem 定位“關鍵詞檢索”按鈕的標簽名稱值字符串
Public Public_First_level_page_KeyWord_query_button_position_index As Integer: Rem 定位“關鍵詞檢索”按鈕的位置索引整數值
Public Public_First_level_page_skip_textbox_tag_name As String: Rem 定位“跳頁”輸入框的標簽名稱值字符串
Public Public_First_level_page_skip_textbox_position_index As Integer: Rem 定位“跳頁”輸入框的位置索引整數值
Public Public_First_level_page_skip_button_tag_name As String: Rem 定位“跳頁”按鈕的標簽名稱值字符串
Public Public_First_level_page_skip_button_position_index As Integer: Rem 定位“跳頁”按鈕的位置索引整數值
Public Public_First_level_page_next_button_tag_name As String: Rem 定位“下一頁”按鈕的標簽名稱值字符串
Public Public_First_level_page_next_button_position_index As Integer: Rem 定位“下一頁”按鈕的位置索引整數值
Public Public_First_level_page_back_button_tag_name As String: Rem 定位“上一頁”按鈕的標簽名稱值字符串
Public Public_First_level_page_back_button_position_index As Integer: Rem 定位“上一頁”按鈕的位置索引整數值
Public Public_From_first_level_page_to_second_level_page_tag_name As String: Rem 定位“當前第一層級頁面中進入對應的第二層級頁面的入口元素”的標簽名稱值字符串
Public Public_From_first_level_page_to_second_level_page_position_index As Integer: Rem 定位“當前第一層級頁面中進入對應的第二層級頁面的入口元素”的位置索引整數值
'Public Public_Second_level_page_number_source_tag_name As String: Rem 定位“當前第二層級頁面中頁碼信息源元素”的標簽名稱值字符串
'Public Public_Second_level_page_number_source_position_index As Integer: Rem 定位“當前第二層級頁面中頁碼信息源元素”的位置索引整數值
Public Public_Second_level_page_data_source_tag_name As String: Rem 定位“當前第二層級頁面中目標數據源元素”的標簽名稱值字符串
Public Public_Second_level_page_data_source_position_index As Integer: Rem 定位“當前第二層級頁面中目標數據源元素”的位置索引整數值
Public Public_From_second_level_page_return_first_level_page_tag_name As String: Rem 定位“當前第二層級頁面中返回對應的第一層級頁面的入口元素”的標簽名稱值字符串
Public Public_From_second_level_page_return_first_level_page_position_index As Integer: Rem 定位“當前第二層級頁面中返回對應的第一層級頁面的入口元素”的位置索引整數值
Public Sub UserForm_Initialize()
'窗體打開前事件,給窗體控件中的全局變量賦初值,函數 UserForm_Initialize 的作用是窗體控件打開即運行初始化
'語句 On Error Resume Next 會使程序按照產生錯誤的語句之後的語句繼續執行
On Error Resume Next
CrawlerControlPanel.PublicCurrentWorkbookName = ThisWorkbook.name: Rem 獲得當前工作簿的名稱,效果等同於“ = ActiveWorkbook.Name ”
CrawlerControlPanel.PublicCurrentWorkbookFullName = ThisWorkbook.FullName: Rem 獲得當前工作簿的全名(工作簿路徑和名稱)
CrawlerControlPanel.PublicCurrentSheetName = ActiveSheet.name: Rem 獲得當前工作表的名稱
'給監測窗體中數據採集按钮控件的點擊狀態變量賦初值初始化
PublicVariableStartORStopCollectDataButtonClickState = True: Rem 布爾型變量,用於監測窗體中數據採集按钮控件的點擊狀態,即是否正在進行采集的狀態提示
'給當前頁碼信息賦初值初始化
Public_Current_page_number = 0: Rem 獲取到的載入當前頁碼值的存儲
Public_Max_page_number = 0: Rem 獲取到的允許載入最大頁碼值的存儲
Public_Number_of_entrance_from_first_level_page_to_second_level_page = 0 'Max_Entry_number = 0: Rem 當前第一層級頁面中,進入對應第二層級頁面的入口元素數目,即獲取到的載入最大條目值的存儲
Public_Browser_Name = "": Rem 表示判斷使用的辨識瀏覽器種類,可以取值:("InternetExplorer", "Edge", "Chrome", "Firefox"),如果空白不傳入該參數,預設值表示使用 "Edge" 瀏覽器加載指定網頁
'為定位頁面各元素的 XPath 字符串變量賦初值
Public_Crawler_Strategy_module_name = "": Rem 導入的爬蟲策略模塊的自定義命名值字符串(當前所處的模塊名),例如:testCrawlerModule
Public_Custom_name_of_data_page = "": Rem 目標數據源網站的自定義標記命名值字符串,例如:testContainDataWebPage
Public_URL_of_data_page = "": Rem 目標數據源網站頁面的網址 URL 值字符串,例如:http://127.0.0.1:8000/a.html
Public_First_level_page_number_source_xpath = "": Rem 定位“當前第一層級頁面中頁碼信息源元素”的 XPath 值字符串,例如:/html/body/div/centre/label 或針對 InternetExplorer 瀏覽器 byTagName 的方法:0-label
Public_First_level_page_data_source_xpath = "": Rem 定位“當前第一層級頁面中目標數據源元素”的 XPath 值字符串,例如:/html/body/div/centre/div/table 或針對 InternetExplorer 瀏覽器 byTagName 的方法:0-table
Public_First_level_page_KeyWord_query_textbox_xpath = "": Rem 定位“關鍵詞檢索”輸入框的 XPath 值字符串,例如:/html/body/div/centre/input[1] 或針對 InternetExplorer 瀏覽器 byTagName 的方法:0-input
Public_First_level_page_KeyWord_query_button_xpath = "": Rem 定位“關鍵詞檢索”按鈕的 XPath 值字符串,例如:/html/body/div/centre/button[1] 或針對 InternetExplorer 瀏覽器 byTagName 的方法:0-button
Public_First_level_page_skip_textbox_xpath = "": Rem 定位“跳頁”輸入框的 XPath 值字符串,例如:/html/body/div/centre/input[2] 或針對 InternetExplorer 瀏覽器 byTagName 的方法:1-input
Public_First_level_page_skip_button_xpath = "": Rem 定位“跳頁”按鈕的 XPath 值字符串,例如:/html/body/div/centre/button[2] 或針對 InternetExplorer 瀏覽器 byTagName 的方法:1-button
Public_First_level_page_next_button_xpath = "": Rem 定位“下一頁”按鈕的 XPath 值字符串,例如:/html/body/div/centre/a[2] 或針對 InternetExplorer 瀏覽器 byTagName 的方法:1-a
Public_First_level_page_back_button_xpath = "": Rem 定位“上一頁”按鈕的 XPath 值字符串,例如:/html/body/div/centre/a[1] 或針對 InternetExplorer 瀏覽器 byTagName 的方法:0-a
Public_From_first_level_page_to_second_level_page_xpath = "": Rem 定位“當前第一層級頁面中進入對應的第二層級頁面的入口元素”的 XPath 值字符串,例如:/html/body/div/centre/div/table 或針對 InternetExplorer 瀏覽器 byTagName 的方法:0-table
'Public_Second_level_page_number_source_xpath = "": Rem 定位“當前第二層級頁面中頁碼信息源元素”的 XPath 值字符串
Public_Second_level_page_data_source_xpath = "": Rem 定位“當前第二層級頁面中目標數據源元素”的 XPath 值字符串,例如:/html/body/div/centre/div/table 或針對 InternetExplorer 瀏覽器 byTagName 的方法:0-table
Public_From_second_level_page_return_first_level_page_xpath = "": Rem 定位“當前第二層級頁面中返回對應的第一層級頁面的入口元素”的 XPath 值字符串,例如:/html/body/div/centre/a[3] 或針對 InternetExplorer 瀏覽器 byTagName 的方法:2-a
'Public_Inject_data_page_JavaScript = ";window.onbeforeunload = function(event) { event.returnValue = '是否現在就要離開本頁面?'+'///n'+'比如要不要先點擊 < 取消 > 關閉本頁面,在保存一下之後再離開呢?';};function NewFunction() { alert(window.document.getElementsByTagName('html')[0].outerHTML); /* (function(j){})(j) 表示定義了一個,有一個形參(第一個 j )的空匿名函數,然後以第二個 j 為實參進行調用; */;};": Rem 待插入目標數據源頁面的 JavaScript 脚本字符串
Public_Inject_data_page_JavaScript = "": Rem 待插入目標數據源頁面的 JavaScript 脚本字符串
'Public_Inject_data_page_JavaScript_filePath = "C:/Criss/vba/Automatic/test/test_injected.js": Rem 待插入目標數據源頁面的 JavaScript 脚本文檔路徑全名
Public_Inject_data_page_JavaScript_filePath = "": Rem 待插入目標數據源頁面的 JavaScript 脚本文檔路徑全名
'為定位頁面各元素的標簽名稱和位置索引字符串變量賦初值
Public_First_level_page_number_source_tag_name = "": Rem 定位“當前第一層級頁面中頁碼信息源元素”的標簽名稱值字符串
Public_First_level_page_number_source_position_index = CInt(-1): Rem 定位“當前第一層級頁面中頁碼信息源元素”的位置索引整數值
Public_First_level_page_data_source_tag_name = "": Rem 定位“當前第一層級頁面中目標數據源元素”的標簽名稱值字符串
Public_First_level_page_data_source_position_index = CInt(-1): Rem 定位“當前第一層級頁面中目標數據源元素”的位置索引整數值
Public_First_level_page_KeyWord_query_textbox_tag_name = "": Rem 定位“關鍵詞檢索”輸入框的標簽名稱值字符串
Public_First_level_page_KeyWord_query_textbox_position_index = CInt(-1): Rem 定位“關鍵詞檢索”輸入框的位置索引整數值
Public_First_level_page_KeyWord_query_button_tag_name = "": Rem 定位“關鍵詞檢索”按鈕的標簽名稱值字符串
Public_First_level_page_KeyWord_query_button_position_index = CInt(-1): Rem 定位“關鍵詞檢索”按鈕的位置索引整數值
Public_First_level_page_skip_textbox_tag_name = "": Rem 定位“跳頁”輸入框的標簽名稱值字符串
Public_First_level_page_skip_textbox_position_index = CInt(-1): Rem 定位“跳頁”輸入框的位置索引整數值
Public_First_level_page_skip_button_tag_name = "": Rem 定位“跳頁”按鈕的標簽名稱值字符串
Public_First_level_page_skip_button_position_index = CInt(-1): Rem 定位“跳頁”按鈕的位置索引整數值
Public_First_level_page_next_button_tag_name = "": Rem 定位“下一頁”按鈕的標簽名稱值字符串
Public_First_level_page_next_button_position_index = CInt(-1): Rem 定位“下一頁”按鈕的位置索引整數值
Public_First_level_page_back_button_tag_name = "": Rem 定位“上一頁”按鈕的標簽名稱值字符串
Public_First_level_page_back_button_position_index = CInt(-1): Rem 定位“上一頁”按鈕的位置索引整數值
Public_From_first_level_page_to_second_level_page_tag_name = "": Rem 定位“當前第一層級頁面中進入對應的第二層級頁面的入口元素”的標簽名稱值字符串
Public_From_first_level_page_to_second_level_page_position_index = CInt(-1): Rem 定位“當前第一層級頁面中進入對應的第二層級頁面的入口元素”的位置索引整數值
'Public_Second_level_page_number_source_tag_name = "": Rem 定位“當前第二層級頁面中頁碼信息源元素”的標簽名稱值字符串
'Public_Second_level_page_number_source_position_index = CInt(-1): Rem 定位“當前第二層級頁面中頁碼信息源元素”的位置索引整數值
Public_Second_level_page_data_source_tag_name = "": Rem 定位“當前第二層級頁面中目標數據源元素”的標簽名稱值字符串
Public_Second_level_page_data_source_position_index = CInt(-1): Rem 定位“當前第二層級頁面中目標數據源元素”的位置索引整數值
Public_From_second_level_page_return_first_level_page_tag_name = "": Rem 定位“當前第二層級頁面中返回對應的第一層級頁面的入口元素”的標簽名稱值字符串
Public_From_second_level_page_return_first_level_page_position_index = CInt(-1): Rem 定位“當前第二層級頁面中返回對應的第一層級頁面的入口元素”的位置索引整數值
If Public_Browser_Name = "InternetExplorer" Then
''Dim i As Integer: Rem 整型,記錄 for 循環次數變量
'Dim tempArr() As String: Rem 字符串分割之後得到的數組
''定位“當前第一層級頁面中頁碼信息源元素”的標簽名稱值字符串和位置索引整數值
'ReDim tempArr(0): Rem 清空數組
'tempArr = VBA.Split(Public_First_level_page_number_source_xpath, delimiter:="-", limit:=2, compare:=vbBinaryCompare)
''Debug.Print tempArr(LBound(tempArr)) & ", " & tempArr(UBound(tempArr))
'Public_First_level_page_number_source_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“當前第一層級頁面中頁碼信息源元素”的位置索引整數值
'Public_First_level_page_number_source_tag_name = CStr(tempArr(UBound(tempArr))): Rem 定位“當前第一層級頁面中頁碼信息源元素”的標簽名稱值字符串
''tempArr = VBA.Split(Public_First_level_page_number_source_xpath, delimiter:="-")
''Public_First_level_page_number_source_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“當前第一層級頁面中頁碼信息源元素”的位置索引整數值
''Public_First_level_page_number_source_tag_name = "": Rem 定位“當前第一層級頁面中頁碼信息源元素”的標簽名稱值字符串
''For i = CInt(LBound(tempArr) + CInt(1)) To UBound(tempArr)
'' If i = CInt(LBound(tempArr) + CInt(1)) Then
'' Public_First_level_page_number_source_tag_name = Public_First_level_page_number_source_tag_name & CStr(tempArr(i)): Rem 定位“當前第一層級頁面中頁碼信息源元素”的標簽名稱值字符串
'' Else
'' Public_First_level_page_number_source_tag_name = Public_First_level_page_number_source_tag_name & "-" & CStr(tempArr(i)): Rem 定位“當前第一層級頁面中頁碼信息源元素”的標簽名稱值字符串
'' End If
''Next
''Debug.Print Public_First_level_page_number_source_tag_name & ", " & Public_First_level_page_number_source_position_index
''定位“當前第一層級頁面中目標數據源元素”的標簽名稱值字符串和位置索引整數值
'ReDim tempArr(0): Rem 清空數組
'tempArr = VBA.Split(Public_First_level_page_data_source_xpath, delimiter:="-", limit:=2, compare:=vbBinaryCompare)
''Debug.Print tempArr(LBound(tempArr)) & ", " & tempArr(UBound(tempArr))
'Public_First_level_page_data_source_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“當前第一層級頁面中目標數據源元素”的位置索引整數值
'Public_First_level_page_data_source_tag_name = CStr(tempArr(UBound(tempArr))): Rem 定位“當前第一層級頁面中目標數據源元素”的標簽名稱值字符串
''tempArr = VBA.Split(Public_First_level_page_data_source_xpath, delimiter:="-")
''Public_First_level_page_data_source_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“當前第一層級頁面中目標數據源元素”的位置索引整數值
''Public_First_level_page_data_source_tag_name = "": Rem 定位“當前第一層級頁面中目標數據源元素”的標簽名稱值字符串
''For i = CInt(LBound(tempArr) + CInt(1)) To UBound(tempArr)
'' If i = CInt(LBound(tempArr) + CInt(1)) Then
'' Public_First_level_page_data_source_tag_name = Public_First_level_page_data_source_tag_name & CStr(tempArr(i)): Rem 定位“當前第一層級頁面中目標數據源元素”的標簽名稱值字符串
'' Else
'' Public_First_level_page_data_source_tag_name = Public_First_level_page_data_source_tag_name & "-" & CStr(tempArr(i)): Rem 定位“當前第一層級頁面中目標數據源元素”的標簽名稱值字符串
'' End If
''Next
''Debug.Print Public_First_level_page_data_source_tag_name & ", " & Public_First_level_page_data_source_position_index
''定位“關鍵詞檢索”輸入框的標簽名稱值字符串和位置索引整數值
'ReDim tempArr(0): Rem 清空數組
'tempArr = VBA.Split(Public_First_level_page_KeyWord_query_textbox_xpath, delimiter:="-", limit:=2, compare:=vbBinaryCompare)
''Debug.Print tempArr(LBound(tempArr)) & ", " & tempArr(UBound(tempArr))
'Public_First_level_page_KeyWord_query_textbox_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“關鍵詞檢索”輸入框的位置索引整數值
'Public_First_level_page_KeyWord_query_textbox_tag_name = CStr(tempArr(UBound(tempArr))): Rem 定位“關鍵詞檢索”輸入框的標簽名稱值字符串
''tempArr = VBA.Split(Public_First_level_page_KeyWord_query_textbox_xpath, delimiter:="-")
''Public_First_level_page_KeyWord_query_textbox_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“關鍵詞檢索”輸入框的位置索引整數值
''Public_First_level_page_KeyWord_query_textbox_tag_name = "": Rem 定位“關鍵詞檢索”輸入框的標簽名稱值字符串
''For i = CInt(LBound(tempArr) + CInt(1)) To UBound(tempArr)
'' If i = CInt(LBound(tempArr) + CInt(1)) Then
'' Public_First_level_page_KeyWord_query_textbox_tag_name = Public_First_level_page_KeyWord_query_textbox_tag_name & CStr(tempArr(i)): Rem 定位“關鍵詞檢索”輸入框的標簽名稱值字符串
'' Else
'' Public_First_level_page_KeyWord_query_textbox_tag_name = Public_First_level_page_KeyWord_query_textbox_tag_name & "-" & CStr(tempArr(i)): Rem 定位“關鍵詞檢索”輸入框的標簽名稱值字符串
'' End If
''Next
''Debug.Print Public_First_level_page_KeyWord_query_textbox_tag_name & ", " & Public_First_level_page_KeyWord_query_textbox_position_index
''定位“關鍵詞檢索”按鈕的標簽名稱值字符串和位置索引整數值
'ReDim tempArr(0): Rem 清空數組
'tempArr = VBA.Split(Public_First_level_page_KeyWord_query_button_xpath, delimiter:="-", limit:=2, compare:=vbBinaryCompare)
''Debug.Print tempArr(LBound(tempArr)) & ", " & tempArr(UBound(tempArr))
'Public_First_level_page_KeyWord_query_button_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“關鍵詞檢索”按鈕的位置索引整數值
'Public_First_level_page_KeyWord_query_button_tag_name = CStr(tempArr(UBound(tempArr))): Rem 定位“關鍵詞檢索”按鈕的標簽名稱值字符串
''tempArr = VBA.Split(Public_First_level_page_KeyWord_query_button_xpath, delimiter:="-")
''Public_First_level_page_KeyWord_query_button_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“關鍵詞檢索”按鈕的位置索引整數值
''Public_First_level_page_KeyWord_query_button_tag_name = "": Rem 定位“關鍵詞檢索”按鈕的標簽名稱值字符串
''For i = CInt(LBound(tempArr) + CInt(1)) To UBound(tempArr)
'' If i = CInt(LBound(tempArr) + CInt(1)) Then
'' Public_First_level_page_KeyWord_query_button_tag_name = Public_First_level_page_KeyWord_query_button_tag_name & CStr(tempArr(i)): Rem 定位“關鍵詞檢索”按鈕的標簽名稱值字符串
'' Else
'' Public_First_level_page_KeyWord_query_button_tag_name = Public_First_level_page_KeyWord_query_button_tag_name & "-" & CStr(tempArr(i)): Rem 定位“關鍵詞檢索”按鈕的標簽名稱值字符串
'' End If
''Next
''Debug.Print Public_First_level_page_KeyWord_query_button_tag_name & ", " & Public_First_level_page_KeyWord_query_button_position_index
''定位“跳頁”輸入框的標簽名稱值字符串和位置索引整數值
'ReDim tempArr(0): Rem 清空數組
'tempArr = VBA.Split(Public_First_level_page_skip_textbox_xpath, delimiter:="-", limit:=2, compare:=vbBinaryCompare)
''Debug.Print tempArr(LBound(tempArr)) & ", " & tempArr(UBound(tempArr))
'Public_First_level_page_skip_textbox_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“跳頁”輸入框的位置索引整數值
'Public_First_level_page_skip_textbox_tag_name = CStr(tempArr(UBound(tempArr))): Rem 定位“跳頁”輸入框的標簽名稱值字符串
''tempArr = VBA.Split(Public_First_level_page_skip_textbox_xpath, delimiter:="-")
''Public_First_level_page_skip_textbox_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“跳頁”輸入框的位置索引整數值
''Public_First_level_page_skip_textbox_tag_name = "": Rem 定位“跳頁”輸入框的標簽名稱值字符串
''For i = CInt(LBound(tempArr) + CInt(1)) To UBound(tempArr)
'' If i = CInt(LBound(tempArr) + CInt(1)) Then
'' Public_First_level_page_skip_textbox_tag_name = Public_First_level_page_skip_textbox_tag_name & CStr(tempArr(i)): Rem 定位“跳頁”輸入框的標簽名稱值字符串
'' Else
'' Public_First_level_page_skip_textbox_tag_name = Public_First_level_page_skip_textbox_tag_name & "-" & CStr(tempArr(i)): Rem 定位“跳頁”輸入框的標簽名稱值字符串
'' End If
''Next
''Debug.Print Public_First_level_page_skip_textbox_tag_name & ", " & Public_First_level_page_skip_textbox_position_index
''定位“跳頁”按鈕的標簽名稱值字符串和位置索引整數值
'ReDim tempArr(0): Rem 清空數組
'tempArr = VBA.Split(Public_First_level_page_skip_button_xpath, delimiter:="-", limit:=2, compare:=vbBinaryCompare)
''Debug.Print tempArr(LBound(tempArr)) & ", " & tempArr(UBound(tempArr))
'Public_First_level_page_skip_button_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“跳頁”按鈕的位置索引整數值
'Public_First_level_page_skip_button_tag_name = CStr(tempArr(UBound(tempArr))): Rem 定位“跳頁”按鈕的標簽名稱值字符串
''tempArr = VBA.Split(Public_First_level_page_skip_button_xpath, delimiter:="-")
''Public_First_level_page_skip_button_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“跳頁”按鈕的位置索引整數值
''Public_First_level_page_skip_button_tag_name = "": Rem 定位“跳頁”按鈕的標簽名稱值字符串
''For i = CInt(LBound(tempArr) + CInt(1)) To UBound(tempArr)
'' If i = CInt(LBound(tempArr) + CInt(1)) Then
'' Public_First_level_page_skip_button_tag_name = Public_First_level_page_skip_button_tag_name & CStr(tempArr(i)): Rem 定位“跳頁”按鈕的標簽名稱值字符串
'' Else
'' Public_First_level_page_skip_button_tag_name = Public_First_level_page_skip_button_tag_name & "-" & CStr(tempArr(i)): Rem 定位“跳頁”按鈕的標簽名稱值字符串
'' End If
''Next
''Debug.Print Public_First_level_page_skip_button_tag_name & ", " & Public_First_level_page_skip_button_position_index
''定位“下一頁”按鈕的標簽名稱值字符串和位置索引整數值
'ReDim tempArr(0): Rem 清空數組
''tempArr = VBA.Split(Public_First_level_page_next_button_xpath, delimiter:="-")
'tempArr = VBA.Split(Public_First_level_page_next_button_xpath, delimiter:="-", limit:=2, compare:=vbBinaryCompare)
''Debug.Print tempArr(LBound(tempArr)) & ", " & tempArr(UBound(tempArr))
'Public_First_level_page_next_button_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“下一頁”按鈕的位置索引整數值
'Public_First_level_page_next_button_tag_name = CStr(tempArr(UBound(tempArr))): Rem 定位“下一頁”按鈕的標簽名稱值字符串
''tempArr = VBA.Split(Public_First_level_page_next_button_xpath, delimiter:="-")
''Public_First_level_page_next_button_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“下一頁”按鈕的位置索引整數值
''Public_First_level_page_next_button_tag_name = "": Rem 定位“下一頁”按鈕的標簽名稱值字符串
''For i = CInt(LBound(tempArr) + CInt(1)) To UBound(tempArr)
'' If i = CInt(LBound(tempArr) + CInt(1)) Then
'' Public_First_level_page_next_button_tag_name = Public_First_level_page_next_button_tag_name & CStr(tempArr(i)): Rem 定位“下一頁”按鈕的標簽名稱值字符串
'' Else
'' Public_First_level_page_next_button_tag_name = Public_First_level_page_next_button_tag_name & "-" & CStr(tempArr(i)): Rem 定位“下一頁”按鈕的標簽名稱值字符串
'' End If
''Next
''Debug.Print Public_First_level_page_next_button_tag_name & ", " & Public_First_level_page_next_button_position_index
''定位“上一頁”按鈕的標簽名稱值字符串和位置索引整數值
'ReDim tempArr(0): Rem 清空數組
'tempArr = VBA.Split(Public_First_level_page_back_button_xpath, delimiter:="-", limit:=2, compare:=vbBinaryCompare)
''Debug.Print tempArr(LBound(tempArr)) & ", " & tempArr(UBound(tempArr))
'Public_First_level_page_back_button_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“上一頁”按鈕的位置索引整數值
'Public_First_level_page_back_button_tag_name = CStr(tempArr(UBound(tempArr))): Rem 定位“上一頁”按鈕的標簽名稱值字符串
''tempArr = VBA.Split(Public_First_level_page_back_button_xpath, delimiter:="-")
''Public_First_level_page_back_button_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“上一頁”按鈕的位置索引整數值
''Public_First_level_page_back_button_tag_name = "": Rem 定位“上一頁”按鈕的標簽名稱值字符串
''For i = CInt(LBound(tempArr) + CInt(1)) To UBound(tempArr)
'' If i = CInt(LBound(tempArr) + CInt(1)) Then
'' Public_First_level_page_back_button_tag_name = Public_First_level_page_back_button_tag_name & CStr(tempArr(i)): Rem 定位“上一頁”按鈕的標簽名稱值字符串
'' Else
'' Public_First_level_page_back_button_tag_name = Public_First_level_page_back_button_tag_name & "-" & CStr(tempArr(i)): Rem 定位“上一頁”按鈕的標簽名稱值字符串
'' End If
''Next
''Debug.Print Public_First_level_page_back_button_tag_name & ", " & Public_First_level_page_back_button_position_index
''定位“當前第一層級頁面中進入對應的第二層級頁面的入口元素”的標簽名稱值字符串和位置索引整數值
'ReDim tempArr(0): Rem 清空數組
'tempArr = VBA.Split(Public_From_first_level_page_to_second_level_page_xpath, delimiter:="-", limit:=2, compare:=vbBinaryCompare)
''Debug.Print tempArr(LBound(tempArr)) & ", " & tempArr(UBound(tempArr))
'Public_From_first_level_page_to_second_level_page_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“當前第一層級頁面中進入對應的第二層級頁面的入口元素”的位置索引整數值
'Public_From_first_level_page_to_second_level_page_tag_name = CStr(tempArr(UBound(tempArr))): Rem 定位“當前第一層級頁面中進入對應的第二層級頁面的入口元素”的標簽名稱值字符串
''tempArr = VBA.Split(Public_From_first_level_page_to_second_level_page_xpath, delimiter:="-")
''Public_From_first_level_page_to_second_level_page_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“當前第一層級頁面中進入對應的第二層級頁面的入口元素”的位置索引整數值
''Public_From_first_level_page_to_second_level_page_tag_name = "": Rem 定位“當前第一層級頁面中進入對應的第二層級頁面的入口元素”的標簽名稱值字符串
''For i = CInt(LBound(tempArr) + CInt(1)) To UBound(tempArr)
'' If i = CInt(LBound(tempArr) + CInt(1)) Then
'' Public_From_first_level_page_to_second_level_page_tag_name = Public_From_first_level_page_to_second_level_page_tag_name & CStr(tempArr(i)): Rem 定位“當前第一層級頁面中進入對應的第二層級頁面的入口元素”的標簽名稱值字符串
'' Else
'' Public_From_first_level_page_to_second_level_page_tag_name = Public_From_first_level_page_to_second_level_page_tag_name & "-" & CStr(tempArr(i)): Rem 定位“當前第一層級頁面中進入對應的第二層級頁面的入口元素”的標簽名稱值字符串
'' End If
''Next
''Debug.Print Public_From_first_level_page_to_second_level_page_tag_name & ", " & Public_From_first_level_page_to_second_level_page_position_index
'''定位“當前第二層級頁面中頁碼信息源元素”的標簽名稱值字符串和位置索引整數值
''ReDim tempArr(0): Rem 清空數組
''tempArr = VBA.Split(Public_Second_level_page_number_source_xpath, delimiter:="-", limit:=2, compare:=vbBinaryCompare)
'''Debug.Print tempArr(LBound(tempArr)) & ", " & tempArr(UBound(tempArr))
''Public_Second_level_page_number_source_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“當前第二層級頁面中頁碼信息源元素”的位置索引整數值
''Public_Second_level_page_number_source_tag_name = CStr(tempArr(UBound(tempArr))): Rem 定位“當前第二層級頁面中頁碼信息源元素”的標簽名稱值字符串
'''tempArr = VBA.Split(Public_Second_level_page_number_source_xpath, delimiter:="-")
'''Public_Second_level_page_number_source_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“當前第二層級頁面中頁碼信息源元素”的位置索引整數值
'''Public_Second_level_page_number_source_tag_name = "": Rem 定位“當前第二層級頁面中頁碼信息源元素”的標簽名稱值字符串
'''For i = CInt(LBound(tempArr) + CInt(1)) To UBound(tempArr)
''' If i = CInt(LBound(tempArr) + CInt(1)) Then
''' Public_Second_level_page_number_source_tag_name = Public_Second_level_page_number_source_tag_name & CStr(tempArr(i)): Rem 定位“當前第二層級頁面中頁碼信息源元素”的標簽名稱值字符串
''' Else
''' Public_Second_level_page_number_source_tag_name = Public_Second_level_page_number_source_tag_name & "-" & CStr(tempArr(i)): Rem 定位“當前第二層級頁面中頁碼信息源元素”的標簽名稱值字符串
''' End If
'''Next
'''Debug.Print Public_Second_level_page_number_source_tag_name & ", " & Public_Second_level_page_number_source_position_index
''定位“當前第二層級頁面中目標數據源元素”的標簽名稱值字符串和位置索引整數值
'ReDim tempArr(0): Rem 清空數組
'tempArr = VBA.Split(Public_Second_level_page_data_source_xpath, delimiter:="-", limit:=2, compare:=vbBinaryCompare)
''Debug.Print tempArr(LBound(tempArr)) & ", " & tempArr(UBound(tempArr))
'Public_Second_level_page_data_source_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“當前第二層級頁面中目標數據源元素”的位置索引整數值
'Public_Second_level_page_data_source_tag_name = CStr(tempArr(UBound(tempArr))): Rem 定位“當前第二層級頁面中目標數據源元素”的標簽名稱值字符串
''tempArr = VBA.Split(Public_Second_level_page_data_source_xpath, delimiter:="-")
''Public_Second_level_page_data_source_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“當前第二層級頁面中目標數據源元素”的位置索引整數值
''Public_Second_level_page_data_source_tag_name = "": Rem 定位“當前第二層級頁面中目標數據源元素”的標簽名稱值字符串
''For i = CInt(LBound(tempArr) + CInt(1)) To UBound(tempArr)
'' If i = CInt(LBound(tempArr) + CInt(1)) Then
'' Public_Second_level_page_data_source_tag_name = Public_Second_level_page_data_source_tag_name & CStr(tempArr(i)): Rem 定位“當前第二層級頁面中目標數據源元素”的標簽名稱值字符串
'' Else
'' Public_Second_level_page_data_source_tag_name = Public_Second_level_page_data_source_tag_name & "-" & CStr(tempArr(i)): Rem 定位“當前第二層級頁面中目標數據源元素”的標簽名稱值字符串
'' End If
''Next
''Debug.Print Public_Second_level_page_data_source_tag_name & ", " & Public_Second_level_page_data_source_position_index
''定位“當前第二層級頁面中返回對應的第一層級頁面的入口元素”的標簽名稱值字符串和位置索引整數值
'ReDim tempArr(0): Rem 清空數組
'tempArr = VBA.Split(Public_From_second_level_page_return_first_level_page_xpath, delimiter:="-", limit:=2, compare:=vbBinaryCompare)
''Debug.Print tempArr(LBound(tempArr)) & ", " & tempArr(UBound(tempArr))
'Public_From_second_level_page_return_first_level_page_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“當前第二層級頁面中返回對應的第一層級頁面的入口元素”的位置索引整數值
'Public_From_second_level_page_return_first_level_page_tag_name = CStr(tempArr(UBound(tempArr))): Rem 定位“當前第二層級頁面中返回對應的第一層級頁面的入口元素”的標簽名稱值字符串
''tempArr = VBA.Split(Public_From_second_level_page_return_first_level_page_xpath, delimiter:="-")
''Public_From_second_level_page_return_first_level_page_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“當前第二層級頁面中返回對應的第一層級頁面的入口元素”的位置索引整數值
''Public_From_second_level_page_return_first_level_page_tag_name = "": Rem 定位“當前第二層級頁面中返回對應的第一層級頁面的入口元素”的標簽名稱值字符串
''For i = CInt(LBound(tempArr) + CInt(1)) To UBound(tempArr)
'' If i = CInt(LBound(tempArr) + CInt(1)) Then
'' Public_From_second_level_page_return_first_level_page_tag_name = Public_From_second_level_page_return_first_level_page_tag_name & CStr(tempArr(i)): Rem 定位“當前第二層級頁面中返回對應的第一層級頁面的入口元素”的標簽名稱值字符串
'' Else
'' Public_From_second_level_page_return_first_level_page_tag_name = Public_From_second_level_page_return_first_level_page_tag_name & "-" & CStr(tempArr(i)): Rem 定位“當前第二層級頁面中返回對應的第一層級頁面的入口元素”的標簽名稱值字符串
'' End If
''Next
''Debug.Print Public_From_second_level_page_return_first_level_page_tag_name & ", " & Public_From_second_level_page_return_first_level_page_position_index
End If
'為定位頁面各元素的 XPath 字符串變量賦初值
'Public_Custom_name_of_data_page = "": Rem 目標數據源網站的自定義標記命名值字符串
'If Not (CrawlerControlPanel.Controls("Custom_name_of_data_page_TextBox") Is Nothing) Then
' 'Public_Custom_name_of_data_page = CStr(CrawlerControlPanel.Controls("Custom_name_of_data_page_TextBox").Value): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
' Public_Custom_name_of_data_page = CStr(CrawlerControlPanel.Controls("Custom_name_of_data_page_TextBox").Text): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
'End If
'Public_URL_of_data_page = "": Rem 目標數據源網站頁面的網址 URL 值字符串
'If Not (CrawlerControlPanel.Controls("URL_of_data_page_TextBox") Is Nothing) Then
' 'Public_URL_of_data_page = CStr(CrawlerControlPanel.Controls("URL_of_data_page_TextBox").Value): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
' Public_URL_of_data_page = CStr(CrawlerControlPanel.Controls("URL_of_data_page_TextBox").Text): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
'End If
'Public_First_level_page_number_source_xpath = "": Rem 定位“當前第一層級頁面中頁碼信息源元素”的 XPath 值字符串
'If Not (CrawlerControlPanel.Controls("First_level_page_number_source_xpath_TextBox") Is Nothing) Then
' 'Public_First_level_page_number_source_xpath = CStr(CrawlerControlPanel.Controls("First_level_page_number_source_xpath_TextBox").Value): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
' Public_First_level_page_number_source_xpath = CStr(CrawlerControlPanel.Controls("First_level_page_number_source_xpath_TextBox").Text): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
' 'If Public_Browser_Name = "InternetExplorer" Then
' ' '定位“當前第一層級頁面中頁碼信息源元素”的標簽名稱值字符串和位置索引整數值
' ' ReDim tempArr(0): Rem 清空數組
' ' tempArr = VBA.Split(Public_First_level_page_number_source_xpath, delimiter:="-", limit:=2, compare:=vbBinaryCompare)
' ' 'Debug.Print tempArr(LBound(tempArr)) & ", " & tempArr(UBound(tempArr))
' ' Public_First_level_page_number_source_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“當前第一層級頁面中頁碼信息源元素”的位置索引整數值
' ' Public_First_level_page_number_source_tag_name = CStr(tempArr(UBound(tempArr))): Rem 定位“當前第一層級頁面中頁碼信息源元素”的標簽名稱值字符串
' ' 'tempArr = VBA.Split(Public_First_level_page_number_source_xpath, delimiter:="-")
' ' 'Public_First_level_page_number_source_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“當前第一層級頁面中頁碼信息源元素”的位置索引整數值
' ' 'Public_First_level_page_number_source_tag_name = "": Rem 定位“當前第一層級頁面中頁碼信息源元素”的標簽名稱值字符串
' ' 'For i = CInt(LBound(tempArr) + CInt(1)) To UBound(tempArr)
' ' ' If i = CInt(LBound(tempArr) + CInt(1)) Then
' ' ' Public_First_level_page_number_source_tag_name = Public_First_level_page_number_source_tag_name & CStr(tempArr(i)): Rem 定位“當前第一層級頁面中頁碼信息源元素”的標簽名稱值字符串
' ' ' Else
' ' ' Public_First_level_page_number_source_tag_name = Public_First_level_page_number_source_tag_name & "-" & CStr(tempArr(i)): Rem 定位“當前第一層級頁面中頁碼信息源元素”的標簽名稱值字符串
' ' ' End If
' ' 'Next
' ' 'Debug.Print Public_First_level_page_number_source_tag_name & ", " & Public_First_level_page_number_source_position_index
' 'End If
'End If
'Public_First_level_page_data_source_xpath = "": Rem 定位“當前第一層級頁面中目標數據源元素”的 XPath 值字符串
'If Not (CrawlerControlPanel.Controls("First_level_page_data_source_xpath_TextBox") Is Nothing) Then
' 'Public_First_level_page_data_source_xpath = CStr(CrawlerControlPanel.Controls("First_level_page_data_source_xpath_TextBox").Value): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
' Public_First_level_page_data_source_xpath = CStr(CrawlerControlPanel.Controls("First_level_page_data_source_xpath_TextBox").Text): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
' 'If Public_Browser_Name = "InternetExplorer" Then
' ' '定位“當前第一層級頁面中目標數據源元素”的標簽名稱值字符串和位置索引整數值
' ' ReDim tempArr(0): Rem 清空數組
' ' tempArr = VBA.Split(Public_First_level_page_data_source_xpath, delimiter:="-", limit:=2, compare:=vbBinaryCompare)
' ' 'Debug.Print tempArr(LBound(tempArr)) & ", " & tempArr(UBound(tempArr))
' ' Public_First_level_page_data_source_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“當前第一層級頁面中目標數據源元素”的位置索引整數值
' ' Public_First_level_page_data_source_tag_name = CStr(tempArr(UBound(tempArr))): Rem 定位“當前第一層級頁面中目標數據源元素”的標簽名稱值字符串
' ' 'tempArr = VBA.Split(Public_First_level_page_data_source_xpath, delimiter:="-")
' ' 'Public_First_level_page_data_source_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“當前第一層級頁面中目標數據源元素”的位置索引整數值
' ' 'Public_First_level_page_data_source_tag_name = "": Rem 定位“當前第一層級頁面中目標數據源元素”的標簽名稱值字符串
' ' 'For i = CInt(LBound(tempArr) + CInt(1)) To UBound(tempArr)
' ' ' If i = CInt(LBound(tempArr) + CInt(1)) Then
' ' ' Public_First_level_page_data_source_tag_name = Public_First_level_page_data_source_tag_name & CStr(tempArr(i)): Rem 定位“當前第一層級頁面中目標數據源元素”的標簽名稱值字符串
' ' ' Else
' ' ' Public_First_level_page_data_source_tag_name = Public_First_level_page_data_source_tag_name & "-" & CStr(tempArr(i)): Rem 定位“當前第一層級頁面中目標數據源元素”的標簽名稱值字符串
' ' ' End If
' ' 'Next
' ' 'Debug.Print Public_First_level_page_data_source_tag_name & ", " & Public_First_level_page_data_source_position_index
' 'End If
'End If
'Public_First_level_page_KeyWord_query_textbox_xpath = "": Rem 定位“關鍵詞檢索”輸入框的 XPath 值字符串
'If Not (CrawlerControlPanel.Controls("First_level_page_key_word_query_textbox_xpath_TextBox") Is Nothing) Then
' 'Public_First_level_page_KeyWord_query_textbox_xpath = CStr(CrawlerControlPanel.Controls("First_level_page_key_word_query_textbox_xpath_TextBox").Value): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
' Public_First_level_page_KeyWord_query_textbox_xpath = CStr(CrawlerControlPanel.Controls("First_level_page_key_word_query_textbox_xpath_TextBox").Text): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
' 'If Public_Browser_Name = "InternetExplorer" Then
' ' '定位“關鍵詞檢索”輸入框的標簽名稱值字符串和位置索引整數值
' ' ReDim tempArr(0): Rem 清空數組
' ' tempArr = VBA.Split(Public_First_level_page_KeyWord_query_textbox_xpath, delimiter:="-", limit:=2, compare:=vbBinaryCompare)
' ' 'Debug.Print tempArr(LBound(tempArr)) & ", " & tempArr(UBound(tempArr))
' ' Public_First_level_page_KeyWord_query_textbox_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“關鍵詞檢索”輸入框的位置索引整數值
' ' Public_First_level_page_KeyWord_query_textbox_tag_name = CStr(tempArr(UBound(tempArr))): Rem 定位“關鍵詞檢索”輸入框的標簽名稱值字符串
' ' 'tempArr = VBA.Split(Public_First_level_page_KeyWord_query_textbox_xpath, delimiter:="-")
' ' 'Public_First_level_page_KeyWord_query_textbox_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“關鍵詞檢索”輸入框的位置索引整數值
' ' 'Public_First_level_page_KeyWord_query_textbox_tag_name = "": Rem 定位“關鍵詞檢索”輸入框的標簽名稱值字符串
' ' 'For i = CInt(LBound(tempArr) + CInt(1)) To UBound(tempArr)
' ' ' If i = CInt(LBound(tempArr) + CInt(1)) Then
' ' ' Public_First_level_page_KeyWord_query_textbox_tag_name = Public_First_level_page_KeyWord_query_textbox_tag_name & CStr(tempArr(i)): Rem 定位“關鍵詞檢索”輸入框的標簽名稱值字符串
' ' ' Else
' ' ' Public_First_level_page_KeyWord_query_textbox_tag_name = Public_First_level_page_KeyWord_query_textbox_tag_name & "-" & CStr(tempArr(i)): Rem 定位“關鍵詞檢索”輸入框的標簽名稱值字符串
' ' ' End If
' ' 'Next
' ' 'Debug.Print Public_First_level_page_KeyWord_query_textbox_tag_name & ", " & Public_First_level_page_KeyWord_query_textbox_position_index
' 'End If
'End If
'Public_First_level_page_KeyWord_query_button_xpath = "": Rem 定位“關鍵詞檢索”按鈕的 XPath 值字符串
'If Not (CrawlerControlPanel.Controls("First_level_page_key_word_query_button_xpath_TextBox") Is Nothing) Then
' 'Public_First_level_page_KeyWord_query_button_xpath = CStr(CrawlerControlPanel.Controls("First_level_page_key_word_query_button_xpath_TextBox").Value): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
' Public_First_level_page_KeyWord_query_button_xpath = CStr(CrawlerControlPanel.Controls("First_level_page_key_word_query_button_xpath_TextBox").Text): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
' 'If Public_Browser_Name = "InternetExplorer" Then
' ' '定位“關鍵詞檢索”按鈕的標簽名稱值字符串和位置索引整數值
' ' ReDim tempArr(0): Rem 清空數組
' ' tempArr = VBA.Split(Public_First_level_page_KeyWord_query_button_xpath, delimiter:="-", limit:=2, compare:=vbBinaryCompare)
' ' 'Debug.Print tempArr(LBound(tempArr)) & ", " & tempArr(UBound(tempArr))
' ' Public_First_level_page_KeyWord_query_button_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“關鍵詞檢索”按鈕的位置索引整數值
' ' Public_First_level_page_KeyWord_query_button_tag_name = CStr(tempArr(UBound(tempArr))): Rem 定位“關鍵詞檢索”按鈕的標簽名稱值字符串
' ' 'tempArr = VBA.Split(Public_First_level_page_KeyWord_query_button_xpath, delimiter:="-")
' ' 'Public_First_level_page_KeyWord_query_button_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“關鍵詞檢索”按鈕的位置索引整數值
' ' 'Public_First_level_page_KeyWord_query_button_tag_name = "": Rem 定位“關鍵詞檢索”按鈕的標簽名稱值字符串
' ' 'For i = CInt(LBound(tempArr) + CInt(1)) To UBound(tempArr)
' ' ' If i = CInt(LBound(tempArr) + CInt(1)) Then
' ' ' Public_First_level_page_KeyWord_query_button_tag_name = Public_First_level_page_KeyWord_query_button_tag_name & CStr(tempArr(i)): Rem 定位“關鍵詞檢索”按鈕的標簽名稱值字符串
' ' ' Else
' ' ' Public_First_level_page_KeyWord_query_button_tag_name = Public_First_level_page_KeyWord_query_button_tag_name & "-" & CStr(tempArr(i)): Rem 定位“關鍵詞檢索”按鈕的標簽名稱值字符串
' ' ' End If
' ' 'Next
' ' 'Debug.Print Public_First_level_page_KeyWord_query_button_tag_name & ", " & Public_First_level_page_KeyWord_query_button_position_index
' 'End If
'End If
'Public_First_level_page_skip_textbox_xpath = "": Rem 定位“跳頁”輸入框的 XPath 值字符串
'If Not (CrawlerControlPanel.Controls("First_level_page_skip_textbox_xpath_TextBox") Is Nothing) Then
' 'Public_First_level_page_skip_textbox_xpath = CStr(CrawlerControlPanel.Controls("First_level_page_skip_textbox_xpath_TextBox").Value): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
' Public_First_level_page_skip_textbox_xpath = CStr(CrawlerControlPanel.Controls("First_level_page_skip_textbox_xpath_TextBox").Text): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
' 'If Public_Browser_Name = "InternetExplorer" Then
' ' '定位“跳頁”輸入框的標簽名稱值字符串和位置索引整數值
' ' ReDim tempArr(0): Rem 清空數組
' ' tempArr = VBA.Split(Public_First_level_page_skip_textbox_xpath, delimiter:="-", limit:=2, compare:=vbBinaryCompare)
' ' 'Debug.Print tempArr(LBound(tempArr)) & ", " & tempArr(UBound(tempArr))
' ' Public_First_level_page_skip_textbox_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“跳頁”輸入框的位置索引整數值
' ' Public_First_level_page_skip_textbox_tag_name = CStr(tempArr(UBound(tempArr))): Rem 定位“跳頁”輸入框的標簽名稱值字符串
' ' 'tempArr = VBA.Split(Public_First_level_page_skip_textbox_xpath, delimiter:="-")
' ' 'Public_First_level_page_skip_textbox_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“跳頁”輸入框的位置索引整數值
' ' 'Public_First_level_page_skip_textbox_tag_name = "": Rem 定位“跳頁”輸入框的標簽名稱值字符串
' ' 'For i = CInt(LBound(tempArr) + CInt(1)) To UBound(tempArr)
' ' ' If i = CInt(LBound(tempArr) + CInt(1)) Then
' ' ' Public_First_level_page_skip_textbox_tag_name = Public_First_level_page_skip_textbox_tag_name & CStr(tempArr(i)): Rem 定位“跳頁”輸入框的標簽名稱值字符串
' ' ' Else
' ' ' Public_First_level_page_skip_textbox_tag_name = Public_First_level_page_skip_textbox_tag_name & "-" & CStr(tempArr(i)): Rem 定位“跳頁”輸入框的標簽名稱值字符串
' ' ' End If
' ' 'Next
' ' 'Debug.Print Public_First_level_page_skip_textbox_tag_name & ", " & Public_First_level_page_skip_textbox_position_index
' 'End If
'End If
'Public_First_level_page_skip_button_xpath = "": Rem 定位“跳頁”按鈕的 XPath 值字符串
'If Not (CrawlerControlPanel.Controls("First_level_page_skip_button_xpath_TextBox") Is Nothing) Then
' 'Public_First_level_page_skip_button_xpath = CStr(CrawlerControlPanel.Controls("First_level_page_skip_button_xpath_TextBox").Value): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
' Public_First_level_page_skip_button_xpath = CStr(CrawlerControlPanel.Controls("First_level_page_skip_button_xpath_TextBox").Text): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
' 'If Public_Browser_Name = "InternetExplorer" Then
' ' '定位“跳頁”按鈕的標簽名稱值字符串和位置索引整數值
' ' ReDim tempArr(0): Rem 清空數組
' ' tempArr = VBA.Split(Public_First_level_page_skip_button_xpath, delimiter:="-", limit:=2, compare:=vbBinaryCompare)
' ' 'Debug.Print tempArr(LBound(tempArr)) & ", " & tempArr(UBound(tempArr))
' ' Public_First_level_page_skip_button_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“跳頁”按鈕的位置索引整數值
' ' Public_First_level_page_skip_button_tag_name = CStr(tempArr(UBound(tempArr))): Rem 定位“跳頁”按鈕的標簽名稱值字符串
' ' 'tempArr = VBA.Split(Public_First_level_page_skip_button_xpath, delimiter:="-")
' ' 'Public_First_level_page_skip_button_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“跳頁”按鈕的位置索引整數值
' ' 'Public_First_level_page_skip_button_tag_name = "": Rem 定位“跳頁”按鈕的標簽名稱值字符串
' ' 'For i = CInt(LBound(tempArr) + CInt(1)) To UBound(tempArr)
' ' ' If i = CInt(LBound(tempArr) + CInt(1)) Then
' ' ' Public_First_level_page_skip_button_tag_name = Public_First_level_page_skip_button_tag_name & CStr(tempArr(i)): Rem 定位“跳頁”按鈕的標簽名稱值字符串
' ' ' Else
' ' ' Public_First_level_page_skip_button_tag_name = Public_First_level_page_skip_button_tag_name & "-" & CStr(tempArr(i)): Rem 定位“跳頁”按鈕的標簽名稱值字符串
' ' ' End If
' ' 'Next
' ' 'Debug.Print Public_First_level_page_skip_button_tag_name & ", " & Public_First_level_page_skip_button_position_index
' 'End If
'End If
'Public_First_level_page_next_button_xpath = "": Rem 定位“下一頁”按鈕的 XPath 值字符串
'If Not (CrawlerControlPanel.Controls("First_level_page_next_button_xpath_TextBox") Is Nothing) Then
' 'Public_First_level_page_next_button_xpath = CStr(CrawlerControlPanel.Controls("First_level_page_next_button_xpath_TextBox").Value): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
' Public_First_level_page_next_button_xpath = CStr(CrawlerControlPanel.Controls("First_level_page_next_button_xpath_TextBox").Text): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
' 'If Public_Browser_Name = "InternetExplorer" Then
' ' '定位“下一頁”按鈕的標簽名稱值字符串和位置索引整數值
' ' ReDim tempArr(0): Rem 清空數組
' ' 'tempArr = VBA.Split(Public_First_level_page_next_button_xpath, delimiter:="-")
' ' tempArr = VBA.Split(Public_First_level_page_next_button_xpath, delimiter:="-", limit:=2, compare:=vbBinaryCompare)
' ' 'Debug.Print tempArr(LBound(tempArr)) & ", " & tempArr(UBound(tempArr))
' ' Public_First_level_page_next_button_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“下一頁”按鈕的位置索引整數值
' ' Public_First_level_page_next_button_tag_name = CStr(tempArr(UBound(tempArr))): Rem 定位“下一頁”按鈕的標簽名稱值字符串
' ' 'tempArr = VBA.Split(Public_First_level_page_next_button_xpath, delimiter:="-")
' ' 'Public_First_level_page_next_button_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“下一頁”按鈕的位置索引整數值
' ' 'Public_First_level_page_next_button_tag_name = "": Rem 定位“下一頁”按鈕的標簽名稱值字符串
' ' 'For i = CInt(LBound(tempArr) + CInt(1)) To UBound(tempArr)
' ' ' If i = CInt(LBound(tempArr) + CInt(1)) Then
' ' ' Public_First_level_page_next_button_tag_name = Public_First_level_page_next_button_tag_name & CStr(tempArr(i)): Rem 定位“下一頁”按鈕的標簽名稱值字符串
' ' ' Else
' ' ' Public_First_level_page_next_button_tag_name = Public_First_level_page_next_button_tag_name & "-" & CStr(tempArr(i)): Rem 定位“下一頁”按鈕的標簽名稱值字符串
' ' ' End If
' ' 'Next
' ' 'Debug.Print Public_First_level_page_next_button_tag_name & ", " & Public_First_level_page_next_button_position_index
' 'End If
'End If
'Public_First_level_page_back_button_xpath = "": Rem 定位“上一頁”按鈕的 XPath 值字符串
'If Not (CrawlerControlPanel.Controls("First_level_page_back_button_xpath_TextBox") Is Nothing) Then
' 'Public_First_level_page_back_button_xpath = CStr(CrawlerControlPanel.Controls("First_level_page_back_button_xpath_TextBox").Value): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
' Public_First_level_page_back_button_xpath = CStr(CrawlerControlPanel.Controls("First_level_page_back_button_xpath_TextBox").Text): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
' 'If Public_Browser_Name = "InternetExplorer" Then
' ' '定位“上一頁”按鈕的標簽名稱值字符串和位置索引整數值
' ' ReDim tempArr(0): Rem 清空數組
' ' tempArr = VBA.Split(Public_First_level_page_back_button_xpath, delimiter:="-", limit:=2, compare:=vbBinaryCompare)
' ' 'Debug.Print tempArr(LBound(tempArr)) & ", " & tempArr(UBound(tempArr))
' ' Public_First_level_page_back_button_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“上一頁”按鈕的位置索引整數值
' ' Public_First_level_page_back_button_tag_name = CStr(tempArr(UBound(tempArr))): Rem 定位“上一頁”按鈕的標簽名稱值字符串
' ' 'tempArr = VBA.Split(Public_First_level_page_back_button_xpath, delimiter:="-")
' ' 'Public_First_level_page_back_button_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“上一頁”按鈕的位置索引整數值
' ' 'Public_First_level_page_back_button_tag_name = "": Rem 定位“上一頁”按鈕的標簽名稱值字符串
' ' 'For i = CInt(LBound(tempArr) + CInt(1)) To UBound(tempArr)
' ' ' If i = CInt(LBound(tempArr) + CInt(1)) Then
' ' ' Public_First_level_page_back_button_tag_name = Public_First_level_page_back_button_tag_name & CStr(tempArr(i)): Rem 定位“上一頁”按鈕的標簽名稱值字符串
' ' ' Else
' ' ' Public_First_level_page_back_button_tag_name = Public_First_level_page_back_button_tag_name & "-" & CStr(tempArr(i)): Rem 定位“上一頁”按鈕的標簽名稱值字符串
' ' ' End If
' ' 'Next
' ' 'Debug.Print Public_First_level_page_back_button_tag_name & ", " & Public_First_level_page_back_button_position_index
' 'End If
'End If
'Public_From_first_level_page_to_second_level_page_xpath = "": Rem 定位“當前第一層級頁面中進入對應的第二層級頁面的入口元素”的 XPath 值字符串
'If Not (CrawlerControlPanel.Controls("From_first_level_page_to_second_level_page_xpath_TextBox") Is Nothing) Then
' 'Public_From_first_level_page_to_second_level_page_xpath = CStr(CrawlerControlPanel.Controls("From_first_level_page_to_second_level_page_xpath_TextBox").Value): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
' Public_From_first_level_page_to_second_level_page_xpath = CStr(CrawlerControlPanel.Controls("From_first_level_page_to_second_level_page_xpath_TextBox").Text): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
' 'If Public_Browser_Name = "InternetExplorer" Then
' ' '定位“當前第一層級頁面中進入對應的第二層級頁面的入口元素”的標簽名稱值字符串和位置索引整數值
' ' ReDim tempArr(0): Rem 清空數組
' ' tempArr = VBA.Split(Public_From_first_level_page_to_second_level_page_xpath, delimiter:="-", limit:=2, compare:=vbBinaryCompare)
' ' 'Debug.Print tempArr(LBound(tempArr)) & ", " & tempArr(UBound(tempArr))
' ' Public_From_first_level_page_to_second_level_page_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“當前第一層級頁面中進入對應的第二層級頁面的入口元素”的位置索引整數值
' ' Public_From_first_level_page_to_second_level_page_tag_name = CStr(tempArr(UBound(tempArr))): Rem 定位“當前第一層級頁面中進入對應的第二層級頁面的入口元素”的標簽名稱值字符串
' ' 'tempArr = VBA.Split(Public_From_first_level_page_to_second_level_page_xpath, delimiter:="-")
' ' 'Public_From_first_level_page_to_second_level_page_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“當前第一層級頁面中進入對應的第二層級頁面的入口元素”的位置索引整數值
' ' 'Public_From_first_level_page_to_second_level_page_tag_name = "": Rem 定位“當前第一層級頁面中進入對應的第二層級頁面的入口元素”的標簽名稱值字符串
' ' 'For i = CInt(LBound(tempArr) + CInt(1)) To UBound(tempArr)
' ' ' If i = CInt(LBound(tempArr) + CInt(1)) Then
' ' ' Public_From_first_level_page_to_second_level_page_tag_name = Public_From_first_level_page_to_second_level_page_tag_name & CStr(tempArr(i)): Rem 定位“當前第一層級頁面中進入對應的第二層級頁面的入口元素”的標簽名稱值字符串
' ' ' Else
' ' ' Public_From_first_level_page_to_second_level_page_tag_name = Public_From_first_level_page_to_second_level_page_tag_name & "-" & CStr(tempArr(i)): Rem 定位“當前第一層級頁面中進入對應的第二層級頁面的入口元素”的標簽名稱值字符串
' ' ' End If
' ' 'Next
' ' 'Debug.Print Public_From_first_level_page_to_second_level_page_tag_name & ", " & Public_From_first_level_page_to_second_level_page_position_index
' 'End If
'End If
''Public_Second_level_page_number_source_xpath = "": Rem 定位“當前第二層級頁面中頁碼信息源元素”的 XPath 值字符串
''If Not (CrawlerControlPanel.Controls("Second_level_page_number_source_xpath_TextBox") Is Nothing) Then
'' 'Public_Second_level_page_number_source_xpath = CStr(CrawlerControlPanel.Controls("Second_level_page_number_source_xpath_TextBox").Value): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
'' Public_Second_level_page_number_source_xpath = CStr(CrawlerControlPanel.Controls("Second_level_page_number_source_xpath_TextBox").Text): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
'' 'If Public_Browser_Name = "InternetExplorer" Then
'' ' '定位“當前第二層級頁面中頁碼信息源元素”的標簽名稱值字符串和位置索引整數值
'' ' ReDim tempArr(0): Rem 清空數組
'' ' tempArr = VBA.Split(Public_Second_level_page_number_source_xpath, delimiter:="-", limit:=2, compare:=vbBinaryCompare)
'' ' 'Debug.Print tempArr(LBound(tempArr)) & ", " & tempArr(UBound(tempArr))
'' ' Public_Second_level_page_number_source_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“當前第二層級頁面中頁碼信息源元素”的位置索引整數值
'' ' Public_Second_level_page_number_source_tag_name = CStr(tempArr(UBound(tempArr))): Rem 定位“當前第二層級頁面中頁碼信息源元素”的標簽名稱值字符串
'' ' 'tempArr = VBA.Split(Public_Second_level_page_number_source_xpath, delimiter:="-")
'' ' 'Public_Second_level_page_number_source_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“當前第二層級頁面中頁碼信息源元素”的位置索引整數值
'' ' 'Public_Second_level_page_number_source_tag_name = "": Rem 定位“當前第二層級頁面中頁碼信息源元素”的標簽名稱值字符串
'' ' 'For i = CInt(LBound(tempArr) + CInt(1)) To UBound(tempArr)
'' ' ' If i = CInt(LBound(tempArr) + CInt(1)) Then
'' ' ' Public_Second_level_page_number_source_tag_name = Public_Second_level_page_number_source_tag_name & CStr(tempArr(i)): Rem 定位“當前第二層級頁面中頁碼信息源元素”的標簽名稱值字符串
'' ' ' Else
'' ' ' Public_Second_level_page_number_source_tag_name = Public_Second_level_page_number_source_tag_name & "-" & CStr(tempArr(i)): Rem 定位“當前第二層級頁面中頁碼信息源元素”的標簽名稱值字符串
'' ' ' End If
'' ' 'Next
'' ' 'Debug.Print Public_Second_level_page_number_source_tag_name & ", " & Public_Second_level_page_number_source_position_index
'' 'End If
''End If
'Public_Second_level_page_data_source_xpath = "": Rem 定位“當前第二層級頁面中目標數據源元素”的 XPath 值字符串
'If Not (CrawlerControlPanel.Controls("Second_level_page_data_source_xpath_TextBox") Is Nothing) Then
' 'Public_Second_level_page_data_source_xpath = CStr(CrawlerControlPanel.Controls("Second_level_page_data_source_xpath_TextBox").Value): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
' Public_Second_level_page_data_source_xpath = CStr(CrawlerControlPanel.Controls("Second_level_page_data_source_xpath_TextBox").Text): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
' 'If Public_Browser_Name = "InternetExplorer" Then
' ' '定位“當前第二層級頁面中目標數據源元素”的標簽名稱值字符串和位置索引整數值
' ' ReDim tempArr(0): Rem 清空數組
' ' tempArr = VBA.Split(Public_Second_level_page_data_source_xpath, delimiter:="-", limit:=2, compare:=vbBinaryCompare)
' ' 'Debug.Print tempArr(LBound(tempArr)) & ", " & tempArr(UBound(tempArr))
' ' Public_Second_level_page_data_source_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“當前第二層級頁面中目標數據源元素”的位置索引整數值
' ' Public_Second_level_page_data_source_tag_name = CStr(tempArr(UBound(tempArr))): Rem 定位“當前第二層級頁面中目標數據源元素”的標簽名稱值字符串
' ' 'tempArr = VBA.Split(Public_Second_level_page_data_source_xpath, delimiter:="-")
' ' 'Public_Second_level_page_data_source_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“當前第二層級頁面中目標數據源元素”的位置索引整數值
' ' 'Public_Second_level_page_data_source_tag_name = "": Rem 定位“當前第二層級頁面中目標數據源元素”的標簽名稱值字符串
' ' 'For i = CInt(LBound(tempArr) + CInt(1)) To UBound(tempArr)
' ' ' If i = CInt(LBound(tempArr) + CInt(1)) Then
' ' ' Public_Second_level_page_data_source_tag_name = Public_Second_level_page_data_source_tag_name & CStr(tempArr(i)): Rem 定位“當前第二層級頁面中目標數據源元素”的標簽名稱值字符串
' ' ' Else
' ' ' Public_Second_level_page_data_source_tag_name = Public_Second_level_page_data_source_tag_name & "-" & CStr(tempArr(i)): Rem 定位“當前第二層級頁面中目標數據源元素”的標簽名稱值字符串
' ' ' End If
' ' 'Next
' ' 'Debug.Print Public_Second_level_page_data_source_tag_name & ", " & Public_Second_level_page_data_source_position_index
' 'End If
'End If
'Public_From_second_level_page_return_first_level_page_xpath = "": Rem 定位“當前第二層級頁面中返回對應的第一層級頁面的入口元素”的 XPath 值字符串
'If Not (CrawlerControlPanel.Controls("From_second_level_page_return_first_level_page_xpath_TextBox") Is Nothing) Then
' 'Public_From_second_level_page_return_first_level_page_xpath = CStr(CrawlerControlPanel.Controls("From_second_level_page_return_first_level_page_xpath_TextBox").Value): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
' Public_From_second_level_page_return_first_level_page_xpath = CStr(CrawlerControlPanel.Controls("From_second_level_page_return_first_level_page_xpath_TextBox").Text): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
' 'If Public_Browser_Name = "InternetExplorer" Then
' ' '定位“當前第二層級頁面中返回對應的第一層級頁面的入口元素”的標簽名稱值字符串和位置索引整數值
' ' ReDim tempArr(0): Rem 清空數組
' ' tempArr = VBA.Split(Public_From_second_level_page_return_first_level_page_xpath, delimiter:="-", limit:=2, compare:=vbBinaryCompare)
' ' 'Debug.Print tempArr(LBound(tempArr)) & ", " & tempArr(UBound(tempArr))
' ' Public_From_second_level_page_return_first_level_page_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“當前第二層級頁面中返回對應的第一層級頁面的入口元素”的位置索引整數值
' ' Public_From_second_level_page_return_first_level_page_tag_name = CStr(tempArr(UBound(tempArr))): Rem 定位“當前第二層級頁面中返回對應的第一層級頁面的入口元素”的標簽名稱值字符串
' ' 'tempArr = VBA.Split(Public_From_second_level_page_return_first_level_page_xpath, delimiter:="-")
' ' 'Public_From_second_level_page_return_first_level_page_position_index = CInt(tempArr(LBound(tempArr))): Rem 定位“當前第二層級頁面中返回對應的第一層級頁面的入口元素”的位置索引整數值
' ' 'Public_From_second_level_page_return_first_level_page_tag_name = "": Rem 定位“當前第二層級頁面中返回對應的第一層級頁面的入口元素”的標簽名稱值字符串
' ' 'For i = CInt(LBound(tempArr) + CInt(1)) To UBound(tempArr)
' ' ' If i = CInt(LBound(tempArr) + CInt(1)) Then
' ' ' Public_From_second_level_page_return_first_level_page_tag_name = Public_From_second_level_page_return_first_level_page_tag_name & CStr(tempArr(i)): Rem 定位“當前第二層級頁面中返回對應的第一層級頁面的入口元素”的標簽名稱值字符串
' ' ' Else
' ' ' Public_From_second_level_page_return_first_level_page_tag_name = Public_From_second_level_page_return_first_level_page_tag_name & "-" & CStr(tempArr(i)): Rem 定位“當前第二層級頁面中返回對應的第一層級頁面的入口元素”的標簽名稱值字符串
' ' ' End If
' ' 'Next
' ' 'Debug.Print Public_From_second_level_page_return_first_level_page_tag_name & ", " & Public_From_second_level_page_return_first_level_page_position_index
' 'End If
'End If
''Public_Inject_data_page_JavaScript = ";window.onbeforeunload = function(event) { event.returnValue = '是否現在就要離開本頁面?'+'///n'+'比如要不要先點擊 < 取消 > 關閉本頁面,在保存一下之後再離開呢?';};function NewFunction() { alert(window.document.getElementsByTagName('html')[0].outerHTML); /* (function(j){})(j) 表示定義了一個,有一個形參(第一個 j )的空匿名函數,然後以第二個 j 為實參進行調用; */;};": Rem 待插入目標數據源頁面的 JavaScript 脚本字符串
'Public_Inject_data_page_JavaScript = "": Rem 待插入目標數據源頁面的 JavaScript 脚本字符串
''If Not (CrawlerControlPanel.Controls("Inject_data_page_JavaScript_TextBox") Is Nothing) Then
'' 'Public_Inject_data_page_JavaScript = CStr(CrawlerControlPanel.Controls("Inject_data_page_JavaScript_TextBox").Value): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
'' Public_Inject_data_page_JavaScript = CStr(CrawlerControlPanel.Controls("Inject_data_page_JavaScript_TextBox").Text): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
''End If
''Public_Inject_data_page_JavaScript_filePath = "C:/Criss/vba/Automatic/test/test_injected.js": Rem 待插入目標數據源頁面的 JavaScript 脚本文檔路徑全名
'Public_Inject_data_page_JavaScript_filePath = "": Rem 待插入目標數據源頁面的 JavaScript 脚本文檔路徑全名
'If Not (CrawlerControlPanel.Controls("Inject_data_page_JavaScript_TextBox") Is Nothing) Then
' 'Public_Inject_data_page_JavaScript_filePath = CStr(CrawlerControlPanel.Controls("Inject_data_page_JavaScript_TextBox").Value): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
' Public_Inject_data_page_JavaScript_filePath = CStr(CrawlerControlPanel.Controls("Inject_data_page_JavaScript_TextBox").Text): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
' 'Debug.Print Public_Inject_data_page_JavaScript_filePath
'End If
'If Public_Inject_data_page_JavaScript_filePath <> "" Then
' '判斷自定義的待插入目標數據源頁面的 JavaScript 脚本文檔是否存在
' Dim fso As Object, sFile As Object
' Set fso = CreateObject("Scripting.FileSystemObject")
' If fso.Fileexists(Public_Inject_data_page_JavaScript_filePath) Then
' 'Debug.Print "Inject_data_page_JavaScript source file: " & Public_Inject_data_page_JavaScript_filePath
' '使用 OpenTextFile 方法打開一個指定的文檔並返回一個 TextStream 對象,該對象可以對文檔進行讀操作或追加寫入操作
' '函數語法:object.OpenTextFile(filename[,iomode[,create[,format]]])
' '參數 filename 為目標文檔的路徑全名字符串
' '參數 iomode 表示輸入和輸出方式,可以為兩個常數之一:ForReading、ForAppending
' '參數 Create 表示如果指定的 filename 不存在時,是否可以新創建一個新文檔,為 Boolean 值,若創建新文檔取 True 值,不創建則取 False 值,預設為 False 值
' '參數 Format 為三種 Tristate 值之一,預設為以 ASCII 格式打開文檔
' '設置打開文檔參數常量
' Const ForReading = 1: Rem 打開一個只讀文檔,不能對文檔進行寫操作
' Const ForWriting = 2: Rem 打開一個可讀可寫操作的文檔,注意,會清空刪除文檔中原有的内容
' Const ForAppending = 8: Rem 打開一個可寫操作的文檔,並將指針移動到文檔的末尾,執行在文檔尾部追加寫入操作,不會刪除文檔中原有的内容
' Const TristateUseDefault = -2: Rem 使用系統缺省的編碼方式打開文檔
' Const TristateTrue = -1: Rem 以 Unicode 編碼的方式打開文檔
' Const TristateFalse = 0: Rem 以 ASCII 編碼的方式打開文檔,注意,漢字會亂碼
' '以只讀方式打開文檔
' Set sFile = fso.OpenTextFile(Public_Inject_data_page_JavaScript_filePath, ForReading, False, TristateUseDefault)
' ''判斷如果不是文檔文本的尾端,則持續讀取數據拼接
' 'Public_Inject_data_page_JavaScript = ""
' 'Do While Not sFile.AtEndOfStream
' ' Public_Inject_data_page_JavaScript = Public_Inject_data_page_JavaScript & sFile.ReadLine & Chr(13): Rem 從打開的文檔中讀取一行字符串拼接,並在字符串結尾加上一個回車符號
' ' 'Debug.Print sFile.ReadLine: Rem 讀取一行,不包括行尾的換行符
' 'Loop
' 'Do While Not sFile.AtEndOfStream
' ' Public_Inject_data_page_JavaScript = Public_Inject_data_page_JavaScript & sFile.Read(1): Rem 從打開的文檔中讀取一個字符拼接
' ' 'Debug.Print sFile.Read(1): Rem 讀取一個字符
' 'Loop
' Public_Inject_data_page_JavaScript = sFile.ReadAll: Rem 讀取文檔中的全部數據
' 'Debug.Print sFile.ReadAll
' 'Debug.Print Public_Inject_data_page_JavaScript
' 'Public_Inject_data_page_JavaScript = StrConv(Public_Inject_data_page_JavaScript, vbUnicode, &H804): Rem 將 Unicode 編碼的字符串轉換爲 GBK 編碼。當解析響應值顯示亂碼時,就可以通過使用 StrConv 函數將字符串編碼轉換爲自定義指定的 GBK 編碼,這樣就會顯示簡體中文,&H804:GBK,&H404:big5。
' 'Debug.Print Public_Inject_data_page_JavaScript
' sFile.Close
' Else
' Debug.Print "Inject_data_page_JavaScript ( " & Public_Inject_data_page_JavaScript_filePath & " ) error, Source file is Nothing."
' 'MsgBox "Inject_data_page_JavaScript ( " & Public_Inject_data_page_JavaScript_filePath & " ) error, Source file is Nothing."
' End If
' Set sFile = Nothing
' Set fso = Nothing
'End If
Public_Data_Server_Url = "": Rem 用於存儲采集結果的數據庫服務器網址,字符串變量,例如:CStr("http://username:password@localhost:9001/?keyword=aaa")
'If Not (CrawlerControlPanel.Controls("Data_Server_Url_TextBox") Is Nothing) Then
' 'Public_Data_Server_Url = CStr(CrawlerControlPanel.Controls("Data_Server_Url_TextBox").Value): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
' Public_Data_Server_Url = CStr(CrawlerControlPanel.Controls("Data_Server_Url_TextBox").Text): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
'End If
Public_Data_Receptors = "": Rem 用於存儲采集結果的容器類型複選框值,字符串變量,可取 "Database","Database_and_Excel","Excel" 值,例如取值:CStr("Excel")
'判斷子框架控件是否存在
If Not (CrawlerControlPanel.Controls("Data_Receptors_Frame") Is Nothing) Then
Public_Data_Receptors = ""
'遍歷框架中包含的子元素。
Dim element_i
For Each element_i In Data_Receptors_Frame.Controls
'判斷複選框控件的選中狀態
If element_i.Value Then
If Public_Data_Receptors = "" Then
Public_Data_Receptors = CStr(element_i.Caption): Rem 從複選框張提取值,結果為字符串型。函數 CStr() 表示轉換爲字符串類型。
Else
Public_Data_Receptors = Public_Data_Receptors & "_and_" & CStr(element_i.Caption): Rem 從複選框張提取值,結果為字符串型。函數 CStr() 表示轉換爲字符串類型。
End If
End If
Next
Set element_i = Nothing
'If (CrawlerControlPanel.Controls("Data_Receptors_CheckBox1").Value) And (Not (CrawlerControlPanel.Controls("Data_Receptors_CheckBox2").Value)) Then
' Public_Data_Receptors = CStr(CrawlerControlPanel.Controls("Data_Receptors_CheckBox1").Caption): Rem 從複選框張提取值,結果為字符串型。函數 CStr() 表示轉換爲字符串類型。
'ElseIf (CrawlerControlPanel.Controls("Data_Receptors_CheckBox1").Value) And (CrawlerControlPanel.Controls("Data_Receptors_CheckBox2").Value) Then
' Public_Data_Receptors = CStr(CrawlerControlPanel.Controls("Data_Receptors_CheckBox1").Caption) & "_and_" & CStr(CrawlerControlPanel.Controls("Data_Receptors_CheckBox2").Caption): Rem 從複選框張提取值,結果為字符串型。函數 CStr() 表示轉換爲字符串類型。
'ElseIf (Not (CrawlerControlPanel.Controls("Data_Receptors_CheckBox1").Value)) And (CrawlerControlPanel.Controls("Data_Receptors_CheckBox2").Value) Then
' Public_Data_Receptors = CStr(CrawlerControlPanel.Controls("Data_Receptors_CheckBox2").Caption): Rem 從複選框張提取值,結果為字符串型。函數 CStr() 表示轉換爲字符串類型。
'ElseIf (Not (CrawlerControlPanel.Controls("Data_Receptors_CheckBox1").Value)) And (Not (CrawlerControlPanel.Controls("Data_Receptors_CheckBox2").Value)) Then
' Public_Data_Receptors = ""
'Else
'End If
End If
Public_Key_Word = "": Rem 執行關鍵詞檢索動作時,傳入的關鍵詞,字符串變量
'If Not (CrawlerControlPanel.Controls("Keyword_Query_TextBox") Is Nothing) Then
' 'Public_Key_Word = CStr(CrawlerControlPanel.Controls("Keyword_Query_TextBox").Value): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
' Public_Key_Word = CStr(CrawlerControlPanel.Controls("Keyword_Query_TextBox").Text): Rem 從文本輸入框控件中提取值,結果為字符串型。函數 CStr() 表示强制轉換為字符串型
'End If
Public_Start_page_number = CInt(0): Rem 開始采集的第一層級網頁的頁碼號,短整型變量,函數 CInt() 表示强制轉換為短整型
'If Not (CrawlerControlPanel.Controls("Start_page_number_TextBox") Is Nothing) Then
' 'Public_Start_page_number = CInt(CrawlerControlPanel.Controls("Start_page_number_TextBox").Value): Rem 從文本輸入框控件中提取值,結果為短整型變量,函數 CInt() 表示强制轉換為短整型
' Public_Start_page_number = CInt(CrawlerControlPanel.Controls("Start_page_number_TextBox").Text): Rem 從文本輸入框控件中提取值,結果爲短整型變量,函數 CInt() 表示强制轉換為短整型
'End If
Public_Start_entry_number = CInt(0): Rem 開始采集的第二層級網頁的頁碼號,短整型變量,函數 CInt() 表示强制轉換為短整型
'If Not (CrawlerControlPanel.Controls("Start_entry_number_TextBox") Is Nothing) Then
' 'Public_Start_entry_number = CInt(CrawlerControlPanel.Controls("Start_entry_number_TextBox").Value): Rem 從文本輸入框控件中提取值,結果為短整型變量,函數 CInt() 表示强制轉換為短整型
' Public_Start_entry_number = CInt(CrawlerControlPanel.Controls("Start_entry_number_TextBox").Text): Rem 從文本輸入框控件中提取值,結果爲短整型變量,函數 CInt() 表示强制轉換為短整型
'End If
Public_End_page_number = CInt(0): Rem 結束采集的第一層級網頁的頁碼號,短整型變量,函數 CInt() 表示强制轉換為短整型
'If Not (CrawlerControlPanel.Controls("End_page_number_TextBox") Is Nothing) Then
' 'Public_End_page_number = CInt(CrawlerControlPanel.Controls("End_page_number_TextBox").Value): Rem 從文本輸入框控件中提取值,結果為短整型變量,函數 CInt() 表示强制轉換為短整型
' Public_End_page_number = CInt(CrawlerControlPanel.Controls("End_page_number_TextBox").Text): Rem 從文本輸入框控件中提取值,結果爲短整型變量,函數 CInt() 表示强制轉換為短整型
'End If
Public_Delay_length_input = CLng(0): Rem 人爲延時等待時長基礎值,單位毫秒。函數 CLng() 表示强制轉換為長整型,例如取值:CLng(1500)
Public_Delay_length_random_input = CSng(0): Rem 人爲延時等待時長隨機波動範圍,單位為基礎值的百分比。函數 CSng() 表示强制轉換為單精度浮點型,例如取值:CSng(0.2)
'If Not (CrawlerControlPanel.Controls("Delay_input_TextBox") Is Nothing) Then
' 'Public_delay_length_input = CLng(CrawlerControlPanel.Controls("Delay_input_TextBox").Value): Rem 從文本輸入框控件中提取值,結果為長整型。
' Public_Delay_length_input = CLng(CrawlerControlPanel.Controls("Delay_input_TextBox").Text): Rem 從文本輸入框控件中提取值,結果為長整型。
'End If
'If Not (CrawlerControlPanel.Controls("Delay_random_input_TextBox") Is Nothing) Then
' 'Public_delay_length_random_input = CSng(CrawlerControlPanel.Controls("Delay_random_input_TextBox").Value): Rem 從文本輸入框控件中提取值,結果為單精度浮點型。
' Public_Delay_length_random_input = CSng(CrawlerControlPanel.Controls("Delay_random_input_TextBox").Text): Rem 從文本輸入框控件中提取值,結果為單精度浮點型。
'End If
'Randomize: Rem 函數 Randomize 表示生成一個隨機數種子(seed)
Public_Delay_length = CLng(0) 'CLng((CLng(Public_Delay_length_input * (1 + Public_Delay_length_random_input)) - Public_Delay_length_input + 1) * Rnd() + Public_Delay_length_input): Rem Int((upperbound - lowerbound + 1) * rnd() + lowerbound),函數 Rnd() 表示生成 [0,1) 的隨機數。
'Public_Delay_length = CLng(0) 'CLng(Int((CLng(Public_Delay_length_input * (1 + Public_Delay_length_random_input)) - Public_Delay_length_input + 1) * Rnd() + Public_Delay_length_input)): Rem Int((upperbound - lowerbound + 1) * rnd() + lowerbound),函數 Rnd() 表示生成 [0,1) 的隨機數。
Public_Data_level = "0": Rem 目標數據源網頁層級結構,字符串型變量,取 "1" 值表示只采集當前頁中的數據,取 "2" 表示還需自動進入第二層級頁面讀取數據。函數 CStr() 表示轉換爲字符串類型,例如取值:CStr(2)
'判斷子框架控件是否存在
If Not (CrawlerControlPanel.Controls("Data_level_Frame") Is Nothing) Then
'遍歷框架中包含的子元素。
'Dim element_i
For Each element_i In Data_level_Frame.Controls
'判斷單選框控件的選中狀態
If element_i.Value Then
Public_Data_level = CStr(element_i.Caption): Rem 從單選框張提取值,結果為字符串型。函數 CStr() 表示轉換爲字符串類型。
Exit For
End If
Next
Set element_i = Nothing
End If
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
'窗體關閉前事件(鼠標左鍵單擊右上角×號)。
'參數 Cancel 為 > 0 的值時,表示禁止關閉動作的發生。即不允許用戶點擊窗體右上角的 × 號,也不允許使用“控制”菜單中的“關閉”命令。
'參數 CloseMode 表示關閉的模式。
On Error Resume Next: Rem 當程序報錯時,跳過報錯的語句,繼續執行下一條語句。
If Public_Browser_Name = "InternetExplorer" Then
'If CloseMode = 0 Then Cancel = 1: Rem 不允許關閉窗體,或寫成 cancel=true 這樣的形式也可以,取 true 值時值為 1。
Public_Browser_page_window_object.quit: Rem 關閉 IE 瀏覽器窗口
'Public_Browser_page_window_object.document.parentwindow.execscript "javascript:window.opener=null;window.open('','_self');window.close();": Rem 關閉 IE 瀏覽器窗口
Set Public_Browser_page_window_object = Nothing: Rem 清空變量釋放内存
ElseIf (Public_Browser_Name = "Edge") Or (Public_Browser_Name = "Chrome") Or (Public_Browser_Name = "Firefox") Then
Public_Browser_page_window_object.quit: Rem 關閉 Edge 瀏覽器窗口
Set Public_Browser_page_window_object = Nothing: Rem 清空變量釋放内存
Else
End If
End Sub
'VBA Base64 編碼函數:
Function Base64Encode(StrA As String) As String
On Error GoTo over
Dim buf() As Byte, Length As Long, mods As Long
Dim Str() As Byte
Dim i, kk As Integer
kk = Len(StrA) - 1
ReDim Str(kk)
For i = 0 To kk
Str(i) = Asc(Mid(StrA, i + 1, 1))
Next i
Const B64_CHAR_DICT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
mods = (UBound(Str) + 1) Mod 3
Length = UBound(Str) + 1 - mods
ReDim buf(Length / 3 * 4 + IIf(mods <> 0, 4, 0) - 1)
For i = 0 To Length - 1 Step 3
buf(i / 3 * 4) = (Str(i) And &HFC) / &H4
buf(i / 3 * 4 + 1) = (Str(i) And &H3) * &H10 + (Str(i + 1) And &HF0) / &H10
buf(i / 3 * 4 + 2) = (Str(i + 1) And &HF) * &H4 + (Str(i + 2) And &HC0) / &H40
buf(i / 3 * 4 + 3) = Str(i + 2) And &H3F
Next
If mods = 1 Then
buf(Length / 3 * 4) = (Str(Length) And &HFC) / &H4
buf(Length / 3 * 4 + 1) = (Str(Length) And &H3) * &H10
buf(Length / 3 * 4 + 2) = 64
buf(Length / 3 * 4 + 3) = 64
ElseIf mods = 2 Then
buf(Length / 3 * 4) = (Str(Length) And &HFC) / &H4
buf(Length / 3 * 4 + 1) = (Str(Length) And &H3) * &H10 + (Str(Length + 1) And &HF0) / &H10
buf(Length / 3 * 4 + 2) = (Str(Length + 1) And &HF) * &H4
buf(Length / 3 * 4 + 3) = 64
End If
For i = 0 To UBound(buf)
Base64Encode = Base64Encode + Mid(B64_CHAR_DICT, buf(i) + 1, 1)
Next
over:
End Function
'VBA Base64 解碼函數:
Function Base64Decode(B64 As String) As String
On Error GoTo over
Dim OutStr() As Byte, i As Long, j As Long
Const B64_CHAR_DICT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
If InStr(1, B64, "=") <> 0 Then B64 = left(B64, InStr(1, B64, "=") - 1)
Dim kk, Length As Long, mods As Long
mods = Len(B64) Mod 4
Length = Len(B64) - mods
ReDim OutStr(Length / 4 * 3 - 1 + Switch(mods = 0, 0, mods = 2, 1, mods = 3, 2))
For i = 1 To Length Step 4
Dim buf(3) As Byte
For j = 0 To 3
buf(j) = InStr(1, B64_CHAR_DICT, Mid(B64, i + j, 1)) - 1
Next
OutStr((i - 1) / 4 * 3) = buf(0) * &H4 + (buf(1) And &H30) / &H10
OutStr((i - 1) / 4 * 3 + 1) = (buf(1) And &HF) * &H10 + (buf(2) And &H3C) / &H4
OutStr((i - 1) / 4 * 3 + 2) = (buf(2) And &H3) * &H40 + buf(3)
Next
If mods = 2 Then
OutStr(Length / 4 * 3) = (InStr(1, B64_CHAR_DICT, Mid(B64, Length + 1, 1)) - 1) * &H4 + ((InStr(1, B64_CHAR_DICT, Mid(B64, Length + 2, 1)) - 1) And &H30) / 16
ElseIf mods = 3 Then
OutStr(Length / 4 * 3) = (InStr(1, B64_CHAR_DICT, Mid(B64, Length + 1, 1)) - 1) * &H4 + ((InStr(1, B64_CHAR_DICT, Mid(B64, Length + 2, 1)) - 1) And &H30) / 16
OutStr(Length / 4 * 3 + 1) = ((InStr(1, B64_CHAR_DICT, Mid(B64, Length + 2, 1)) - 1) And &HF) * &H10 + ((InStr(1, B64_CHAR_DICT, Mid(B64, Length + 3, 1)) - 1) And &H3C) / &H4
End If
For i = 0 To UBound(OutStr)
Base64Decode = Base64Decode & Chr(OutStr(i))
Next i
over:
End Function
Public Sub delay(T As Long): Rem 創建一個自定義精確延時子過程,用於後面需要延時功能時直接調用。用法為:delay(T);“T”就是要延時的時長,單位是毫秒,取值最大範圍是長整型 Long 變量(雙字,4 字節)的最大值,這個值的範圍在 0 到 2^32 之間,大約爲 49.71 日。關鍵字 Private 表示子過程作用域只在本模塊有效,關鍵字 Public 表示子過程作用域在所有模塊都有效
On Error Resume Next: Rem 當程序報錯時,跳過報錯的語句,繼續執行下一條語句。
Dim time1 As Long
time1 = timeGetTime: Rem 函數 timeGetTime 表示系統時間,該時間為從系統開啓算起所經過的時間(單位毫秒),持續纍加記錄。
Do
If Not (CrawlerControlPanel.Controls("Delay_realtime_prompt_Label") Is Nothing) Then
If timeGetTime - time1 < T Then
CrawlerControlPanel.Controls("Delay_realtime_prompt_Label").Caption = "延時等待 [ " & CStr(timeGetTime - time1) & " ] 毫秒": Rem 刷新提示標簽,顯示人爲延時等待的時間長度,單位毫秒。
End If
If timeGetTime - time1 >= T Then
CrawlerControlPanel.Controls("Delay_realtime_prompt_Label").Caption = "延時等待 [ 0 ] 毫秒": Rem 刷新提示標簽,顯示人爲延時等待的時間長度,單位毫秒。
End If
End If
DoEvents: Rem 語句 DoEvents 表示交出系統 CPU 控制權還給操作系統,也就是在此循環階段,用戶可以同時操作電腦的其它應用,而不是將程序挂起直到循環結束。
Loop While timeGetTime - time1 < T
If Not (CrawlerControlPanel.Controls("Delay_realtime_prompt_Label") Is Nothing) Then
If timeGetTime - time1 < T Then