通过 COM 通过 Autohotkey 通过 IE 登录 twitter
twitter login trough IE via COM by Autohotkey
我想通过 COM 和 autohotkey 使用 Internet Explorer 登录 Twitter 帐户 https://twitter.com/login,但我无法设置输入字段的值,我不明白为什么。
代码
准备(睡觉而不是更复杂等待更容易阅读):
wb := ComObjCreate("InternetExplorer.Application")
sleep 500
wb.Navigate("https://twitter.com/login")
sleep 500
wb.visible := true ;only for debugging
什么都不做的代码:
wb.document.querySelector(".js-username-field").value := "Test"
wb.document.querySelector(".js-password-field").value := "TestPass"
问题
此代码在 www.google.com 或 www.whosebug.com 上的搜索(使用正确的选择器)上运行良好。但在 Twitter 上它不会插入值。如果有人能帮我弄清楚原因,我将不胜感激。
备注
它可能可以通过对 "WinHttp.WinHttpRequest.5.1" 对象的 POST 请求来完成,但我对此不是很有经验,并且更愿意使用 IE 对象。
在推特登录页面的文档中,分别有两个元素匹配你的selector,而且两对(用户名和密码字段)在[=30=方面看起来基本相同]:
由于 querySelector()
只会 select DOM 顺序中的第一个匹配元素,它会 select 您不需要的输入。
要解决这个问题,您可以使用 querySelectorAll()
并通过索引访问所需的元素(出于多种原因我不推荐这样做,例如某些 IE 版本不支持它)。
我建议调整 selector 以明确 select 所需的输入。一种方法是,在 select 或路径中包含一个或多个 parents:
wb.document.querySelector("div.clearfix .js-username-field").value := "Test"
wb.document.querySelector("div.clearfix .js-password-field").value := "TestPass"
[编辑]备选方案select或:
#page-container .js-username-field
#page-container .js-password-field
为了鼓励您测试更好的方法来明确地处理输入,也许包含 form
或其他一些元素更合适。如果您选择另一个 select 或者,请告诉我,我会用您的替代方案更新此答案。
我想通过 COM 和 autohotkey 使用 Internet Explorer 登录 Twitter 帐户 https://twitter.com/login,但我无法设置输入字段的值,我不明白为什么。
代码
准备(睡觉而不是更复杂等待更容易阅读):
wb := ComObjCreate("InternetExplorer.Application")
sleep 500
wb.Navigate("https://twitter.com/login")
sleep 500
wb.visible := true ;only for debugging
什么都不做的代码:
wb.document.querySelector(".js-username-field").value := "Test"
wb.document.querySelector(".js-password-field").value := "TestPass"
问题
此代码在 www.google.com 或 www.whosebug.com 上的搜索(使用正确的选择器)上运行良好。但在 Twitter 上它不会插入值。如果有人能帮我弄清楚原因,我将不胜感激。
备注
它可能可以通过对 "WinHttp.WinHttpRequest.5.1" 对象的 POST 请求来完成,但我对此不是很有经验,并且更愿意使用 IE 对象。
在推特登录页面的文档中,分别有两个元素匹配你的selector,而且两对(用户名和密码字段)在[=30=方面看起来基本相同]:
由于 querySelector()
只会 select DOM 顺序中的第一个匹配元素,它会 select 您不需要的输入。
要解决这个问题,您可以使用 querySelectorAll()
并通过索引访问所需的元素(出于多种原因我不推荐这样做,例如某些 IE 版本不支持它)。
我建议调整 selector 以明确 select 所需的输入。一种方法是,在 select 或路径中包含一个或多个 parents:
wb.document.querySelector("div.clearfix .js-username-field").value := "Test"
wb.document.querySelector("div.clearfix .js-password-field").value := "TestPass"
[编辑]备选方案select或:
#page-container .js-username-field
#page-container .js-password-field
为了鼓励您测试更好的方法来明确地处理输入,也许包含 form
或其他一些元素更合适。如果您选择另一个 select 或者,请告诉我,我会用您的替代方案更新此答案。