zonefile-extract icon indicating copy to clipboard operation
zonefile-extract copied to clipboard

Use this in powershell

Open asmith3006 opened this issue 4 years ago • 1 comments

I wanted to give you this as your JS is the basis of my Powershell script.

This uses Selenium to iterate through your domain list and get the DNS. This will output a series of .zone files based on your script.

Feel free to use this as you wish.

$Username = ""
$Password = ""

$Script = @"
// CONFIG BEGIN
var defaultTTL = 300;
// CONFIG END
 
var table = document.getElementsByClassName('advanced_dns')[0];
var rows = table.getElementsByTagName('tr');
var i, len, row;
var hostname, type, priority, ttl, destination;
var output = '';
 
//output += '`$TTL ' + defaultTTL + '\n'; // start with default TTL
 
// skip header and last two rows (add new entry, delete all entries)
for (i = 1, len = rows.length - 2; i < len; i++) {
  row = rows[i];
  hostname = row.getElementsByClassName('dns_hostname')[0].innerText;
  type = row.getElementsByClassName('dns_type')[0].innerText;
  priority = row.getElementsByClassName('dns_priority')[0].innerText;
  ttl = row.getElementsByClassName('dns_ttl')[0].innerText || defaultTTL;
  destination = row.getElementsByClassName('dns_data')[0].title;
 
  if (type === 'TXT/SPF') {
    type = 'TXT';
    destination = '"' + destination + '"';
  }
 
  output += [hostname, ttl, 'IN', type, priority, destination].join(' ') + '\n';
}
return output;
"@

$Enter = ([OpenQA.Selenium.Keys]::Enter)


$Driver = Start-SeFirefox
Enter-SeUrl "https://sso.123-reg.co.uk/?app=ott&path=%2Fsecure" -Driver $Driver

Start-Sleep -Seconds 2

$E = Find-SeElement -Driver $Driver -Id "1"
Send-SeKeys -Element $E -Keys $Username

$E = Find-SeElement -Driver $Driver -Id "2"
Send-SeKeys -Element $e -Keys $Password
Send-SeKeys -Element $e -Keys $Enter

$E = Find-SeElement -Driver $Driver -CssSelector ".UPM__PrivacyModal > div:nth-child(1) > form:nth-child(1) > div:nth-child(1) > div:nth-child(3) > div:nth-child(2) > span:nth-child(2) > span:nth-child(1) > button:nth-child(1) > span:nth-child(1)"
Invoke-SeClick -Element $E


$E = Find-SeElement -Driver $Driver -CssSelector ".UDN__Modal > div:nth-child(1) > button:nth-child(2) > img:nth-child(2)"
Invoke-SeClick -Element $E

$E = Find-SeElement -Driver $Driver -Id "dom_select"

$DomainList = [OpenQA.Selenium.Support.UI.SelectElement]::new($E)
$domains = @()
$DomainList.Options | % {
    $Domains += $_.Text    
}
$domains | % {
    Enter-SeUrl "https://www.123-reg.co.uk/secure/cpanel/manage-dns?domain=$($_)" -Driver $Driver
    $use123 = $Driver.ExecuteScript("return `$('#not_use123ns.hidden').length")
    if ($use123 -eq "1") {
        $Driver.ExecuteScript("`$('#advanced-tab').trigger('click')")
        Start-Sleep -Second 2
        $dns = $Driver.ExecuteScript($Script)
        $dns | out-file -FilePath ".\$($_).zone"
    }
}

asmith3006 avatar Aug 31 '20 21:08 asmith3006

Thanks @asmith3006 that looks great.

I'm not familiar with powershell but perhaps if this could read the javascript from extract.js (with modifications to conditionally return instead of log the output) it would sit nicely alongside. If you fancy making a PR to that effect I'd gladly accept it.

biinari avatar Jul 02 '21 13:07 biinari