【问题标题】:Retrieve href from a specific table data cell in a dynamic HTML table in a website从网站的动态 HTML 表格中的特定表格数据单元格中检索 href
【发布时间】:2021-09-15 07:02:06
【问题描述】:

我喜欢从网页中的动态 HTML 表格中的特定表格单元格数据中检索 href。对于下面过于简化的示例,我喜欢找到一个名为“Report BBB”的表格单元格并检索其 href。 Javascript 中的任何示例代码将不胜感激。谢谢!

<tr>
  <td><a href="javascript:openWin('http://AAA')">Report AAA</a></td>
  <td><a href="javascript:openWin('http://BBB')">Report BBB</a></td>
</tr>

【问题讨论】:

  • 到目前为止您尝试过什么? .getAttribute("href") 会给你一个元素的href,而你可以搜索innerHTML...
  • 有很多方法可以做到这一点。你必须尝试一些事情并解释你遇到困难的地方
  • 我建议不要在 href 属性中使用伪协议javascript:。有缺点。
  • 我用 UrlFetchApp 废弃了一个网页,然后使用 .search 和 . substring 来查找文本,希望它能读取文本周围的整个字符串,以便我以后可以只提取我想要的 href 字符串。但它没有提供任何匹配。

标签: javascript html href


【解决方案1】:

方法一:

从表中获取所有a elementsloop 以检查innerHTML 是否等于您想要的值,(检查target_value。如果true,获取elementhref(检查变量val

var all_links = document.querySelectorAll('table a');
var target_value = "Report BBB";
var val;

all_links.forEach(element => {
  if(element.innerHTML == target_value){
    val = element.getAttribute("href");
    console.log(val);
  } 
});
<table>
    <tr>
      <td><a href="javascript:openWin('http://AAA')">Report AAA</a></td>
      <td><a href="javascript:openWin('http://BBB')">Report BBB</a></td>
    </tr>
</table>

方法二:

如果元素 (a) 包含更多文本,例如:报告 BBB 等等... (检查下面的 HTML)

<td><a href="javascript:openWin('http://BBB')">Report BBB and more</a></td>

那么就可以使用includes函数来检查了。

var all_links = document.querySelectorAll('table a');
var target_value = "Report BBB";
var val;

all_links.forEach(element => {
  if(element.innerHTML.includes(target_value)){
    val = element.getAttribute("href");
    console.log(val);
  } 
});
<table>
    <tr>
      <td><a href="javascript:openWin('http://AAA')">Report AAA</a></td>
      <td><a href="javascript:openWin('http://BBB')">Report BBB and more</a></td>
    </tr>
</table>

注意:

如果HTML 字母大小写可能发生变化,请在检查时使用toUpperCase()toLowerCase()。见:

HTML:

<td><a href="javascript:openWin('http://BBB')">RePoRt BbB</a></td>

JS

var target_value = "report bbb";

if(element.innerHTML.toUpperCase() == target_value.toUpperCase())

例子:

var all_links = document.querySelectorAll('table a');
var target_value = "report bbb";
var val;

all_links.forEach(element => {
  if(element.innerHTML.toUpperCase() == target_value.toUpperCase()){
    val = element.getAttribute("href");
    console.log(val);
  } 
});
<table>
    <tr>
      <td><a href="javascript:openWin('http://AAA')">Report AAA</a></td>
      <td><a href="javascript:openWin('http://BBB')">RePoRt BbB</a></td>
    </tr>
</table>

【讨论】:

  • 谢谢!这些代码甚至我的原始代码都适用于公共网站表格数据抓取,但它们不适用于我打算使用私人账户的金融网站。我意识到我的私人金融网站不允许任何抓取。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-17
  • 2011-10-13
  • 1970-01-01
  • 2022-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多