I would post this in the 'Examples' forum but I'm new here & haven't met the restriction requirements for posting there.
Anyway, since Comcast has imposed a 250gb / month limit I wanted an easy way to check my usage. My router contains the info but it isn't accurate. I'm not particularly keen on logging into their site every day, so I made a script that does it instead. I've compiled this as an EXE & run it via Windows Task Scheduler, and it works great.
Thanks to other posters on the board, in particular the _INetSmtpMailCom function!
Script: Comcast Internet Usage Script
What it does: When executed, logs into Comcast.net, reads your current internet usage, emails you that information, then quits IE.
Intended Use: Run via Task Scheduler to receive daily reports
Plain Text
#include <IE.au3> #include <file.au3> ;################################## ; Variables ;################################## ;Comcast.net user&password $sUsername = "user@comcast.net" ;comcast username $sPassword = "password" ;comcast password ;SMTP information $SmtpServer = "smtp.gmail.com" ; address for the smtp-server to use - REQUIRED $FromName = "From Me" ; name from who the email was sent $FromAddress = "user@gmail.com" ; address from where the mail should come $ToAddress = "user@gmail.com" ; destination address of the email - REQUIRED $Subject = "Comcast Internet Usage" ; subject from the email - can be anything you want it to be $Username = "user@gmail.com" ; username for the account used from where the mail gets sent - REQUIRED $Password = "password" ; password for the account used from where the mail gets sent - REQUIRED ;$IPPort = 25 ; port used for sending the mail ;$ssl = 0 ; enables/disables secure socket layer sending - put to 1 if using httpS $IPPort=465 ; GMAIL port used for sending the mail $ssl=1 ; GMAILenables/disables secure socket layer sending - put to 1 if using httpS ;################################## ; Comcast Script ;################################## ; Open Comcast usage page redirector - checks for u/p $oIE = _IECreate("https://login.comcast.net/login?forceAuthn=1&continue=%2fSecure%2fUsers.aspx&s=ccentral-cima&r=comcast.net") ; Get pointers to the login form and username and password fields $oform = _IEFormGetObjByName($oIE, "login-form") $ologin = _IEFormElementGetObjByName($oform, "user") $opassword = _IEFormElementGetObjByName($oform, "passwd") ; Set field values and submit the form _IEFormElementSetValue($ologin, $sUsername) _IEFormElementSetValue($opassword, $sPassword) _IEFormSubmit($oform, 0) ; Comcast uses several redirects, fooling IELoadWait. So check if IE is busy, and if the page is the correct page. IsLoading page is below $obusy = _IEPropertyGet ( $oIE, "busy" ) While $obusy _IELoadWait($oIE, 1000) $opage = IsLoading($oIE) While $opage _IELoadWait($oIE, 1000) $opage = IsLoading($oIE) WEnd $obusy = _IEPropertyGet ( $oIE, "busy" ) WEnd ; Check the usage $ousage = _IEGetObjById ($oIE, "ctl00_ctl00_ContentArea_PrimaryColumn2Content_ctl00_ctl01_UsageGraphLegend") $oused = _IEPropertyGet($ousage, "innerhtml") ; Prepare the email message $Body = "As of today, you have used the following bandwidth:<br /><b>" & $oused & "</b>" ; First line of message $AttachFiles = "" ; the file you want to attach- leave blank if not needed $CcAddress = "" ; address for cc - leave blank if not needed $BccAddress = "" ; address for bcc - leave blank if not needed $Importance = "Normal" ; Send message priority: "High", "Normal", "Low" ; Email the message. Uncomment If Comment to see error messages Global $oMyRet[2] Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc") $rc = _INetSmtpMailCom($SmtpServer, $FromName, $FromAddress, $ToAddress, $Subject, $Body, $AttachFiles, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl) ; If @error Then ; MsgBox(0, "Error sending message", "Error code:" & @error & " Description:" & $rc) ; EndIf ; Quit IE to automate this _IEQuit ($oIE) ;################################## ; IsLoading Script ;################################## Func IsLoading($o_IE) $o_page = _IEPropertyGet ( $oIE, "locationurl" ) $loading = True If $o_page = "https://customer.comcast.com/Secure/Users.aspx" Then $loading = False Return $loading EndFunc ;################################## ; Mail Script ;################################## Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Importance="Normal", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 0) Local $objEmail = ObjCreate("CDO.Message") $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>' $objEmail.To = $s_ToAddress Local $i_Error = 0 Local $i_Error_desciption = "" If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress $objEmail.Subject = $s_Subject If StringInStr($as_Body, "<") And StringInStr($as_Body, ">") Then $objEmail.HTMLBody = $as_Body Else $objEmail.Textbody = $as_Body & @CRLF EndIf If $s_AttachFiles <> "" Then Local $S_Files2Attach = StringSplit($s_AttachFiles, ";") For $x = 1 To $S_Files2Attach[0] $S_Files2Attach[$x] = _PathFull($S_Files2Attach[$x]) ConsoleWrite('@@ Debug(62) : $S_Files2Attach = ' & $S_Files2Attach & @LF & '>Error code: ' & @error & @LF);### Debug Console If FileExists($S_Files2Attach[$x]) Then $objEmail.AddAttachment ($S_Files2Attach[$x]) Else ConsoleWrite('!> File not found to attach: ' & $S_Files2Attach[$x] & @LF) SetError(1) Return 0 EndIf Next EndIf $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer If Number($IPPort) = 0 then $IPPort = 25 $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort ;Authenticated SMTP If $s_Username <> "" Then $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password EndIf If $ssl Then $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True EndIf ;Update settings $objEmail.Configuration.Fields.Update ; Set Email Importance Switch $s_Importance Case "High" $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "High" Case "Normal" $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Normal" Case "Low" $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Low" EndSwitch $objEmail.Fields.Update ; Sent the Message $objEmail.Send If @error Then SetError(2) Return $oMyRet[1] EndIf $objEmail="" EndFunc ;==>_INetSmtpMailCom ; ; ; Com Error Handler Func MyErrFunc() $HexNumber = Hex($oMyError.number, 8) $oMyRet[0] = $HexNumber $oMyRet[1] = StringStripWS($oMyError.description, 3) ConsoleWrite("### COM Error ! Number: " & $HexNumber & " ScriptLine: " & $oMyError.scriptline & " Description:" & $oMyRet[1] & @LF) SetError(1); something to check for when this function returns Return EndFunc ;==>MyErrFunc





