jonson1986

Autoit Script quit without any error using InetGet Function

5 posts in this topic

#1 ·  Posted

Hey

I'm trying to use InetGet function to download multiple images from a website, some pages having three images, some pages having 4 images some of them having more...

I wrote belong codes to work with autoit and having issues when autoit find not matching url available then autoit just script stopped without any error and I just want to same all the avaialble images on the website if links are not more left then script should moves on but script just stopped...

Here is complete scenerio

I've so many webpages with random number of images are hosting on those pages, in below code, InetGet able to download first three files easily and when it reaches to 4th link that is missing on the webpage that's why script stopped just but I want autoit to download only those images those are links are available and rest of files needs to be skipped automatically for this page if on the next page 4th link of image avaiable then autoit script needs to download 4th one also.

Furthermore, please help me to download files with it's original names instead of whatever name I want to same them like in InetGet I've to give some name to the file that I'm willind to download instead of original name that is available online.

Please Help me.

Here i my code;

$File6 = @ScriptDir & "\images_source.txt"
$txt6 = FileRead($File6)
$target_source7 = _StringBetween($txt6, 'src="', '"')
if Not @error Then
InetGet ( $target_source7[0], @ScriptDir & '\Description\Image1.jpg'); 1st image download coz link is available 
InetGet ( $target_source7[1], @ScriptDir & '\Description\Image2.jpg'); 2nd image download coz link is available
InetGet ( $target_source7[2], @ScriptDir & '\Description\Image3.jpg'); 3rd image download coz link is available
InetGet ( $target_source7[3], @ScriptDir & '\Description\Image4.jpg'); 4th image not able to download coz link is not available and script just stopped
EndIf

 

Share this post


Link to post
Share on other sites



#2 ·  Posted (edited)

Have you tried:

Do you have a copy of images_source.txt that we can use to get the original file names?

$File6 = @ScriptDir & "\images_source.txt"
$txt6 = FileRead($File6)
$target_source7 = _StringBetween($txt6, 'src="', '"')
if Not @error Then
InetGet ( $target_source7[0], @ScriptDir & '\Description\Image1.jpg', 0, 1); 1st image download coz link is available 
InetGet ( $target_source7[1], @ScriptDir & '\Description\Image2.jpg', 0, 1); 2nd image download coz link is available
InetGet ( $target_source7[2], @ScriptDir & '\Description\Image3.jpg', 0, 1); 3rd image download coz link is available
InetGet ( $target_source7[3], @ScriptDir & '\Description\Image4.jpg', 0, 1); 4th image not able to download coz link is not available and script just stopped
EndIf

 

Edited by Subz

Share this post


Link to post
Share on other sites

#3 ·  Posted

Hey Subz,

Basically I saved website source first into text file that is "images_source.txt" then use the codes next I quoted above but every URL having different number of image-URLs that's why when I removed the code of InetGet of 4th line it works for me on current URL's source code but on next pages I've more image URLs that's why I have to skip rest of images coz If I remove 4th line my script can only download first 3 files and rest of them I've to skip but I want to download all the images that a source code contains. ....So please guide me how can I pass the loop or something similar that can avoid showing me problem what I'm facing now...

Share this post


Link to post
Share on other sites

#4 ·  Posted

Did you try the code I posted above?

Share this post


Link to post
Share on other sites

#5 ·  Posted

Try this code:

#include <Array.au3>
#include <IE.au3>
#include <InetConstants.au3>

Local $oIE = _IECreate("http://www.rodsbyreid.co.nz/gallery.html")
Local $oImages = _IEImgGetCollection($oIE)
Local $aImages[0][2]
Local $hImage, $sImage, $sGallery = @ScriptDir & '\Description\'
For $oImage In $oImages
    $sImage = $sGallery & Execute("'" & StringRegexpReplace(StringTrimLeft($oImage.src, StringInStr($oImage.src, "/", 0, -1)), "%([0-9a-fA-F]{2})", "'& Chr(0x$1) &'") & "'")
    _ArrayAdd($aImages, $oImage.src & "|" & $sImage)
Next
_ArrayAdd($aImages, "http://www.rodsbyreid.co.nz/noimageexists.jpg|" & $sGallery & "\noimageexists.jpg")
_ArrayDisplay($aImages)
If FileExists($sGallery) = 0 Then DirCreate($sGallery)
For $i = 0 To UBound($aImages) - 1
    If FileExists($aImages[$i][1]) = 0 Then
        $hImage = InetGet($aImages[$i][0], $aImages[$i][1], $INET_FORCERELOAD, $INET_DOWNLOADBACKGROUND)
        Do
            Sleep(250)
        Until InetGetInfo($hImage, $INET_DOWNLOADCOMPLETE) Or InetGetInfo($hImage, $INET_DOWNLOADERROR )
    EndIf
Next

_IEQuit($oIE)
Exit

 

Share this post


Link to post
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

  • Similar Content

    • Dante_t
      By Dante_t
      Hi Guys, I need help. I have searched the forum before posting and i couldn't find anything. The code below works fine when downloading files from "http" sites, but when trying to download from "https" sites, no files are downloaded. I tried different sites and I experience the same problem everywhere. Is there something I'm missing or doing wrong? Please note that I'm not a programmer and I'm new to this. I'm just using logic wherever i can to get things done. your help will be highly appreciated.
       
      #include <InetConstants.au3>
      #include <MsgBoxConstants.au3>
      #include <WinAPIFiles.au3>
      ; Download a file in the background.
      ; Wait for the download to complete.

      Example()
      Func Example()
          ; Save the downloaded file to the temporary folder.
          Local $sFilePath = "d:\"
          ; Download the file in the background with the selected option of 'force a reload from the remote site.'
          Local $hDownload = InetGet("https://en.wikipedia.org/wiki/HTTPS#/media/File:Internet2.jpg", $sFilePath& "Internet2.jpg", $INET_FORCERELOAD, $INET_DOWNLOADBACKGROUND)
          ; Wait for the download to complete by monitoring when the 2nd index value of InetGetInfo returns True.
          Do
              Sleep(250)
          Until InetGetInfo($hDownload, $INET_DOWNLOADCOMPLETE)
          ; Retrieve the number of total bytes received and the filesize.
          Local $iBytesSize = InetGetInfo($hDownload, $INET_DOWNLOADREAD)
          Local $iFileSize = FileGetSize($sFilePath&"Internet2.jpg")
          ; Close the handle returned by InetGet.
          InetClose($hDownload)
          ; Display details about the total number of bytes read and the filesize.
          MsgBox($MB_SYSTEMMODAL, "", "The total download size: " & $iBytesSize & @CRLF & _
                  "The total filesize: " & $iFileSize)
          ; Delete the file.
          ;FileDelete($sFilePath)
      EndFunc   ;==>Example
       
    • swatsapkraz
      By swatsapkraz
      First script here. Thanks for taking the time.
      I want to download a file from my dropbox or other cloud file host and I want autoit to read the file and proceed.
      Here are the references I've gone through, it's just I'm not familiar yet with autoit so I'm looking for advice:
      https://www.autoitscript.com/autoit3/docs/functions/InetGet.htm
      https://www.autoitscript.com/autoit3/docs/functions/FileRead.htm
       
      How would I start out downloading a text file from dropbox and if in the file there is a 1 then it will proceed with the rest of the script if there is a 0 or if the file cannot be downloaded I want it to just end.
       
      Thank you for taking the time to read this and I apologize in advance if this seems very trivial for some but this is my first script and I'm hoping this is the correct place to ask this question.
    • 31290
      By 31290
      Hi Guys, 
      Since I'm able to get a Dell equipment warranty status thanks to my API key, I'm using an UDF to extract data from an XML file and get the end date. > 
      Thing is, when using InetGet, the original file is in JSON format and the UDF is not working anymore, even if I download the file with the xml extension. Therefore, and when I manually download the page with Chrome, I have a proper XML file where the UDF is working fine.
      Here's my code:
      I even tried to convert the json to xml > https://www.autoitscript.com/forum/topic/185717-js-json-to-xml/
      I took a look here https://www.autoitscript.com/forum/topic/104150-json-udf-library-fully-rfc4627-compliant/ but I don't understand anything :/
       
      The XML read UDF is just perfect for my needs but I'm stuck here... 
      Thanks for any help you can provide
      -31290-
      3MTXM12.json
      3MTXM12.xml
    • Dent
      By Dent
      Hi everyone,
      My script uses IE11 on Win7 to log in to a site and enters data into a couple of forms. Upon clicking a link this data is used by the site to generate a PDF report.
      With my current set-up if I do this manually the PDF opens in a new IE tab and I can download or print it. If I right-click the link that creates the PDF and choose Save Target As the PDF is generated and the Open/Save As dialogue at the bottom of the screen opens. All good.
      However I would like the script to automatically download the PDF and close IE and then exit. Closing IE (_IEQuit) and exiting the script are easy enough, but I'm struggling getting the script to download the PDF.
      The link to generate the PDF contains a unique number each time the page with the link is reached, so it's not static. The link position however, using _IELinkGetCollection I can tell the link to generate the PDF is always the 10th one from the end of the page, so using $iNumLinks - 10 I am able to click the link.
      What I believe I need to use is InetGet however the problem I've been facing is that the link isn't static and I haven't worked out a way to access the link by index - is this possible?
      Here is the website HTML for the section containing the link although I don't think it's of much use but it at least shows the format of the link (I can't post a link as it's a password protected area)...
      <div class="rmButton right"><a title="Generates a PDF version of the market report in a new window." href="/rmplus/generatePdf?mr_id=60991" target="_blank">print/save as pdf</a></div> The full link https://www.rightmove.co.uk/rmplus/generatePdf?mr_id=60991 just for completeness - visiting it will give a HTTP 500 unless logged in.
      And here is the code that clicks this link opening the generated PDF in a new tab...
      $oLinks = _IELinkGetCollection($oIE) $iNumLinks = @extended $PrintPDF = _IELinkClickByIndex($oIE, ($iNumLinks - 10)) So, how to use InetGet to visit that link? Or is there a way to Save As the newly opened tab? I've tried _IEAction($oIE, "saveas") but it seems not to work in a tab containing only a PDF.
    • Muhammad_Awais_Sharif
      By Muhammad_Awais_Sharif
      I am using this code to Download a file 
      I don't know correct way of checking error during downloading
      Global $DownloadStatus = InetGet($url, $fileName, Default, $INET_DOWNLOADBACKGROUND) While 1 $ArrayOFDownloadStatuts = InetGetInfo($DownloadStatus) If Not $ArrayOFDownloadStatuts[4] = 0 Then MsgBox(0,"Error","Error During Downloading") ExitLoop EndIf If $ArrayOFDownloadStatuts[2] Then MsgBox(0,"","Compelted") ExitLoop EndIf WEnd I am using that code but don't know why it gives error during downloading the file 

      is it wrong way of checking error or is there network error on my pc ?  
      thank you