我正在使用HTMLElementCollection
,HtmlElement
来迭代网站并使用网站HTML的获取/设置属性并将其返回到ListView
。是否可以从网站a和网站b获取值以将其返回到ListView
?
HtmlElementCollection oCol1 = oDoc.Body.GetElementsByTagName("input");
foreach (HtmlElement oElement in oCol1)
{
if (oElement.GetAttribute("id").ToString() == "search")
{
oElement.SetAttribute("value", m_sPartNbr);
}
if (oElement.GetAttribute("id").ToString() == "submit")
{
oElement.InvokeMember("click");
}
}
HtmlElementCollection oCol1 = oDoc.Body.GetElementsByTagName("tr");
foreach (HtmlElement oElement1 in oCol1)
{
if (oElement1.GetAttribute("data-mpn").ToString() == m_sPartNbr.ToUpper())
{
HtmlElementCollection oCol2 = oElement1.GetElementsByTagName("td");
foreach (HtmlElement oElement2 in oCol2)
{
if (oElement2 != null)
{
if (oElement2.InnerText != null)
{
if (oElement2.InnerText.StartsWith("$"))
{
string sPrice = oElement2.InnerText.Replace("$", "").Trim();
double dblPrice = double.Parse(sPrice);
if (dblPrice > 0)
m_dblPrices.Add(dblPrice);
}
}
}
}
}
}
答案 0 :(得分:0)
正如其中一条评论所提到的,更好的方法是使用HttpWebRequest向www.bestbuy.com或任何网站发送获取请求。它返回的是您可以解析的完整HTML代码(您看到的内容)。这种方法可以防止您查找太多请求并将其列入黑名单。如果您需要单击按钮或键入文本字段,最好模仿人工输入,以避免被列入黑名单。我建议在页面标题或正文中注入一个简单的javascript,并从应用程序执行它,从按钮发送'onClick'事件(然后用新页面回复解析或显示)或修改文本属性东西。
这个例子是在c ++ / cx中,但它最初来自c#示例。该脚本设置用户名和密码文本字段,然后单击登录按钮:
String^ script = "document.GetElementById('username-text').value='myUserName';document.getElementById('password-txt').value='myPassword';document.getElementById('btn-go').click();";
auto args = ref new Platform::Collections::Vector<Platform::String^>();
args->Append(script);
create_task(wv->InvokeScriptAsync("eval", args)).then([this](Platform::String^ response){
//LOGIN COMPLETE
});
// notes:wv = webview
编辑: 正如所指出的那样,绝对最好的方法是获取/请求api。我很惊讶地看到网站mason指出了最好的开发人员。就个人而言,我只是试图与汽车零件商店合作,他们笑着说我买不起或者不知道我要求和挂断电话(当打电话给公司时)。
编辑2:在我的代码中,使用的网站是autozone。我不得不使用chrome开发人员工具(f12)来获取用户名,密码和按钮名称的名称。通过开发人员工具,您还可以查看从计算机发送到站点/服务器的内容。这允许您使用HttpWebRequest使用post / get重新创建所有内容并模仿javascript输入和操作。