Найти - Пользователи
Полная версия: selenium без открытия окна браузера и в несколько потоков
Начало » Python для экспертов » selenium без открытия окна браузера и в несколько потоков
1 2
mrgloom
есть страница, на странице есть кнопка по нажатию которой ajax генерит ссылку, т.е. в исходном коде страницы ссылки нет, по ссылке фотография.

вопрос как возможно получить ссылку?

получилось осуществить это с помощью селениум, но во-первых непонятно почему надо выставлять ожидание до того как страница загрузится вручную(ибо похоже бывают проблемы с угадыванием этого времени), затем алгоритм такой, что открывается браузер, нажимается ссылка, в фф почему то открывается новое окно, потом я перехожу на это новое окно(с ссылкой на картинку) и получаю адрес текущей страницы, которая и является ссылкой на картинку, затем передаю это дело в urllib и сохраняю на диск.
не нравится, то, что браузер открывается закрывается на каждый запрос, нельзя ли его как то спрятать, + мне кажется что как то это всё медленно происходит.

но если всё это нельзя исправить, то можно ли запускать в несколько потоков код? или хотя бы запустить N одинаковых скриптов сразу, или скомпилировать и запустить несколько инстансов экзешника? т.е. не будет ли пробелм к обращению к одному и тому же браузеру или с селениумом?

romis
Проще посмотреть что происходит по нажатию кнопки и сделать тоже самое на Python. Хорошо бы на страничку глянуть.

Selenium это медленно и по этому только для тяжелых случаев. У меня несколько одинаковых скриптов работало одновременно на Linux без проблем.
mrgloom
romis
У меня несколько одинаковых скриптов работало одновременно на Linux без проблем.
ну а как вы это делали?

romis
Проще посмотреть что происходит по нажатию кнопки и сделать тоже самое на Python.

задача получить сслыку по кнопке “загрузить оригинал на диск” для картинки в VK (без авторизации)

romis
>ну а как вы это делали?
Запускал из разных папок.



Если выдрать 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
дело в том, что как я понял по вашему коду в test.html будет не распарсенный список ссылок на изображение это я и так могу получить, но мне надо получить самую большую фотографию, которая обычно имеет префикс w_, но не всегда и чем это определяется непонятно(видимо тем что в разное время были разные стандарты) и поэтому по кнопке “загрузить оригинал на диск” выдает разные типы ссылок в общем случае.

мне как бы надо сэмулировать нажатие на эту кнопку, только я не знаю можно ли это сделать без браузера.
romis
При нажатии на кнопку происходит примерно то что в коде выше, осталось выбрать ссылку и скачать файл. Как выбрать ссылку не знаю. Возможно придется поковырять JavaScript. Я использую Firefox+Firebug для “посмотреть что делает браузер”.


Selenium нажмет на кнопку легко но скрыть окно браузера врядли удастся.


GaiveR
А использовать vk_api возможности нету? Было бы очень удобно http://vk.com/developers.php?oid=-1&p=photos.getById
mrgloom
А использовать vk_api возможности нету?
нет такой возможности нету, т.к. надо логиниться.


Я использую Firefox+Firebug для “посмотреть что делает браузер”.
не очень понятно, что вы под этим имеете ввиду и как это можно сэмулировать на питоне.
romis
Браузер же что то отправляет что то получает. Все это можно подсмотреть и реализовать на питоне.

По поводу использования selenium без окна браузера есть возможнось уменьшить размер окна до нуля set_window_size(0, 0)
mrgloom
возможен вариант(при использовании селениума), когда браузер не успел загрузить страницу?
или там “оно само” ждет сколько нужно до загрузки?

теоретически ведь можно и селениум с использованием прокси пускать в несколько потоков?


еще вопрос, нужно получить дату загрузки фото,а там это тоже походу через ajax.preload делается.
т.е. через xpath походу это нельзя выцепить, можно наверно через регулярные выражения.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB