微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

自动热键脚本,用于打开 Math stackexchange 上自上而下的问题形式的所有链接

如何解决自动热键脚本,用于打开 Math stackexchange 上自上而下的问题形式的所有链接

我正在尝试编写自动热键脚本,以便打开 Mathematics Stack Exchange 站点特定页面的所有问题。一开始似乎很容易,但我在这样做时遇到了一些问题:

首先,我想通过点击向上箭头进入页面的最上方:

^q::
click,1444,85,80
return

在此之后,我计划将鼠标移动相同的距离,然后单击鼠标中键后,它会打开新选项卡上的所有链接,但问题是每个问题的链接间的距离不一样 因此我无法编写将鼠标垂直移动相同距离(或滚动相同量)并单击中间按钮的脚本。

我还尝试通过 Tab 按钮在问题链接之间移动,并通过按 Ctrl+Enter 在新选项卡中打开链接。但它也失败了,因为通过按下 Tab 它会在所有链接(包含每个问题的标签)之间移动,并且因为任何问题都可以有不同数量标签,我的脚本也将使用此方法失败。 >

所以请你帮我做一下。提前致谢!


我忘了提到我在网站上选择了很多被忽略的标签。 (我用这些标签隐藏了问题,但如果我们想获得页面上所有问题的链接,它也可能获得这些问题的链接)。

这是一个巨大的标签列表,以防万一,如果您需要该列表,请让我将它们添加到我的帖子中。

解决方法

我在 AutoHotkey 网站 Here 上提出了我的问题。用户@teadrinker 写了一个完美的脚本来解决我的问题:

^q::
ignored =
(
;Here is big list of my ignored tag
)
objIgnored := {}
Loop,parse,ignored,`n,`r
   objIgnored[A_LoopField] := ""

url := "https://math.stackexchange.com/questions"

Whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
Whr.Open("GET",url,false)
Whr.Send()
status := Whr.status
if (status != 200)
   throw "HttpRequest error,status: " . status

Arr := Whr.responseBody
pData := NumGet(ComObjValue(arr) + 8 + A_PtrSize)
length := arr.MaxIndex() + 1
html := StrGet(pData,length,"UTF-8")

Doc := ComObjCreate("htmlfile")
Doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
Doc.write(html)

summary := Doc.querySelectorAll("div.summary")
links := ""
Loop % summary.length {
   tags := summary[A_Index - 1].querySelectorAll("div.tags > a.post-tag")
   Loop % tags.length
      if objIgnored.HasKey( tags[A_Index - 1].innerText )
         continue 2
   Run,% link := StrReplace(summary[A_Index - 1].querySelector("a.question-hyperlink").href,"about:","https://math.stackexchange.com",1)
   links .= link . "`n"
}
MsgBox,4096,% links ; this line to check which links were found and opened
Return

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。