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

本文关键字:网站 获取 两个 | 更新日期: 2023-09-27 18:21:42

我使用HTMLElementCollectionHtmlElement遍历网站,并使用网站HTML的Get/Set属性并将其返回给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);
                    }
                }
            }
        }
    }
}

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

正如其中一条评论所提到的,更好的方法是使用HttpWebRequest向www.bestbuy.com或任何网站发送get请求。它返回的是完整的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
});

//注意:wv=webview

编辑:正如所指出的,最好的方法是获取/请求一个api。我很惊讶地看到那个网站泥瓦匠为百思买开发商指出。就我个人而言,我只尝试过与汽车零部件商店合作,他们要么笑着说我买不起,要么不知道我要什么,然后挂断电话(给公司打电话时)。

编辑2:在我的代码中,使用的站点是autozone。我不得不使用chrome开发工具(f12)来获取用户名、密码和按钮名称。通过开发人员工具,您还可以查看从计算机发送到站点/服务器的内容。这允许您使用post/get和HttpWebRequest重新创建所有内容并模拟javascript输入和操作。