簡體   English   中英

Selenium chromedriver 用於從網頁中檢索下拉表數據的當前值並導出到 csv 文件中

[英]Selenium chromedriver for retrieving current value of dropdown table <tbody> data from a Webpage and export in csv file

網址的表結構如下。

<body>
    <div class="marketData-inputSelect">
        <select class="js-select js-optionsDataFilter">
            <option value="total_volume">Total Options</option>
            <option value="equity_volume">Equity Options</option>
            <option value="index_volume">Index/Other Options</option>
        </select>
    </div>
    <table class="marketData-table marketData-table--active marketData-table--border marketData-table--padded marketData-table--auto table-responsive">
        <span class="table-head__cond">
        <thead>
            <tr class="marketData-tableRow">
                <th class="marketData-tableHeading"><span class="text">Exchange</span><!----></th>
                <th class="marketData-tableHeading"><span class="text">Calls</span><!----></th>
                <th class="marketData-tableHeading"><span class="text">Puts</span><!----></th>
                <th class="marketData-tableHeading"><span class="text">P/C Ratio</span><!----></th>
                <th class="marketData-tableHeading"><span class="text">Volume</span><!----></th>
                <th class="marketData-tableHeading"><span class="text">Market Share</span><!----></th>
            </tr>
        </thead></span>
        <tbody>
            <tr class="marketData-tableRow marketData-tableRow--fill">
                <td class="marketData-tableItem">AMEX</td>
                <td class="marketData-tableItem">1,397,381</td>
                <td class="marketData-tableItem">1,261,149</td>
                <td class="marketData-tableItem">0.9</td>
                <td class="marketData-tableItem">2,658,530</td>
                <td class="marketData-tableItem">6.73%</td>
            </tr>
        </tbody><!----><!----><!---->
    </table>
</body>

我正在嘗試的代碼僅獲取第一個選項Total Options數據。 dropdown當前<tbody>數據的其他兩個選項值未獲取。 在每個下拉菜單中, <tbody>數據不同,所有三個菜單的表結構相同,只是數據不同。 你能幫我修改代碼以get current value of dropdown menu在此先感謝!

   var dropdownText = driver.FindElement(By.XPath("//select"));
   var dropdownSelect = new SelectElement(dropdownText);
   var dropdownSelectvalue = dropdownSelect.SelectedOption.GetAttribute("value");
   if (driver.FindElement(By.XPath("//table/span/thead/tr/th")).Displayed)
            {
                IWebElement webElementHead = driver.FindElement(By.XPath("//table/span/thead/tr"));
                IList<IWebElement> ElementCollectionHead = webElementHead.FindElements(By.XPath("//table/span/thead/tr/th"));
                foreach (IWebElement item in ElementCollectionHead)
                {
                    Console.WriteLine(item.Text);
                }
            }
            if (driver.FindElement(By.XPath("//table/tbody/tr")).Displayed)
            {
                IWebElement webElementBody = driver.FindElement(By.XPath("//table/tbody/tr"));
                IList<IWebElement> ElementCollectionBody = webElementBody.FindElements(By.XPath("//table/tbody/tr"));
                foreach (IWebElement item in ElementCollectionBody)
                {
                    string[] arr = new string[4];
                    arr = item.Text.Split(' ');
                    for (int i = 0; i < arr.Length; i++)
                    {
                        Console.WriteLine(arr[i]);
                    }
                }
            }

我正在嘗試在Console中成功顯示所有數據以獲取Total Options 您能否store the data.csv文件中,我正在搜索我們可以使用FileStream執行但無法成功。

FileStream fs =new FileStream((".csv"),FileMode.Create);
StreamWriter sw=new StreamWriter(fs);
sw.WriteLine();
sw.Close();
sw.Dispose();

不確定上面的FileStream代碼。

你應該看看 HTMLAgityPack。 使用 HTMLAgityPack,我會將 driver.Pagesouce 加載到一個新的 HTML 文檔中,然后執行如下操作: var marketData = html.DocumentNode.SelectNodes("//td[@marketData-tableItem']"); . 然后您可以對市場數據運行 for 循環: foreach(var data in marketData){string x = data.innerText;}

下面的代碼是用 Java 編寫的,將此代碼修改為 C#,但您可以使用這些相同的定位器:

driver.get("<URL>");

// to accept cookies        
driver.findElement(By.xpath(".//*[text()='Accept analytic cookies']")).click();
        
// to click on the view button      
driver.findElement(By.cssSelector(".marketData-inputBtn")).click();
        
// to print the headings        
List<WebElement> headings = driver.findElements(By.xpath("(.//*[@class='marketData-resultsSection'])[2]//th/span"));
for (WebElement ele :  headings) {
    System.out.print(ele.getText() + " | ");
}
System.out.println();
        
// to print the data        
List<WebElement> data = driver.findElements(By.xpath("(.//*[@class='marketData-resultsSection'])[2]//td"));
int i = 0;
for (WebElement ele : data) {
    i++;
    System.out.print(ele.getText() + " | ");
    if (i == 6) {
        i = 0;
        System.out.println();
    }
}

輸出:

Exchange | Calls | Puts | P/C Ratio | Volume | Market Share | 
AMEX | 1,829,955 | 1,645,962 | 0.9 | 3,475,917 | 7.23% | 
...
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM