31290 Posted February 15, 2016 Posted February 15, 2016 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") 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 ~~~
JohnOne Posted February 15, 2016 Posted February 15, 2016 #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") 31290 1 AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans.
31290 Posted February 15, 2016 Author Posted February 15, 2016 That was so easy in fact. But hey, thanks a lot: ) ~~~ Doom Shall Never Die, Only The Players ~~~
JohnOne Posted February 15, 2016 Posted February 15, 2016 To be honest you should really be parsing the tables and getting info from them rather than guess work on where the link might be. AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans.
31290 Posted February 15, 2016 Author Posted February 15, 2016 What do you mean? Do you have an example? Thanks ~~~ Doom Shall Never Die, Only The Players ~~~
JohnOne Posted February 15, 2016 Posted February 15, 2016 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.
mikell Posted February 15, 2016 Posted February 15, 2016 (edited) Local $sRead = BinaryToString(InetRead('http://downloads.dell.com/published/pages/latitude-e5450-laptop.html', 1)) ; a funny way Msgbox(0,"link", StringRegExpReplace($sRead, '(?is).*?([^"]+E5450\w+\.exe).*', "http://downloads.dell.com$1")) Edited February 15, 2016 by mikell typo
31290 Posted February 16, 2016 Author Posted February 16, 2016 (edited) Thanks to both of you for giving me help But, there's is something I can't figure out, here's my current code: expandcollapse popupFunc 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 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 February 16, 2016 by 31290 more info ~~~ Doom Shall Never Die, Only The Players ~~~
mikell Posted February 16, 2016 Posted February 16, 2016 (edited) 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 expandcollapse popup#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 February 16, 2016 by mikell 31290 1
31290 Posted February 17, 2016 Author Posted February 17, 2016 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 ~~~
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now