C#从两个不同的网站获取价值

时间:2015-11-11 16:43:06

标签: c# asp.net

我正在使用HTMLElementCollectionHtmlElement来迭代网站并使用网站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);
                    }
                }
            }
        }
    }
}

1 个答案:

答案 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输入和操作。