【问题标题】:How can I programmatically scrape a web page and "click" a javascript button?如何以编程方式抓取网页并“单击”javascript 按钮?
【发布时间】:2012-05-11 12:10:26
【问题描述】:

我正在尝试抓取一个网页以进行工作,其中有数百个带有复选框的表格行,并提交我需要单击一个调用 javascript 函数的按钮的表单。 html中的按钮是这样的:

<a onclick="JavaScript: return verifyChecked('Resend the selected request for various approvals?');"
id="_ctl0_cphMain_lbtnReapprove"
title="Click a single request to send to relevant managers for reapproval."
class="lnkDBD" href="javascript:__doPostBack('_ctl0$cphMain$lbtnReapprove','')"
style="border-color:#0077D4;border-width:1px;border-style:Solid;text-decoration: overline;">&nbsp;Resend&nbsp;</a>

我知道对于美丽汤之类的库,您可以通过将发布数据添加到 url 来提交表单,但是我如何选中一个复选框并“单击”这个 javascript 按钮?该网站是一种帮助台,对于这个特定的按钮,我们一次只能检查一个请求,当有数百个请求需要重新提交时,这会花费很长时间。

当我选中复选框时,还会弹出一条消息,验证我想要这样做,我不知道这是否会影响以编程方式提交它。

编辑:我忘了包含 doPostBack 方法。

<script type="text/javascript"> 
<!--
var theForm = document.forms['aspnetForm'];
if (!theForm) {
    theForm = document.aspnetForm;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
// -->
</script>

【问题讨论】:

  • 您需要检查点击 JS 按钮 实际 做了什么,然后只需创建该过程的副本。
  • 我知道 jQuery 没有被提及,并且可能不适合这里,但这可能会很有趣:api.jquery.com/trigger
  • @Petah 我用方法更新了第一篇文章,我忘了包括它。不过,我不确定如何从漂亮的汤之类的东西中复制它的作用。
  • @FirehaK 我的意思是它在 HTTP 协议/请求方面的实际作用。欺骗 HTTP 请求很容易,你只需要知道你需要欺骗什么。

标签: javascript screen-scraping


【解决方案1】:

试试 Imacros。对于简单的浏览器自动化来说,它非常棒。您可以记录您的会话,并以此为基础制作代码。如果有更多的逻辑,非复杂文档中的标准编程可以让你快速前进。您也可以调用外部语言/脚本。例如,我将其用于以下几个项目:

1) 收集业务线索:一个网站有一个所有零售商店的列表,但不会只提供靠近用户输入邮政编码的所有零售商店。在电子表格中放置大量邮政编码,运行时会从 csv 中遍历每个邮政编码,并抓取信息以存储在 csv 文件中。每 5 分钟会在 pc 上打开 VPN 程序并更改 ip。拿。 20分钟制作。

我会按照您的设置进行编程,但是我发现这是最好的方法,因为如果站点发生更改,它更容易调试,它们的“代码”非常简单,您可以轻松调用其他脚本和文件。 Firefox 插件是最稳定和免费的。

【讨论】:

    【解决方案2】:

    你最好使用像 selenium 这样的浏览器自动化库来做这样的事情。

    【讨论】:

      【解决方案3】:

      获取 Firefox 和 Firebug,打开 Firebug 加载页面,然后在控制台选项卡中查看它实际发送到服务器的内容。

      然后使用您喜欢的任何工具重复发送的内容。

      【讨论】:

      • 我打开了 FireBug 并选中了复选框并单击了按钮,但控制台视图下没有显示任何内容。我知道表单已提交,因为我在请求被发回的经理页面上得到了确认。
      • @FirehaK,然后检查网络标签
      • 感谢您的帮助,我得到了一个可见的网址。现在我只需要尝试解码它以查看正在发送的实际数据。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      • 1970-01-01
      • 2013-10-09
      • 2011-04-20
      相关资源
      最近更新 更多