第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何通過填充一些輸入文本來抓取網(wǎng)站并單擊 .NET Core C# 中的提交按鈕

如何通過填充一些輸入文本來抓取網(wǎng)站并單擊 .NET Core C# 中的提交按鈕

C#
萬千封印 2022-11-21 20:48:44
我正在抓取一個在經(jīng)典 asp.net 中完成的網(wǎng)站。它有 2 個帶 ID 的字段。一個是輸入文本,另一個是按鈕。我需要填寫輸入框并單擊按鈕。并得到回應。該按鈕是提交類型。我使用的是 HTML Agility 包。但是僅僅填寫輸入框并點擊按鈕是不夠的。代碼示例是:'            <table class="MainTable">                <tbody>                <tr>                    <td class="styleIndent">&nbsp;</td>                    <td class="Labels"><span id="ctl00_MainContent_lblLastName" class="fieldHeader" for="ctl00_MainContent_txtLastName">Name:</span></td>                    <td class="styleColumnBody">                        <input name="ctl00$MainContent$txtLastName" type="text" value="sberbank" maxlength="250" id="ctl00_MainContent_txtLastName" tabindex="2" title="Enter name as search criteria." style="width:200px;">                    </td>                    <td class="Labels"><span id="ctl00_MainContent_lblCity" class="fieldHeader" for="ctl00_MainContent_txtCity">City:</span></td>                    <td class="styleColumnBody">                        <input name="ctl00$MainContent$txtCity" type="text" maxlength="250" id="ctl00_MainContent_txtCity" tabindex="6" title="Enter city name as search criteria." style="width:200px;">                    </td>                </tr>                <tr>                    <td class="Labels"></td>                    <td style="text-align: left">                        <input type="submit" name="ctl00$MainContent$btnSearch" value="Search" id="ctl00_MainContent_btnSearch" tabindex="9" style="font-weight:normal;height:22px;width:96px;">&nbsp;&nbsp;                        <input type="submit" name="ctl00$MainContent$btnReset" value="Reset" id="ctl00_MainContent_btnReset" tabindex="10" style="font-weight:normal;height:22px;width:96px;">                    </td>                </tr>            </tbody></table>'這是一個經(jīng)典的 .Net,其中頁面在單擊按鈕時重新加載 ( ctl00_MainContent_btnSearch )。所以通過檢查頁面很難知道任何事情:
查看完整描述

3 回答

?
慕虎7371278

TA貢獻1802條經(jīng)驗 獲得超4個贊

Html Agility Pack 旨在解析、查詢和操作 HTML DOM。某種爬蟲將是它的用例。但是您想真正運行http 請求、javascript 事件或這些按鈕后面的任何內(nèi)容。具有大多數(shù)功能的最簡單方法是遠程控制網(wǎng)絡(luò)瀏覽器。


首先安裝 Selenium 和瀏覽器驅(qū)動程序。我在這里使用 Firefox,因為它是免費的、開源的并且關(guān)注隱私:


Install-Package Selenium.WebDriver

Install-Package Selenium.Firefox.WebDriver

下載瀏覽器的驅(qū)動程序可執(zhí)行文件。可以在 github 上找到 Firefox gecko 驅(qū)動程序:https ://github.com/mozilla/geckodriver/releases/download/v0.24.0/geckodriver-v0.24.0-win64.zip如果帖子變舊,版本概述:https:// github.com/mozilla/geckodriver/releases


現(xiàn)在執(zhí)行存檔并將其路徑復制到變量:


string geckoDriverPath = @"D:\Downloads\geckodriver-v0.24.0-win64";

我們準備開始使用 Firefox。一個簡單的例子,在 stackoverflow 的搜索字段中輸入一些查詢,然后單擊右側(cè)的搜索按鈕:


using OpenQA.Selenium;

using OpenQA.Selenium.Firefox;

using OpenQA.Selenium.Support.UI;

using System;


class Program {

    static void Main(string[] args) {

        string geckoDriverPath = @"D:\Downloads\geckodriver-v0.24.0-win64";

        using (var driver = new FirefoxDriver(geckoDriverPath)) {

            driver.Navigate().GoToUrl("https://stackoverflow.com");

            var searchBox = driver.FindElementByCssSelector("#search .js-search-field");

            searchBox.SendKeys("Selenium");


            var searchButton = driver.FindElementByCssSelector("#search .js-search-submit");

            searchButton.Click();

            Console.Read();

        }

    }

}

請耐心等待,初始化瀏覽器可能需要幾秒鐘。


根據(jù)您單擊按鈕的作用,可能還有其他方法。如果是某種 http 請求(表單或 ajax 調(diào)用),您可以手動發(fā)送。這更快,節(jié)省資源,您可以輕松地無頭運行它。但這更難實現(xiàn)。特別是在需要從頁面源中提取 id 等數(shù)據(jù)的復雜頁面上。如果您關(guān)心性能和資源,則可以考慮這一點。


查看完整回答
反對 回復 2022-11-21
?
紫衣仙女

TA貢獻1839條經(jīng)驗 獲得超15個贊

使用無頭鍍鉻怎么樣?您可以導航到網(wǎng)頁并根據(jù)需要進行任何操作。


https://github.com/kblok/puppeteer-sharp


// lauch browser and save in variable

var _browser = await Puppeteer.LaunchAsync(new LaunchOptions

{

    Headless = true,

    ExecutablePath = _config.ChromePath, // get path to chrome executable

});

// go to page

var _page = await _browser.NewPageAsync();

var page.GoToAsync("http://www.example.com");


// click on form input 

await _page.ClickAsync("#name");

// set data

await _page.Keyboard.SendCharacterAsync("John");

// submit form

await _page.ClickAsync("#SubmitButton");


查看完整回答
反對 回復 2022-11-21
?
呼啦一陣風

TA貢獻1802條經(jīng)驗 獲得超6個贊

如果表單是標準的HTML表單,可以獲取回傳url,然后自己post表單數(shù)據(jù)。本質(zhì)上,您正在執(zhí)行按鈕通常會執(zhí)行的操作,而不是填寫表單本身。


要使其正常工作,您需要發(fā)布到的 URL 以及發(fā)布回服務器的元素的名稱。您可以通過任何 Web 檢查器工具輕松獲得它。擁有它后,您可以執(zhí)行以下操作:


var request = (HttpWebRequest)WebRequest.Create(uri);

request.Method = HttpMethod.Post.ToString();

request.ContentType = "application/json";


// replace name1, name2, value1, value2 with the 

// key value pairs that need to be posted.

var content = $"{name1}={value1}&{name2}={value2}"


using (var writer = new StreamWriter(request.GetRequestStream()))

{

    writer.Write(content);

}


request.ContentLength = content.Length;

using (var response = (HttpWebResponse)request.GetResponse())

{

    var encoding = Encoding.GetEncoding(response.CharacterSet);


    using (var responseStream = response.GetResponseStream())

    {

        using (var reader = new StreamReader(responseStream, encoding))

        {

            return reader.ReadToEnd();

        }

    }

}

如果您使用的是 .NET 4.5 或更高版本,則可以使用HttpClient類,這使這變得更加簡單:


var httpClient = new HttpClient();

response = await httpClient.PostAsync(uri, new StringContent(data));


response.EnsureSuccessStatusCode();


string content = await response.Content.ReadAsStringAsync();


查看完整回答
反對 回復 2022-11-21
  • 3 回答
  • 0 關(guān)注
  • 158 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號