2013-03-22 30 views
5

EDIT: Một vài tháng sau, tôi đã thử lại lần nữa bằng cú pháp tương tự mà tôi đã thử lần đầu tiên (được đăng bên dưới). Vì lý do nào đó, nó đã hoạt động! Có thể một cái gì đó khác với cú pháp của tôi đã gây ra sự thiếu hiệu quả ... END EDITVBA Tương tác với các nút radio trên trang web

Tôi đã tìm kiếm diễn đàn trong một vài giờ và tìm cách giải quyết vấn đề này, nhưng không có thứ gì tôi đã thử làm việc .

Tôi đang sử dụng VBA để tự động hóa quá trình tạo bản khảo sát trên SurveyMonkey. Cho đến nay tôi đã có thể:

  • Đăng nhập vào tài khoản của tôi,
  • Bấm vài siêu liên kết để tạo ra một nhà sưu tập phản ứng mới,
  • Tên các nhà sưu tập,
  • Đến các thiết lập thu,
  • Và, chọn ba trong số bốn nút radio để thay đổi cài đặt thu thập.

Vấn đề không phải là tôi không thể chọn nút radio; mã của tôi chọn ba nút đầu tiên tốt. Câu đố của tôi là nút thứ tư không thay đổi! Tôi sử dụng quá trình tương tự cho mỗi nút, vì vậy tôi không thể tìm ra lý do tại sao nút cuối cùng sẽ không chọn.

Dưới đây là phần mã của tôi:

objIE.Document.getElementById("rdlResponseType_1").Click 'Allow multiple responses = Yes 
objIE.Document.getElementById("rdlResponseEdit_1").Click 'Allow Responses to be Edited = Yes 
objIE.Document.getElementById("rdlThankyou_1").Click  'Display a "Thank You" page? = Yes 
objIE.Document.getElementById("rdlCompleteOpt_1").Click  'Survey Completion = Close Window 

Đây là HTML cho các nút radio:

<table border="0" cellpadding="0" cellspacing="0" style="width: 100%;"> 
         <tr id="CompleteOptDesc"> 
      <td style="">&nbsp;</td> 
      <td>After the respondent leaves the survey:</td> 
     </tr> 

         <tr id="CompleteOptItems"> 
      <td style="">&nbsp;</td> 
      <td align="left" nowrap="nowrap" valign="top"> 
           <table id="rdlCompleteOpt" class="Clean radioList" OnClick="radioToggle('rdlCompleteOpt', '0', 'panLink');" name="rdlCompleteOpt" border="0" style="white-space: nowrap"> 
       <tr> 
        <td><span style="white-space: nowrap"><input id="rdlCompleteOpt_0" type="radio" name="rdlCompleteOpt" value="0" checked="checked" /><label for="rdlCompleteOpt_0"><b>Redirect</b> to your own webpage.</label></span></td> 
       </tr><tr> 
        <td><input id="rdlCompleteOpt_1" type="radio" name="rdlCompleteOpt" value="2" /><label for="rdlCompleteOpt_1"><b>Close Window</b></label></td> 
       </tr> 
      </table> 

Đây là mã cho phần chuyển đổi của đài phát thanh:

<td width="65%" valign="top"> 
           <div id="panLink" style="DISPLAY:inline"> 

            <div class="URLinfo"> 

              <b>Enter a URL</b> to jump to upon leaving the survey:<br /> 
              <div title="REQUIRED: Enter URL (255 character max)" style="padding:4px 0 2px 0;"> 
               <input name="txtWebLink" type="text" value="http://www.surveymonkey.com/" maxlength="255" size="40" id="txtWebLink" class="RQR opaque" /> 
              </div> 
              <span class="tip">Example: <u>http://www.mysite.com/home.html</u></span> 
            </div> 

      </div> 
          </td> 

Mọi đề xuất sẽ rất được đánh giá cao!

+0

thay vì gọi phương thức nhấp, bạn đã thử đặt thuộc tính đã chọn thành true? –

+0

Tôi đã thử dòng này: 'objIE.Document.all.item (" rdlCompleteOpt ") (1) .Kiểm tra = True' nhưng nó không hoạt động. – ARich

+0

'objIE.document.getElementById (" rdlCompleteOpt_1 ") Kiểm tra = True' –

Trả lời

2

Có một vài điều cần xem xét:

  1. Khi nào bạn gọi mã này? OnNavigate hoặc DocumentComplete? Có thể là đối tượng không tồn tại. Bạn có thể kiểm tra để xem nếu nó bằng cách sử dụng một breakpoint và thêm một chiếc đồng hồ cho các biểu thức

    objIE.Document.getElementById("rdlCompleteOpt_1") 
    

    Sử dụng OnDocumentComplete để đảm bảo các thành phần HTML tồn tại

  2. Có thể cách bạn đang gọi chức năng nhấp chuột là gây ra sự cố. Hãy thử điều này

    Call objIE.Document.getElementById("rdlCompleteOpt_1").Click() 
    

    Tôi nghi ngờ rằng nó có thể có nhiều tác động nhưng tôi muốn xác minh mọi thứ.

  3. Cô lập nguyên nhân của sự cố bằng cách xóa 'lớp'. Bạn có thể thực hiện điều này bằng JavaScript thuần túy được gọi từ giao diện điều khiển JavaScript của công cụ dev (F12) không?

    Nếu không thì vấn đề là với cách bạn tương tác với các yếu tố trang. Nếu có thì chúng ta cần phải tìm ra những gì nó là với sự tích cực VBA là gây ra một vấn đề. Một lần nữa thấy # 2 vì nó có thể là nguyên nhân của vấn đề.

    Ngoài ra, vấn đề có xảy ra nếu bạn thay đổi thứ tự HTML của các phần tử không? Nếu bạn gọi nó theo cách này thì sao?

    objIE.Document.getElementById("rdlCompleteOpt_1").Click  'Survey Completion = Close Window 
    objIE.Document.getElementById("rdlResponseType_1").Click 'Allow multiple responses = Yes 
    objIE.Document.getElementById("rdlResponseEdit_1").Click 'Allow Responses to be Edited = Yes 
    objIE.Document.getElementById("rdlThankyou_1").Click  'Display a "Thank You" page? = Yes 
    

    Hiện nó có hoạt động sau đó hoặc mục "cuối cùng" không thành công?

  4. Rất khó có thể là nguyên nhân nhưng nguồn cung cấp HTML thiếu mã để đóng ô, hàng và bảng.

     </tr> 
    
        </table> 
        <!-- missing --> 
        </td> 
        </tr> 
    </table> 
    
  5. Mặc dù không phải là câu trả lời cụ thể cho câu hỏi của bạn Tôi tin rằng điều này có thể phù hợp với mục đích bài đăng của bạn. Vì bạn muốn quản lý một bộ sưu tập surveymonkey hãy xem SurveyMonkey API here khi sử dụng API cung cấp cho bạn một vài lợi ích.

    • bạn không cần phải dựa vào các yếu tố người sử dụng có thể thay đổi hoặc bị thay đổi ngoài tầm kiểm soát của bạn
    • bạn có thể sử dụng một điều khiển và "hợp đồng" giao diện để quản lý các thông tin trong đó bao gồm bạn cho bất kỳ thay đổi trong tương lai (giả sử họ không phản đối và ngừng hỗ trợ API)
+0

+1 Cảm ơn bạn đã đề xuất! Tôi chưa bao giờ sử dụng một API, nhưng tôi đã nghe rất nhiều về họ và tự hỏi liệu SurveyMonkey có một hay không. Tôi chắc chắn sẽ xem xét thêm. – ARich

Các vấn đề liên quan