Jump to content

Download a variable link


31290
 Share

Recommended Posts

Hi everyone, 

Following this page:

http://downloads.dell.com/published/pages/latitude-e5450-laptop.html

I have to download the BIOS for the E5440 model. As I don't know in which order Dell will place the description and the link to download the file (also because the 5440 can be put in first) I'd like to make  the following piece of code to search only first the link that deals with the E5440:

(The only thing I'm sure is that the string E5440 will be either in the first or the second position and I need to download the corresponding link)

Local $sRead = InetRead('http://downloads.dell.com/published/pages/latitude-e5450-laptop.html', 1)
ConsoleWrite(BinaryToString($sRead) & @CRLF)
Local $aData = _StringBetween(BinaryToString($sRead), 'Type: BIOS', 'Category:')

TrayTip("", "Downloading latest BIOS Version, please wait...", 10, 3)

Local $aLinks = _StringBetween($aData[0], '<A HREF="/', '"><IMG')

For $i = 0 To UBound($aLinks) - 1
    $aLinks[$i] = 'http://downloads.dell.com/' & $aLinks[$i]
Next

Local $hDownload = InetGet($aLinks[0], @DesktopDir & "\BIOSE5450.exe", $INET_FORCERELOAD, $INET_DOWNLOADBACKGROUND)
 Do
        Sleep(250)
    Until InetGetInfo($hDownload, $INET_DOWNLOADCOMPLETE)
Local $iBytesSize = InetGetInfo($hDownload, $INET_DOWNLOADREAD)
    Local $iFileSize = Round(FileGetSize(@DesktopDir & "\BIOSE5450.exe") / 1048576)
InetClose($hDownload)


MsgBox(0, "",  "The latest E5450 BIOS (" & $iFileSize & " MB) have been downloaded")

2016-02-15_11-40-52.thumb.png.9b950b28c6

I was thinking of an string search in the array but all my attempts failed for now.

Can someone could give me a hand over here.

 

~~~ Doom Shall Never Die, Only The Players ~~~

Link to comment
Share on other sites

#include <String.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIFiles.au3>

Local $sRead = InetRead('http://downloads.dell.com/published/pages/latitude-e5450-laptop.html', 1)
;(BinaryToString($sRead) & @CRLF)
Local $aData = _StringBetween(BinaryToString($sRead), 'Type: BIOS', 'Category:')

TrayTip("", "Downloading latest BIOS Version, please wait...", 10, 3)

Local $aLinks = _StringBetween($aData[0], '<A HREF="/', '"><IMG')
Local $slink = ""

For $i = 0 To UBound($aLinks) - 1
    $aLinks[$i] = 'http://downloads.dell.com/' & $aLinks[$i]
    If StringInStr($aLinks[$i], "E5450") Then
        $slink = $aLinks[$i]
        ExitLoop
    EndIf
Next
Exit

Local $hDownload = InetGet($slink, @DesktopDir & "\BIOSE5450.exe", 1, 1)
Do
    Sleep(250)
Until InetGetInfo($hDownload, 2)
Local $iBytesSize = InetGetInfo($hDownload, 0)
Local $iFileSize = Round(FileGetSize(@DesktopDir & "\BIOSE5450.exe") / 1048576)
InetClose($hDownload)


MsgBox(0, "", "The latest E5450 BIOS (" & $iFileSize & " MB) have been downloaded")

 

AutoIt Absolute Beginners    Require a serial    Pause Script    Video Tutorials by Morthawt   ipify 

Monkey's are, like, natures humans.

Link to comment
Share on other sites

I mean consider the more info you get with...

#include <String.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIFiles.au3>

Local $sRead = InetRead('http://downloads.dell.com/published/pages/latitude-e5450-laptop.html', 1)
;ConsoleWrite(BinaryToString($sRead) & @CRLF)
Local $aData = _StringBetween(BinaryToString($sRead), 'Type: BIOS', 'Category:')

TrayTip("", "Downloading latest BIOS Version, please wait...", 10, 3)

Local $aLinks = _StringBetween($aData[0], '<TR><TD>', '</TD></TR>')
Local $slink = ""

For $i = 0 To UBound($aLinks) - 1
    $aLinks[$i] = 'http://downloads.dell.com/' & $aLinks[$i]
    ConsoleWrite($aLinks[$i] & @LF)
    ;If StringInStr($aLinks[$i], "E5450") Then
    ;   $slink = $aLinks[$i]
    ;   ExitLoop
    ;EndIf
Next

 

AutoIt Absolute Beginners    Require a serial    Pause Script    Video Tutorials by Morthawt   ipify 

Monkey's are, like, natures humans.

Link to comment
Share on other sites

Thanks to both of you for giving me help :)

But, there's is something I can't figure out, here's my current code:

Func f_e5440Drivers()
DirCreate ("C:\Drivers\E5440")

Local $sRead = InetRead('http://downloads.dell.com/published/pages/latitude-e5450-laptop.html', 1)
Local $aDataBIOS = _StringBetween(BinaryToString($sRead), 'Type: BIOS', 'Category: Communications')
Local $aDataGraphics = _StringBetween(BinaryToString($sRead), 'Category: Video', 'Type: Firmware')
Local $aDataNetwork = _StringBetween(BinaryToString($sRead), 'Category: Network', 'Type: Utility')


TrayTip("", "Downloading latest drivers, please wait...", 10, 3)

Local $aLinksBIOS = _StringBetween($aDataBIOS[0], '<TR><TD>', '</TD></TR>')
Local $aLinksGraphics = _StringBetween($aDataGraphics[0], '<TR><TD>', '</TD></TR>')
Local $aLinksNetwork = _StringBetween($aDataNetwork[0], '<TR><TD>', '</TD></TR>')

Local $slinksBIOS = ""
Local $sLinksGraphics = ""
Local $sLinksNetwork = ""


For $i = 0 To UBound($aLinksBIOS) - 1
;~     $aLinksBIOS[$i] = 'http://downloads.dell.com/' & $aLinksBIOS[$i]

    If StringInStr($aLinksBIOS[$i], "E5450") Then
        Local $bLinksBIOS[$i] = _StringBetween($aLinksBIOS[0], '<A HREF="/', '"><IMG')
        $bLinksBIOS[$i] = 'http://downloads.dell.com/' & $bLinksBIOS[$i]
        ConsoleWrite($bLinksBIOS[$i] & @LF)
        ExitLoop
    EndIf
Next

For $i = 0 To UBound($aLinksGraphics) - 1
;~     $aLinksGraphics[$i] = 'http://downloads.dell.com/' & $aLinksGraphics[$i]
    If (StringInStr($aLinksGraphics[$i], "Intel HD, HD 4000/4200/4400/4600/5000/5100/5200/5300/5500 Graphics Driver") AND StringInStr($aLinksGraphics[$i], "Windows 7, 8 and 8.1 32-bit OS")) Then
    Local $bLinksGraphics[$i] = _StringBetween($aLinksGraphics[0], '<A HREF="/', '"><IMG')
        $bLinksGraphics[$i] = 'http://downloads.dell.com/' & $bLinksGraphics[$i]
    ConsoleWrite($bLinksGraphics[$i] & @LF)
;~       $slink = $aLinks[$i]
      ExitLoop
    EndIf
Next

For $i = 0 To UBound($aLinksNetwork) - 1
;~     $aLinksNetwork[$i] = 'http://downloads.dell.com/' & $aLinksNetwork[$i]
    If (StringInStr($aLinksNetwork[0], "Intel 7265/3165/7260/3160 WiFi Driver") AND StringInStr($aLinksNetwork[0], "Windows 7 32-bit")) Then
    Local $bLinksNetwork[$i] = _StringBetween($aLinksNetwork[0], '<A HREF="/', '"><IMG')
        $bLinksNetwork[$i] = 'http://downloads.dell.com/' & $bLinksNetwork[$i]
        ConsoleWrite($bLinksNetwork[$i] & @LF)
    ExitLoop
    EndIf
Next
EndFunc

2016-02-16_17-37-56.png.42ad71e2b9a1d634

I can't understand why the last one is not working as only the variable and what to find has changed... and of course, I double check that what I want to fond for the latest is present on the page. (when I inspect it or if I switch to the page source)

Could you, please help again? Thanks ;)

Edited by 31290
more info

~~~ Doom Shall Never Die, Only The Players ~~~

Link to comment
Share on other sites

Hmm this looks like a great confusion between declaring an array, walking through an array [$i] and selecting the first element of an array [0]
Please try this one and guess what  :)

Edit
BTW be careful with the syntax, $a... is for arrays, $s... for strings, and $b... for booleans

#include <String.au3>
f_e5440Drivers()

Func f_e5440Drivers()

Local $sRead = InetRead('http://downloads.dell.com/published/pages/latitude-e5450-laptop.html', 1)
Local $aDataBIOS = _StringBetween(BinaryToString($sRead), 'Type: BIOS', 'Category: Communications')
Local $aDataGraphics = _StringBetween(BinaryToString($sRead), 'Category: Video', 'Type: Firmware')
Local $aDataNetwork = _StringBetween(BinaryToString($sRead), 'Category: Network', 'Type: Utility')


TrayTip("", "Downloading latest drivers, please wait...", 10, 3)

Local $aLinksBIOS = _StringBetween($aDataBIOS[0], '<TR><TD>', '</TD></TR>')
Local $aLinksGraphics = _StringBetween($aDataGraphics[0], '<TR><TD>', '</TD></TR>')
Local $aLinksNetwork = _StringBetween($aDataNetwork[0], '<TR><TD>', '</TD></TR>')

Local $slinksBIOS = ""
Local $sLinksGraphics = ""
Local $sLinksNetwork = ""


For $i = 0 To UBound($aLinksBIOS) - 1
;~     $aLinksBIOS[$i] = 'http://downloads.dell.com/' & $aLinksBIOS[$i]

    If StringInStr($aLinksBIOS[$i], "E5450") Then
        Local $a2LinksBIOS = _StringBetween($aLinksBIOS[$i], '<A HREF="/', '"><IMG')
        $sLinksBIOS = 'http://downloads.dell.com/' & $a2LinksBIOS[0]
        ConsoleWrite($sLinksBIOS & @LF)
        ExitLoop
    EndIf
Next

For $i = 0 To UBound($aLinksGraphics) - 1
;~     $aLinksGraphics[$i] = 'http://downloads.dell.com/' & $aLinksGraphics[$i]
    If (StringInStr($aLinksGraphics[$i], "Intel HD, HD 4000/4200/4400/4600/5000/5100/5200/5300/5500 Graphics Driver") AND StringInStr($aLinksGraphics[$i], "Windows 7, 8 and 8.1 32-bit OS")) Then
    Local $a2LinksGraphics = _StringBetween($aLinksGraphics[$i], '<A HREF="/', '"><IMG')
        $sLinksGraphics = 'http://downloads.dell.com/' & $a2LinksGraphics[0]
    ConsoleWrite($sLinksGraphics & @LF)
;~       $slink = $aLinks[$i]
      ExitLoop
    EndIf
Next

For $i = 0 To UBound($aLinksNetwork) - 1
;~     $aLinksNetwork[$i] = 'http://downloads.dell.com/' & $aLinksNetwork[$i]
    If (StringInStr($aLinksNetwork[$i], "Intel 7265/3165/7260/3160 WiFi Driver") AND StringInStr($aLinksNetwork[$i], "Windows 7 32-bit")) Then
    Local $a2LinksNetwork = _StringBetween($aLinksNetwork[$i], '<A HREF="/', '"><IMG')
        $sLinksNetwork = 'http://downloads.dell.com/' & $a2LinksNetwork[0]
        ConsoleWrite($sLinksNetwork & @LF)
    ExitLoop
    EndIf
Next
EndFunc

 

Edited by mikell
Link to comment
Share on other sites

mikell, 

For my defense, and I don't know why, I never got used to that... Despite I read help file or so, I don't know, my mind seems to put that away... 

Anyway... Thanks for the tip, for sure this is now working as expected and I can finalize my work.

Regarding the syntax, I know a for arrays, b for booleans, etc... that was just for my not to get lost with all these arrays... :) 

But a good thing is that now, I understand them a bit better :)

Have a great day.

31290

~~~ Doom Shall Never Die, Only The Players ~~~

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...