2017-05-26 15 views
9

Tôi đang phát triển bot web bằng cách sử dụng điều khiển WinForms WebBrowser. Tất cả mọi thứ đang làm việc tốt ngoại trừ click() cuộc gọi thứ hai trong đoạn mã sau:JQuery nhấp() trên thẻ liên kết không kích hoạt từ tập lệnh được chèn bên trong điều khiển WebBrowser

function SaveRecordClick() { 
    try { 
     var menuButton = $('#s_at_m_4'); 
     menuButton.click();    //<-- This is working 
     var x = $('#s_at_m_4-menu li')[5]; 
     var saveLink = $(x).find('a')[0]; 
     if (saveLink != null){ 
      saveLink.click();   //<-- This is not working 

      return "1"; 
     } 
    } 
    catch (err) { 
     alert(err.message); 
    } 
    return "0"; 
} 

saveLink không phải là null. Tôi biết điều này vì tôi đã đặt một cuộc gọi alert() bên trong điều kiện.

đang cập nhật với các giải pháp đề nghị

function SaveRecordClick() { 
    try { 
     var menuButton = $('#s_at_m_4'); 
     menuButton.click(); 
     var x = $('#s_at_m_4-menu li').eq(5); 
     var saveLink = x.find('a').eq(0); 
     if (saveLink != null) { 
      alert(saveLink.html()); 
      saveLink.click(); 

      return "1"; 
     } 
    } 
    catch (err) { 
     alert(err.message); 
    } 
    return "0"; 
} 

Nhưng vẫn cùng một vấn đề. 'alert()' đang hoạt động tốt nhưng html() hiển thị văn bản bên trong thay vì HTML của neo.

HTML Mã

<li data-caption="Save Record    [Ctrl+S]" class="sbui-appletmenu-item ui-menu-item" role="presentation"> 
<a href="javascript:void(0)" aria-disabled="false" class="ui-corner-all" id="ui-id-254" tabindex="-1" role="menuitem">Save Record    [Ctrl+S]</a> 
</li> 

ID của thẻ neo được tự động tạo ra.

Ngoài ra, click() đang kích hoạt khi mã giống nhau được thực thi từ Bảng điều khiển của Google Chrome. Vì vậy, nó có thể là vấn đề với điều khiển WebBrowser?

Cập nhật

Tôi nghĩ rằng chàng trai của nó là một vấn đề với sự kiểm soát webrowser mà thừa hưởng trình duyệt Internet Explorer. Vì vậy, bây giờ tôi đang chuyển sang kiểm soát trình duyệt khác và kiểm tra mã trên đó. Sẽ cho bạn biết nếu nó hoạt động ở đó.

+0

Bạn đang mong đợi saveLink.click() để làm gì? Hãy nhớ, saveLink không có đối tượng jQuery. Nó là Element vì bạn đã thực hiện [0] thay cho eq (0) và nhấn() trên một Element thông thường sẽ không gây ra bất kỳ trình xử lý bấm nào bị ràng buộc với jQuery để thực thi. – Taplar

+0

Đối với những người nói rằng bạn cần phải quấn 'saveLink' trong' $() '. '.click()' là một hàm DOM, nó không phải là ** một hàm jQuery, jQuery có '.click ()' để liên kết một trình xử lý sự kiện với onclick, tức là nó là viết tắt của '.on ("click", ) ' –

+0

@NickA http://api.jquery.com/click/#click Tùy chọn thứ ba của click() thực sự tồn tại trong jQuery cũng vậy.Đó là một bàn tay ngắn để kích hoạt ('click') – Taplar

Trả lời

0

Cảm ơn mọi người câu trả lời và bình luận của bạn.

Sau khi dành một tuần để nghiên cứu trang web của bên thứ ba, hôm nay tôi cuối cùng đã tìm ra giải pháp cho vấn đề của mình. Trên thực tế, vấn đề không phải với JavaScript hoặc HTML nhưng cách trang web xác thực biểu mẫu tôi đang cố gắng tự động điền bằng bot của tôi.

Tôi đã trao tiền thưởng cho câu trả lời có cuộc trò chuyện trong nhận xét đã cho tôi một số gợi ý.

Nhấp chuột vào saveLink không kích hoạt vì tôi đã đặt lập trình giá trị của hộp văn bản bằng cách sử dụng .val() nhưng vì lý do nào đó trang web không lưu giá trị trực tiếp được đặt bằng chức năng này. Nhưng khi tôi thay đổi giá trị bằng cách sử dụng hộp kết hợp tải giá trị cho hộp văn bản từ máy chủ (Mặc dù giá trị được đặt từ máy chủ hoặc sử dụng chức năng val() giống hệt nhau.), Sau đó nhấp vào thành công sau đó.

Tôi cũng đã sử dụng setTimeout() ở những vị trí khác nhau vì mã đang thực thi quá nhanh trước khi giá trị có thể được đặt trong một số trường biểu mẫu.

Vì vậy, trong tương lai nếu ai đó gặp phải sự cố tương tự thì hãy đảm bảo bạn nghiên cứu hành vi của trang hoặc biểu mẫu bạn đang cố gửi.

1

Bạn phải quấn đối tượng của bạn với jQuery để làm cho nó hoạt:

var saveLink = $($(x).find('a')[0]);
+0

Các đối tượng HTMLElement cũng có phương thức 'click()': https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click –

+3

Không được quấn lại. Sử dụng eq (0) thay vì [0] – Taplar

+0

@Taplar, đẹp bắt! – Ursache

0

saveLink sẽ không bao giờ null, vì find/eq sẽ luôn luôn trả về một đối tượng jQuery, bất kể các yếu tố hoặc các yếu tố tồn tại hay không.

Thay vào đó, hãy thử sử dụng length tài sản để kiểm tra sự tồn tại:

if (saveLink.length) 
0
function SaveRecordClick() { 
    try { 
     var menuButton = $('#s_at_m_4'); 
     menuButton.click(); 
     var x = $('#s_at_m_4-menu li').eq(5); 
     var saveLink = x.find('a').eq(0); 
     if (saveLink != null) { 
      alert(saveLink.html()); 
      saveLink.live('click');//Use live click 

      return "1"; 
     } 
    } 
    catch (err) { 
     alert(err.message); 
    } 
    return "0"; 
} 
+0

Không hoạt động. 'không tìm thấy hàm'. Và 'live()' không được chấp nhận. Hầu hết có thể bị xóa khỏi thư viện: http://api.jquery.com/category/removed/ –

0

savelink nên yếu tố dom cho kiểm tra null

var saveLink = $(x).find('a:first')[0]; 

hoặc

var saveLink = $(x).find('a').eq(0)[0]; 

o r

var saveLink = $(x).find('a').first()[0]; 
+0

Tôi đã thử cả ba phương pháp. SaveLink không phải là null nhưng nó không kích hoạt. –

+0

Bạn đã thử onclick = "javascript: .. cho anchor thay vì href =" javascript: .. –

+0

Tôi không thể chỉnh sửa HTML. Đó là trang web của bên thứ ba. –

0

Tôi không hiểu Bạn có cần nhấp hoặc thêm chức năng trong lần nhấp không?

Thêm chức năng:

jQuery('teste').click(function(){console.log('teste')}); 

Bấm:

jQuery('teste').trigger('click'); 
+0

Tôi cần kích hoạt nhấp chuột vào thẻ neo. Cái thứ hai. Nhưng nó không hoạt động. –

0

Teste sử dụng jQuery.

jQuery(saveLink).click(function(){ 
console.log('click!'); 
}); 
0

thử này

$(document).on('click',$(saveLink),function(event){ ///your code })

+0

Nó thực hiện mã bên trong chức năng này khi nhấp chuột nhưng không thực hiện tác vụ gốc của liên kết. Tôi không cố gắng liên kết hành động nhấp chuột mới với liên kết này thay vì thực hiện hành động trên trang web của bên thứ ba. Hành động là lưu bản ghi vào cơ sở dữ liệu của trang web đó. Tôi đang phát triển một bot. –

+0

thử này sau đó '$ (saveLink) .click(), đặt một breakpoint đó và xem trong Watch nếu saveLink là! = Của undefined, nếu nó là work' – abelh2200

+0

Điểm ngắt trong JavaScript không hoạt động khi bạn đang xây dựng một WinForms dự án. Nhưng tôi đã kiểm tra 'saveLink! = Undefined' bằng cách thực hiện' alert (saveLink.html()) 'và nó tìm nạp thành công HTML. –

0

đang cập nhật của bạn với các giải pháp được đề xuất là tốt, nhưng phương pháp .html() nhận được nội dung của một phần tử HTML. Vì vậy, bạn cần sử dụng saveLink.parent().html() để lấy HTML bên ngoài của neo.
Nếu có các yếu tố khác trong các thùng chứa phụ huynh, bạn có thể tạo ra yếu tố tạm thời để có được HTML chỉ hiperlink:

var anchorHTML = $('<div>').append(saveLink.clone()).html(); 

Để click vào saveLink sử dụng Javascript cố gắng sử dụng x.find('a')[0].click() thay vì saveLink.click().
Tôi đã sử dụng URL của tiểu sử của bạn trong thuộc tính href để có hình ảnh rõ ràng. Nếu bạn chạy đoạn mã dưới đây thì người dùng nhấp vào liên kết sẽ được mô phỏng và trang hồ sơ của bạn sẽ được hiển thị.

function SaveRecordClick() { 
 
    try { 
 
    var x = $('#s_at_m_4-menu li').eq(5); 
 
    var saveLink = x.find('a').eq(0); 
 
    if (saveLink != null) { 
 
     var anchorHTML = $('<div>').append(saveLink.clone()).html(); 
 
     alert(anchorHTML); 
 
     saveLink[0].click(); 
 
     return "1"; 
 
    } 
 
    } catch (err) { 
 
    alert(err.message); 
 
    } 
 
    return "0"; 
 
} 
 
console.log(SaveRecordClick());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul id="s_at_m_4-menu"> 
 
    <li></li> 
 
    <li></li> 
 
    <li></li> 
 
    <li></li> 
 
    <li></li> 
 
    <li data-caption="Save Record    [Ctrl+S]" class="sbui-appletmenu-item ui-menu-item" role="presentation"> 
 
    <a href="https://stackoverflow.com/users/1124494/aishwarya-shiva" aria-disabled="false" class="ui-corner-all" id="ui-id-254" tabindex="-1" role="menuitem">Save Record    [Ctrl+S]</a> 
 
    </li> 
 
    <li></li> 
 
</ul>

+0

Ok nó hoạt động để tìm nạp HTML. Nhưng đó chỉ là để thử nghiệm nếu 'saveLink' là' null' hay không và nó không phải. Mục tiêu chính là nhấp vào 'saveLink' bằng cách sử dụng Javascript/JQuery không tìm nạp HTML. Nhưng nó không kích hoạt. –

+0

@AishwaryaShiva, tôi đã cập nhật câu trả lời. Xin vui lòng thử lại. Nó có hoạt động không? – Alexander

+0

đã thử điều đó. Không làm việc. –

0

Cách tốt nhất để bắn một sự kiện từ JavaScript

$("#ID").trigger("click"); 

Tôi hy vọng nó sẽ làm việc cho bạn.

1

Hãy thử với tình trạng Dưới đây của:

  1. trigger('click') thay vì click
  2. Thay đổi nếu xác nhận tình trạng với if(saveLink).Validate của nó cả null,undefined tất cả các tuyên bố sai
  3. Return với việc sử dụng chuyển hướng number=> 0 thay vì sting =>'0'
  4. anchor tag với window.location.href và nhận được giá trị href từ neo thử với attr('href')
function SaveRecordClick() { 
    try { 
    var menuButton = $('#s_at_m_4'); 
    menuButton.trigger('click'); 
    var x = $('#s_at_m_4-menu li').eq(5); 
    var saveLink = x.find('a').eq(0); 
    if (saveLink) { 
     alert(saveLink.html()); 
     window.location.href=saveLink.attr('href'); 
    return 1; 
    } 
    } catch (err) { 
    alert(err.message); 
    } 
    return 0; 
} 

dụ làm việc

function SaveRecordClick() { 
 
    try { 
 
    var menuButton = $('#s_at_m_4'); 
 
    menuButton.trigger('click'); 
 
    var x = $('#s_at_m_4-menu li').eq(5); 
 
    var saveLink = x.find('a').eq(0); 
 
    if (saveLink) { 
 
     alert(saveLink.html()); 
 
     window.location.href=saveLink.attr('href'); 
 
    return 1; 
 
    } 
 
    } catch (err) { 
 
    alert(err.message); 
 
    } 
 
    return 0; 
 
} 
 
SaveRecordClick()
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul id="s_at_m_4-menu"> 
 
    <li></li> 
 
    <li></li> 
 
    <li></li> 
 
    <li></li> 
 
    <li></li> 
 
    <li data-caption="Save Record    [Ctrl+S]" class="sbui-appletmenu-item ui-menu-item" role="presentation"> 
 
    <a href="https://example.com" aria-disabled="false" onclick="console.log('s')" class="ui-corner-all" id="ui-id-254" tabindex="-1" role="menuitem">Save Record    [Ctrl+S]</a> 
 
    </li> 
 
    <li></li> 
 
</ul>

+0

Không hoạt động vì neo 'href =" javascript: void() 'và chuyển nó tới' window.location.href' sẽ mở trang trống. –

0

Ghi một điều javascript và khung javascript là sự kiện thúc đẩy, vì vậy xin đừng cố gắng thực hiện các khái niệm lập trình chức năng

$(document).ready(function(){ 
    $("#s_at_m_4").click(function(){ 
    // put your code here 
    }); 
}); 
0

gì lý thuyết của tôi về vấn đề này là các chức năng nhấp chuột đã không thực sự bị ràng buộc với yếu tố. Điều này có thể do html chưa có trong trang khi tập lệnh hoặc liên kết của nhấp chuột được thực thi. Hãy thử kiểm tra nhấp chuột được liên kết trong saveLink.click();

cố gắng để làm cho nó trong định dạng

$(body).delegate(saveLink, 'click', function() { //try alert here to check });

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