Code - Copy ô dữ liệu rồi Paste vào ô Form trong trang Web (cơ quan) để cập nhật

Liên hệ QC
Tham gia
14/9/12
Bài viết
312
Được thích
68
Nghề nghiệp
VT
Code - Copy ô dữ liệu rồi Paste vào ô Form trong trang Web để cập nhật

Các anh chi cho em hỏi: AC nào có đoạn code để copy giá trị (1 vài ô liền kề) trong bảng excel thuộc 1 dòng, rồi paste vào một số ô trong trang Web của cơ quan (trang Web đã được đăng nhập) và bấm OK để cập nhật. Xong, lại tiếp tục lặp lại với trường hợp khác. Em tìm mãi mà không thấy dạng đó. Em đang tìm hiểu về VBA nên khi thử ghi Macro thì không liên kết được sang trang Web đó. Xin các ac chỉ giúp. Xin cảm ơn các ac ạ.
 
Lần chỉnh sửa cuối:
vấn đề này khá khó . Không phải khó ở khâu viết code , mà khó ở đoạn test , web cơ quan thì chỉ có bạn mới có tài khoản chứ người khác làm gì có để thử . Nói chung thì các trang web tiếng Việt hầu hết là khá dễ chơi , nhưng bạn có ý định cho cộng đồng biết đấy là trang nào không ?
 
Dạ vấn đề này em sẽ cấp được cho anh ạ. Trang đó là 113.185.0.64. Và đây là file dữ liệu
 

File đính kèm

  • DKTT.xlsx
    22.2 KB · Đọc: 38
Lần chỉnh sửa cuối:
Dạ vấn đề này em sẽ cấp được cho anh ạ. Mật khẩu có giá trị trong 24h, do đó em sẽ cấp lại cho anh test.

vậy thì bạn cầu trời cho tôi trong vòng 24h đủ sáng suốt để nghĩ ra cách giải đi . Nhưng mà trong 24h đó ngủ nghỉ với ăn nhậu là hết gần 20 tiếng rồi đó ....
 
.............làm ơn xóa giùm em bài này thừa, nội dung em đã ghi lên bài trên cho tiện theo dõi rồi .........
 
Lần chỉnh sửa cuối:
..........................
 
Lần chỉnh sửa cuối:
...................................
 
Lần chỉnh sửa cuối:

à tôi có xem rồi , đây là việc liên quan giữa khách hàng với nhà cung cấp , nên bảo mật cũng khá căng .
Tôi đang thử cách không xài trình duyệt trước đã , không êm mới chuyển sang cách điểu khiển trình duyệt sau , có thể là Chrome , hoặc IE , mà nếu khó quá thì nghỉ luôn , trao kiếm lại cho vị anh hùng khác -+*/-+*/
 
tác giả trang web viễn thông này không biết vô tình hay cố ý để lộ ra 1 lỗ hổng quá đắng :
không cần gõ mã captcha vẫn đăng kí được .
Như thế gần như chắc chắn không cần mở trình duyệt vẫn đăng kí được .
Ngày mai tôi rà soát lại lần cuối trước khi đưa code lên .
 
Vẫn còn thắc mắc : đăng kí xong thì xem chi tiết ở đâu ?
thí dụ làm sao biết thuê bao mang số 0123456789 đã đăng kí với tên gì ? số CMND bao nhiêu ? địa chỉ ?
 
........................
 
Lần chỉnh sửa cuối:
Làm thủ công không nhập không đăng ký được anh ạ.
Dạ cái này xem trên 10.149.34.168/ccbs ạ. Và cái này phải có mạng nội bộ mới vào được

Bạn vào mạng nội bộ để dò xem có số nào đuôi ****2838 đăng kí vào ngày 09/07/2016 không ? nếu có thì bạn tự hiểu rồi đó .
 
Bạn vào mạng nội bộ để dò xem có số nào đuôi ****2838 đăng kí vào ngày 09/07/2016 không ? .
Nội dung này được xem trong trang nội bộ và đây là kết quả ạ
Ngày thực hiệnMã DVThao tácGhi chúNgười dùngMSIN cũMSIN mớiTỉnh cũTỉnh mới
09/07/2016 23:29:41USSDMosys
09/07/2016 23:29:41USSDMo[SPS]sysHNM
09/07/2016 23:29:40OC Mo[SPS] Thue bao da dang ky thong tinsysHNM
09/07/2016 23:29:40OC MoThue bao da dang ky thong tinsysHNM
OK rồi anh. Nhưng vì em chưa tác động lên số đó về phần cứng lên nó chưa hiện tất cả các thông tin lên
Mà xem ngay trong tài khoản 113.185.0.64 cũng xem được thông tin đó, nhưng không đủ bằng ở trang này
 
Lần chỉnh sửa cuối:
thật khổ cho anh nào viết ra trang web viễn thông này , code logic bị lòi ra lỗ hổng : không cần gõ captcha vẫn đăng kí được . !$@!!!$@!!
Các bước như sau
1/tải file provin.xlsx về
2/Copy vùng A2:B64 vào 1 sheet nào đó của file DKTT
3/thêm code vào sự kiện Select của sheet chứa dữ liệu , trong file DKTT là sheet2
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count = 1 And Target.Column = 2 Then
    If Target.Row > 1 And Len(Target) > 9 Then
        hello Target.Resize(, 9).Value
    End If
End If
End Sub
Khi nào không muốn đăng kí nữa thì Comment dòng hello
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count = 1 And Target.Column = 2 Then
    If Target.Row > 1 And Len(Target) > 9 Then
       [COLOR=#ff0000][SIZE=5] [B]'[/B][/SIZE][/COLOR]hello Target.Resize(, 9).Value
    End If
End If
End Sub

4/chép code này vào 1 module
Mã:
Public dicProvin As Object


Public Sub hello(ByVal arrInfo)
Dim req As Object, strData As String, strCookie As String
Dim username As String, password As String, strResponse As String
Dim phone As String


[COLOR=#ff0000][SIZE=3][B]username = "your username"
password = "your password"[/B][/SIZE][/COLOR]
phone = arrInfo(1, 1)
fillProvin
Set req = CreateObject("Msxml2.ServerXMLHTTP.6.0")
If Not LOGIN(req, username, password, strCookie) Then
    MsgBox "Dang nhap that bai"
    Exit Sub
End If


If Not checkPhoneOK(req, strCookie, "84" & phone, username) Then
    MsgBox "Khong the dang ky so : " & phone
    Exit Sub
End If
    
MsgBox RegisterPhone(req, strCookie, arrInfo)
End Sub


Private Sub fillProvin()
If dicProvin Is Nothing Then
    Dim arr, r As Long
    Set dicProvin = CreateObject("scripting.Dictionary")
    dicProvin.CompareMode = vbTextCompare
    arr = [COLOR=#ff0000][SIZE=4][B]Sheet5.Range("A2:B64").Value[/B][/SIZE][/COLOR]
    For r = 1 To UBound(arr) Step 1
        dicProvin(arr(r, 1)) = arr(r, 2)
    Next
End If
End Sub


Private Function RegisterPhone(req, strCookie As String, ByVal arrInfo) As String
Dim strResponse As String, strData As String, lPos As Long
arrInfo(1, 8) = WorksheetFunction.Trim(Replace(arrInfo(1, 8), "ca ", "", , , vbTextCompare))
If dicProvin.exists(arrInfo(1, 8)) Then arrInfo(1, 8) = dicProvin(arrInfo(1, 8)) Else arrInfo(1, 8) = "AGG"


With req
    .Open "POST", "http://prepaid.vinaphone.com.vn/dms/dwr/exec/NEORemoting.getValue.dwr", False
    strData = "callCount=1" & _
    "&c0-scriptName=NEORemoting" & _
    "&c0-methodName=getValue" & _
    "&c0-id=" & RandomId & _
    "&c0-param0=string:dms.pps_new.value_dangky_new(" & _
    "'84" & arrInfo(1, 1) & "'" & _
    "%2C'" & URLEncode(arrInfo(1, 3)) & "'" & _
    "%2C'" & Format(arrInfo(1, 5), "dd%2FMM%2Fyyyy") & "'" & _
    "%2C'" & arrInfo(1, 6) & WorksheetFunction.Rept("%20", 12 - Len(arrInfo(1, 6))) & "'" & _
    "%2C'" & URLEncode(arrInfo(1, 4)) & "'" & _
    "%2C''%2C''%2C'male'%2C'232'%2C''%2C'1'" & _
    "%2C'" & arrInfo(1, 8) & "'" & _
    "%2C'4'%2C''" & _
    "%2C'" & Format(arrInfo(1, 7), "dd%2FMM%2Fyyyy") & "'" & _
    "%2C'" & arrInfo(1, 2) & "'" & _
    "%2C'')" & _
    "&c0-param1=boolean:false" & _
    "&xml=true"
    
    .setRequestHeader "Content-Lenght", Len(strData)
    .setRequestHeader "Cookie", strCookie
    .send (strData)
    strResponse = .responseText
    lPos = InStr(strResponse, """")
    RegisterPhone = Mid(strResponse, lPos + 1, InStr(lPos + 1, strResponse, """") - lPos - 1)
    If RegisterPhone = "1" Then RegisterPhone = "XONG" Else RegisterPhone = "THAT' BAI." & Chr(10) & RegisterPhone
    'saveFile strResponse
End With
End Function


Private Function LOGIN(req, username As String, password As String, _
outStrCookie As String) As Boolean


Dim strData
With req
    .Open "POST", "http://prepaid.vinaphone.com.vn/dms/main", False
    .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    strData = "1iutlomLork=gjsot5pl{tizout" & _
    "&1pl{tizout=tku4ysgxz{o4rgu{z4ykz[ykxVgxgskzkx./" & _
    "&username=" & username & _
    "&password=" & Left(password, 6) & _
    "&options=" & Mid(password, 7)
    .setRequestHeader "Content-Lenght", Len(strData)
    .send (strData)
    If .Status = 200 Then
        LOGIN = (.responseText = "0")
        outStrCookie = .getResponseHeader("Set-Cookie")
    Else
        LOGIN = False
    End If
End With
End Function


Private Function checkPhoneOK(req, strCookie As String, ByVal phone As String, _
username As String) As Boolean
Dim strData As String, strResponse As String
With req
    .Open "POST", "http://prepaid.vinaphone.com.vn/dms/dwr/exec/NEORemoting.getValue.dwr", False
    .setRequestHeader "Content-Type", "text/plain"
    strData = "callCount=1" & _
    "&c0-scriptName=NEORemoting" & _
    "&c0-methodName=getValue" & _
    "&c0-id=" & RandomId & _
    "&c0-param0=string:dms.pps_new.check_TB('" & phone & "')" & _
    "&c0-param1=boolean:false" & _
    "&xml=true"
    .setRequestHeader "Content-Lenght", Len(strData)
    .setRequestHeader "Cookie", strCookie
    .send (strData)
    strResponse = .responseText
    strResponse = Mid(strResponse, InStr(strResponse, """"), 3)
    checkPhoneOK = (strResponse = """1""")
    If Not checkPhoneOK Then Exit Function
    
    .Open "POST", "http://prepaid.vinaphone.com.vn/dms/dwr/exec/NEORemoting.getRec.dwr", False
    strData = "callCount=1" & _
    "&c0-scriptName=NEORemoting" & _
    "&c0-methodName=getRec" & _
    "&c0-id=" & RandomId & _
    "&c0-param0=string:dms.pps_new.rec_laytt_thuebao('" & username & _
    "'%2C'" & phone & "')" & _
    "&c0-param1=boolean:false" & _
    "&xml=true"
    .setRequestHeader "Content-Lenght", Len(strData)
    .setRequestHeader "Cookie", strCookie
    .send (strData)
    
    checkPhoneOK = (InStr(.responseText, "s1") = 0)
End With
End Function


Private Function RandomId() As String
Randomize
RandomId = (Int(7000 * Rnd) + 600) & "_" & _
WorksheetFunction.Round(((Date - #1/1/1970#) * 86400 + Timer) * 1000, 0)
End Function


Public Sub saveFile(response As String)
Dim fsT As Object
Set fsT = CreateObject("ADODB.Stream")
fsT.Type = 2 'Specify stream type - we want To save text/string data.
fsT.Charset = "utf-8" 'Specify charset For the source text data.
fsT.Open 'Open the stream And write binary data To the object
fsT.WriteText response
fsT.SaveToFile ThisWorkbook.Path & "\data.html", 2 'Save binary data To disk
Set fsT = Nothing
End Sub


Public Function URLEncode(ByVal StringVal As String, Optional SpaceAsPlus As Boolean = False) As String
Dim bytes() As Byte, b As Byte, i As Integer, space As String, adoStream As Object


If SpaceAsPlus Then space = "+" Else space = "%20"


If Len(StringVal) > 0 Then
  Set adoStream = CreateObject("ADODB.Stream")
  With adoStream
    .Mode = 3 'adModeReadWrite
    .Type = 2 'adTypeText
    .Charset = "UTF-8"
    .Open
    .WriteText StringVal
    .Position = 0
    .Type = 1 ' adTypeBinary
    .Position = 3 ' skip BOM
    bytes = .Read
    .Close
  End With
  Set adoStream = Nothing
  ReDim result(UBound(bytes)) As String


  For i = UBound(bytes) To 0 Step -1
    b = bytes(i)
    Select Case b
      Case 97 To 122, 65 To 90, 48 To 57, 45, 46, 95, 126
        result(i) = Chr(b)
      Case 32
        result(i) = space
      Case 0 To 15
        result(i) = "%0" & Hex(b)
      Case Else
        result(i) = "%" & Hex(b)
    End Select
  Next i
  URLEncode = Join(result, "")
End If
End Function

chú ý mấy chỗ màu đỏ , sửa lại cho đúng với thông tin của bạn
cái dòng
Mã:
arr = Sheet5.Range("A2:B64").Value

sửa lại cho đúng với nơi bạn vừa copy mã tỉnh .
Đến đây là xong , có trục trặc gì cứ khiếu nại .
 

File đính kèm

  • provin.xlsx
    10.3 KB · Đọc: 34
Làm ơn xem lại giùm em. Vì không đủ Khả năng lắp ghép ạ.

file vẫn đang hoạt động đấy chứ , muốn đăng kí cho số nào thì select vào ô chứa số thuê bao đó thôi , ví dụ muốn đăng kí cho thuê bao ở ô B2 thì select chuột vào ô B2 là xong .

bạn muốn thay đổi user password ở trên sheet thì sửa lại code như vầy
Mã:
username = Sheet2.[L2]
password = Sheet2.[M2]

Code vẫn đang tự động thêm 3 dấu cách vào số CMND đấy , sao phải thay đổi gì nữa ?
Tôi không biết tại sao lại chọn cách gắn chết mã tỉnh vào ô L3 ????
tại sao không lấy mã tỉnh theo cột I ??
 
......................
 
Lần chỉnh sửa cuối:
Từ cột I suy ra mã chứ , bạn không hiểu cách làm rồi , từ giá trị cột I sẽ dò sang sheet3 để lấy mã chứ ai lại gắn chết mã vào ô L3 vậy . việc của bạn chỉ là ghi chính xác tên tỉnh vào cột I là đủ , có thể thêm chữ CA cũng được , vùng dữ liệu phải là
Mã:
Sheet3.Range("[COLOR=#ff0000][SIZE=4][B]A2:B64[/B][/SIZE][/COLOR]").Value
chứ không phải là A19:B19

Nếu đặt kí tự đặc biệt vào ô M3 cũng không sao , nhưng nhớ là giá trị của ô M3 gồm 3 kí tự chứ không phải 1 nhé . Thí dụ M3 = rept(" ",3) .
Ngoài ra sửa lại 2 sub này

Mã:
Public Sub hello(ByVal arrInfo)
Dim req As Object, strData As String, strCookie As String
Dim username As String, password As String, strResponse As String
Dim phone As String


With Sheet2
    username = .[L2]
    password = .[M2]
    phone = "84" & arrInfo(1, 1)
    arrInfo(1, 6) = arrInfo(1, 6) & URLEncode(.[M3])
    fillProvin
    
    Set req = CreateObject("Msxml2.ServerXMLHTTP.6.0")
    If Not LOGIN(req, username, password, strCookie) Then
        MsgBox "Dang nhap that bai"
        Exit Sub
    End If
    
    
    If Not checkPhoneOK(req, strCookie, phone, username) Then
        MsgBox "Khong the dang ky so : " & phone
        Exit Sub
    End If
End With
MsgBox RegisterPhone(req, strCookie, arrInfo)
End Sub

Private Function RegisterPhone(req, strCookie As String, ByVal arrInfo) As String
Dim strResponse As String, strData As String, lPos As Long
arrInfo(1, 8) = WorksheetFunction.Trim(Replace(arrInfo(1, 8), "ca ", "", , , vbTextCompare))
If dicProvin.exists(arrInfo(1, 8)) Then arrInfo(1, 8) = dicProvin(arrInfo(1, 8)) Else arrInfo(1, 8) = "AGG"

With req
    .Open "POST", "http://prepaid.vinaphone.com.vn/dms/dwr/exec/NEORemoting.getValue.dwr", False
    strData = "callCount=1" & _
    "&c0-scriptName=NEORemoting" & _
    "&c0-methodName=getValue" & _
    "&c0-id=" & RandomId & _
    "&c0-param0=string:dms.pps_new.value_dangky_new(" & _
    "'84" & arrInfo(1, 1) & "'" & _
    "%2C'" & URLEncode(arrInfo(1, 3)) & "'" & _
    "%2C'" & Format(arrInfo(1, 5), "dd%2FMM%2Fyyyy") & "'" & _
    "%2C'" & arrInfo(1, 6) & "'" & _
    "%2C'" & URLEncode(arrInfo(1, 4)) & "'" & _
    "%2C''%2C''%2C'male'%2C'232'%2C''%2C'1'" & _
    "%2C'" & arrInfo(1, 8) & "'" & _
    "%2C'4'%2C''" & _
    "%2C'" & Format(arrInfo(1, 7), "dd%2FMM%2Fyyyy") & "'" & _
    "%2C'" & arrInfo(1, 2) & "'" & _
    "%2C'')" & _
    "&c0-param1=boolean:false" & _
    "&xml=true"
    
    .setRequestHeader "Content-Lenght", Len(strData)
    .setRequestHeader "Cookie", strCookie
    .send (strData)
    strResponse = .responseText
    lPos = InStr(strResponse, """")
    RegisterPhone = Mid(strResponse, lPos + 1, InStr(lPos + 1, strResponse, """") - lPos - 1)
    If RegisterPhone = "1" Then RegisterPhone = "XONG" Else RegisterPhone = "THAT' BAI." & Chr(10) & RegisterPhone
    'saveFile strResponse
End With
End Function
 
Từ cột I suy ra mã chứ
Phần cột I em đã hiểu rồi. Em đã copy mà sao không thấy nó chạy nhỉ. Không biết có phụ thuộc trình duyệt không. Hay mã TeamViewer đây 138 512 098 Pass 6863 anh làm thử giúp em 1 trường hợp được không. Tiện thể có cả mạng nội bộ tra luôn kiểm tra
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom