Last Updated: February 25, 2016
· extofer

Text Based Web Browser for Programmer’s Forum

The Internet is full of distractions, and when you are heads down coding, the last thing you want is a diversion. On the other hand, the Internet is a useful resource when you are in a bind, as when searching online for assistance on a specific exception in your code.

So how can you avoid having the “squirrel” effect when online searching to resolve your problem? To this, I scripted a Text Based Web Browser in PowerShell to search stackoverflow.com for me. For developers on a Windows environment, PowerShell can be seen as a useful productivity tool. Using the Invoke-WebRequest cmdlet, you can send HTTP request to your site of choice and parse the response to your console.

$search = Invoke-WebRequest "http://stackoverflow.com/search?q=$arg"

The cmdlet returns a response that can be filtered and iterated to write out on the console.

$results = $search.links | where href -like "*/questions/*"  
foreach ($result in $results)
  $count += 1 
    if ($result.href -notlike "*/questions/tagged*")
        Write-Host [$count]  -foregroundcolor DarkMagenta
        Write-Host $result.InnerText  

Prefacing the results with a number will allow you to then select a result on your console and invoke another Invoke-WebRequest of the results to read the actual questions and answers to the post you selected on the forum.

$getlink = Read-Host "Select the linkt you want to view" 
[int]$i = $getlink-1
# gets content of the selected post
$var = $results[$i].href
Write-Host You selected $results[$i].InnerText uri $var  
$data = Invoke-WebRequest "http://stackoverflow.com$var"

Write-Host ************ Posted Question ************ 
# write the posted question
$data.ParsedHtml.getElementsByTagName("div") |  Where "id" -match "question-header" | Select -ExpandProperty InnerText  
$data.ParsedHtml.getElementsByTagName("div") |  Where "classname" -match "^question" | Select -ExpandProperty InnerText  

Write-Host ************ Posted Answer ************ 
# write the posted accepted-answer first
$data.ParsedHtml.getElementsByTagName("div") |  Where "classname" -match "answer accepted-answer" | Select -ExpandProperty InnerText  

# write the posted all other answers
$data.ParsedHtml.getElementsByTagName("div") |  Where "classname" -match "answer" | Select -ExpandProperty InnerText  

The pinnacle tip to this is, if you are developing on Visual Studio; why not include this utility on the Visual Studio environment?


Following the How To Add/Edit Environment Variables in Windows 7, you can call your PowerShell script from the Visual Studio Package Manager Console, after all, the PM is a PowerShell console.

How To Add/Edit Environment Variables in Windows 7: http://www.nextofwindows.com/how-to-addedit-environment-variables-in-windows-7/
exto-posh-web source code: https://github.com/extofer/exto-posh-web

Say Thanks