We've also had a need to start up multiple instances of IE, each in
their own process. (This allows us to run multiple scraping sessions to
the same site and not have the session cookies over-ride each other, as
long as the cookies don't have an expiration date which writes them to
the file system.)
Try this function in your app to start up each IE in it's own process:
# This function starts each window as a unique IE process.
# This allows the session cookies set for each IE scrape and
# not overwrite session cookies set in other scraper sessions.
def start_ie
tf = Tempfile.new("scraper")
basename = tf.path.sub(/^.*[\/\\]([^\/\\]*$)/, '\1') # get base
filename
html = sprintf("<html><head><title>%s</title></head></html>", basename)
tf.puts(html)
tf.close
system("start iexplore #{tf.path}")
ie = nil
Watir::until_with_timeout(5) do
begin
ie = Watir::IE.attach(:url, /#{basename}/)
rescue Watir::Exception::NoMatchingWindowFoundException
false
end
end
return ie
end
This does bring up a problem that we've had, however.
If you try to start each IE as a different user then this method doesn't
work, and click_no_wait doesn't work either. Apparently a process
spawned from that IE running as a different user doesn't have the same
permissions as a process running under as the logged in user. The call
to find a window using Windows "Shell.Application" cannot see *any* IE
windows if the spawning process is running as a different user. In
addition, the logged in user cannot see any IE window created by another
user.
We haven't come up with a solution for this problem as it appears to be
a problem in User32.dll used by Shell.Application.
David
Bret Pettichord wrote:
> Lonny Eachus wrote:
>
>> Wow. Seems like an awful lot of work. Why not just use shell to start
>> IE as any user you want using the Windows "RunAs" command, then attach
>> to the window?
>> Two short lines of code.
>>
> In my case i needed to start up several browsers concurrently and in
> this scenario, the only way to attach to them reliably and cleanly is to
> know the process id of each browser. I stole most of the code from Alex
> Verk, so it wasn't really a lot of coding on my part.
>
> If you know of an easier way ("Two short lines of code") to help Marco,
> i'm sure he and others would appreciate seeing it.
>
> Bret
>
> _______________________________________________
> Wtr-general mailing list
> [email protected]
> http://rubyforge.org/mailman/listinfo/wtr-general
>
_______________________________________________
Wtr-general mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/wtr-general