Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 25, 2012 11:08:08

mrgloom
От:
Зарегистрирован: 2010-07-22
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

selenium без открытия окна браузера и в несколько потоков

есть страница, на странице есть кнопка по нажатию которой ajax генерит ссылку, т.е. в исходном коде страницы ссылки нет, по ссылке фотография.

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

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

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



___________________________________________________________________________________________
http://www.lfd.uci.edu/~gohlke/pythonlibs/
https://bitbucket.org/pypy/compatibility/wiki/Home

Офлайн

#2 Июнь 26, 2012 01:34:45

romis
От:
Зарегистрирован: 2010-10-04
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

selenium без открытия окна браузера и в несколько потоков

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

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



Офлайн

#3 Июнь 26, 2012 08:45:44

mrgloom
От:
Зарегистрирован: 2010-07-22
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

selenium без открытия окна браузера и в несколько потоков

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

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

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



___________________________________________________________________________________________
http://www.lfd.uci.edu/~gohlke/pythonlibs/
https://bitbucket.org/pypy/compatibility/wiki/Home

Офлайн

#4 Июнь 26, 2012 15:29:04

romis
От:
Зарегистрирован: 2010-10-04
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

selenium без открытия окна браузера и в несколько потоков

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



Если выдрать 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()

В ответе должны быть ссылки на фото.



Офлайн

#5 Июль 14, 2012 10:36:55

mrgloom
От:
Зарегистрирован: 2010-07-22
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

selenium без открытия окна браузера и в несколько потоков

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

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



___________________________________________________________________________________________
http://www.lfd.uci.edu/~gohlke/pythonlibs/
https://bitbucket.org/pypy/compatibility/wiki/Home

Офлайн

#6 Июль 14, 2012 22:22:15

romis
От:
Зарегистрирован: 2010-10-04
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

selenium без открытия окна браузера и в несколько потоков

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


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




Офлайн

#7 Июль 15, 2012 09:17:36

GaiveR
От:
Зарегистрирован: 2011-08-13
Сообщения: 122
Репутация: +  16  -
Профиль   Отправить e-mail  

selenium без открытия окна браузера и в несколько потоков

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



Офлайн

#8 Авг. 8, 2012 15:29:06

mrgloom
От:
Зарегистрирован: 2010-07-22
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

selenium без открытия окна браузера и в несколько потоков

А использовать vk_api возможности нету?
нет такой возможности нету, т.к. надо логиниться.


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



___________________________________________________________________________________________
http://www.lfd.uci.edu/~gohlke/pythonlibs/
https://bitbucket.org/pypy/compatibility/wiki/Home

Отредактировано mrgloom (Авг. 8, 2012 15:29:24)

Офлайн

#9 Авг. 9, 2012 02:25:43

romis
От:
Зарегистрирован: 2010-10-04
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

selenium без открытия окна браузера и в несколько потоков

Браузер же что то отправляет что то получает. Все это можно подсмотреть и реализовать на питоне.

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



Офлайн

#10 Авг. 9, 2012 10:36:28

mrgloom
От:
Зарегистрирован: 2010-07-22
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

selenium без открытия окна браузера и в несколько потоков

возможен вариант(при использовании селениума), когда браузер не успел загрузить страницу?
или там “оно само” ждет сколько нужно до загрузки?

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


еще вопрос, нужно получить дату загрузки фото,а там это тоже походу через ajax.preload делается.
т.е. через xpath походу это нельзя выцепить, можно наверно через регулярные выражения.



___________________________________________________________________________________________
http://www.lfd.uci.edu/~gohlke/pythonlibs/
https://bitbucket.org/pypy/compatibility/wiki/Home

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version