【问题标题】:Click a text link with jquery单击带有 jquery 的文本链接
【发布时间】:2013-11-20 16:20:07
【问题描述】:

我正在尝试单击此page 底部的链接,其中包含“显示更多公司”文本。

到目前为止,我尝试了这两种方法:

    $('a:contains("Show more companies")').click();
    $('a:contains("Show more companies")').trigger('click');

但我收到此错误:

TypeError: Object <a class="button AjaxPagerLink" href="http://www.trustpilot.co.uk/categories/computer?page=2">
Show more companies </a> has no method 'click' at Request._callback (C:\app.js:42:43)

任何线索是什么问题?我的命令正确吗?非常感谢任何建议/帮助。

编辑:尝试了所有这些解决方案。得到同样的错误。

【问题讨论】:

  • $().click() 方法将 click 事件绑定到事件处理程序,即 click() 方法的参数。您没有在代码中指定处理程序。请参阅此处的 jQuery 文档:api.jquery.com/click
  • 我能够在 chrome 中看到更多公司而没有任何错误。
  • 它正在工作。检查Fiddle
  • Murali,它不在我的应用程序中。我知道它应该运行,但是当我使用节点 js 运行它时,我得到了这个错误。是的,我已经安装了 jquery 并正确使用它。

标签: javascript jquery node.js web-scraping


【解决方案1】:

触发类应该很容易,但您应该验证(看起来如此)只有一个具有该类名的元素。

$(".AjaxPagerLink").trigger("click");

第二个版本触发该页面上的第一个 class="AjaxPagerLink" 元素,只是为了大胆猜测。

$(".AjaxPagerLink")[0].trigger("click");

您也可以尝试 [href^="http"] CSS 选择器。

$("a[href^='http://www.trustpilot.co.uk/categories/computer?page']").trigger("click");

一般:

使用类和 ID 来检索 DOM 元素是一种最佳做法(因为它也比解析包含的文本更快)。

<a href='companies.html' id='show_companies'>Show more companies</a>

您应该为元素分配一个 ID,然后触发对该 ID 的点击:

$('#show_companies').trigger('click');

只需确保您的 ID 是唯一的(您的页面中必须只有一个 show_companies 元素)。

【讨论】:

  • 他在网络抓取下发布了这个,所以我认为他不能更改 html。
  • 谢谢@user2932397,我真的错过了那个标签。
【解决方案2】:

试试这个:

$('a.button.AjaxPagerLink').click();

这比根据文本选择要好。

编辑:如果这不是问题,请确保在为该链接注册了 onClickListener 后调用.click()

【讨论】:

  • 他在网络抓取下发帖,所以我认为他不能将页面更改为具有 onClickListener。
  • 不,我的意思是他可以确保他只有在监听器注册后才能调用click()
  • 我想我明白你的意思了。所以确保他的代码在页面的监听器注册后运行?
【解决方案3】:

试试:

    $('a:contains("Show more companies")').click(function(){
         var link = $(this).attr('href');
         window.location.href = link;   
    }

【讨论】:

  • 那个链接是ajax,这样做会破坏它的目的。
【解决方案4】:

$('a:contains("显示更多公司")')[0].click();

【讨论】:

    【解决方案5】:

    试试这个:

      $('a:contains("Show more companies")')[0].click();
    

    【讨论】:

    • 我得到这个错误:TypeError: Object # has no method 'click'
    • 我在您链接的页面上打开了 firebug,并将这个确切的代码粘贴到控制台中,它就可以工作了。
    【解决方案6】:

    你也可以用这个...

    $(document).ready(function () {
            $('a:contains("Show more companies")').click(function () {
                alert('I am clicked');
            });
        });
    

    【讨论】:

    • 这不是他想要的。他想触发该页面上的点击处理程序,而不是创建自己的处理程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多