mrgloom
Июнь 25, 2012 11:08:08
есть страница, на странице есть кнопка по нажатию которой ajax генерит ссылку, т.е. в исходном коде страницы ссылки нет, по ссылке фотография.
вопрос как возможно получить ссылку?
получилось осуществить это с помощью селениум, но во-первых непонятно почему надо выставлять ожидание до того как страница загрузится вручную(ибо похоже бывают проблемы с угадыванием этого времени), затем алгоритм такой, что открывается браузер, нажимается ссылка, в фф почему то открывается новое окно, потом я перехожу на это новое окно(с ссылкой на картинку) и получаю адрес текущей страницы, которая и является ссылкой на картинку, затем передаю это дело в urllib и сохраняю на диск.
не нравится, то, что браузер открывается закрывается на каждый запрос, нельзя ли его как то спрятать, + мне кажется что как то это всё медленно происходит.
но если всё это нельзя исправить, то можно ли запускать в несколько потоков код? или хотя бы запустить N одинаковых скриптов сразу, или скомпилировать и запустить несколько инстансов экзешника? т.е. не будет ли пробелм к обращению к одному и тому же браузеру или с селениумом?
romis
Июнь 26, 2012 01:34:45
Проще посмотреть что происходит по нажатию кнопки и сделать тоже самое на Python. Хорошо бы на страничку глянуть.
Selenium это медленно и по этому только для тяжелых случаев. У меня несколько одинаковых скриптов работало одновременно на Linux без проблем.
mrgloom
Июнь 26, 2012 08:45:44
romis
У меня несколько одинаковых скриптов работало одновременно на Linux без проблем.
ну а как вы это делали?
romis
Проще посмотреть что происходит по нажатию кнопки и сделать тоже самое на Python.
задача получить сслыку по кнопке “загрузить оригинал на диск” для картинки в VK (без авторизации)
romis
Июнь 26, 2012 15:29:04
>ну а как вы это делали?
Запускал из разных папок.
Если выдрать image_id из исходного кода страницы то можно получить несколько ссылок так
import urllib
import urllib2
image_id = '1_219406272'
post_url = 'http://a6e.qjtv.e.s35.hideme.ru/al_photos.php'
header = {
'User-Agent' : 'Mozilla/4.0 (Windows; MSIE 6.0; Windows NT 5.0)',
'Accept' : 'text/html',
'Keep-Alive' : '115',
'Connection' : 'keep-alive',
'Accept-Charset' : 'windows-1251,utf-8;q=0.7,*;q=0.7',
'X-Requested-With' : 'XMLHttpRequest',
'Referer' : 'http://a6e.qjtv.e.s35.hideme.ru/durov?z=albums1'}
post_data = urllib.urlencode({
'act' : 'show',
'al' : '1',
'list' : 'photos1',
'module' : 'profile',
'photo' : image_id
})
req = urllib2.Request(post_url, post_data, header)
res = urllib2.urlopen(req, timeout=50).read().replace('\/', '/').split(image_id)[1].split('"id"')[0]
f = open('test.html', 'w')
f.write(res)
f.close()
В ответе должны быть ссылки на фото.
mrgloom
Июль 14, 2012 10:36:55
дело в том, что как я понял по вашему коду в test.html будет не распарсенный список ссылок на изображение это я и так могу получить, но мне надо получить самую большую фотографию, которая обычно имеет префикс w_, но не всегда и чем это определяется непонятно(видимо тем что в разное время были разные стандарты) и поэтому по кнопке “загрузить оригинал на диск” выдает разные типы ссылок в общем случае.
мне как бы надо сэмулировать нажатие на эту кнопку, только я не знаю можно ли это сделать без браузера.
romis
Июль 14, 2012 22:22:15
При нажатии на кнопку происходит примерно то что в коде выше, осталось выбрать ссылку и скачать файл. Как выбрать ссылку не знаю. Возможно придется поковырять JavaScript. Я использую Firefox+Firebug для “посмотреть что делает браузер”.
Selenium нажмет на кнопку легко но скрыть окно браузера врядли удастся.
GaiveR
Июль 15, 2012 09:17:36
А использовать vk_api возможности нету? Было бы очень удобно
http://vk.com/developers.php?oid=-1&p=photos.getById
mrgloom
Авг. 8, 2012 15:29:06
А использовать vk_api возможности нету?
нет такой возможности нету, т.к. надо логиниться.
Я использую Firefox+Firebug для “посмотреть что делает браузер”.
не очень понятно, что вы под этим имеете ввиду и как это можно сэмулировать на питоне.
romis
Авг. 9, 2012 02:25:43
Браузер же что то отправляет что то получает. Все это можно подсмотреть и реализовать на питоне.
По поводу использования selenium без окна браузера есть возможнось уменьшить размер окна до нуля set_window_size(0, 0)
mrgloom
Авг. 9, 2012 10:36:28
возможен вариант(при использовании селениума), когда браузер не успел загрузить страницу?
или там “оно само” ждет сколько нужно до загрузки?
теоретически ведь можно и селениум с использованием прокси пускать в несколько потоков?
еще вопрос, нужно получить дату загрузки фото,а там это тоже походу через ajax.preload делается.
т.е. через xpath походу это нельзя выцепить, можно наверно через регулярные выражения.