Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Python: Web

Войти
Регистрация
Восстановить пароль
 
Дмитрий Л
0 / 0 / 0
Регистрация: 03.03.2016
Сообщений: 39
#1

Python, Selenium - как прокликать страницы - Python

17.12.2016, 20:27. Просмотров 418. Ответов 4
Метки нет (Все метки)

Добрый вечер.
Подскажите, пожалуйста, как пройтись по всем страницам на сайте.
Страницы переключаются js скриптом:
<li>
<a href="javascript:__doPostBack('ctl00$MainContent$ucTopDataPager$ctl00$ctl03','')">4</a>
</li>
Сначала видно только 10 страниц, меняются $ctl03(04,05,06 и т.д.)

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from selenium import webdriver
from bs4 import BeautifulSoup
import re
 
driver = webdriver.Chrome(executable_path=r"C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
url = 'http://fedresurs.ru/messages/IsSearching'
 
ef getURLinfo(url):
 
    driver.get(url)
    html = driver.page_source
    next = "ctl00_MainContent_ucTopDataPager"
    soup = BeautifulSoup(html)
    tag = soup.find("div", class_="right")
    while tag.findAll('a', href = True):
        driver.find_element_by_id(next).click()
        soup = BeautifulSoup(driver.page_source)
        print(soup.prettify())
        driver.close()
 
getURLinfo(url)
В таком варианте 10 раз загружаю 1 страницу...
вангую, что сюда driver.find_element_by_id(next).click() нужно передавать ссылку, но не знаю как...

Добавлено через 2 часа 20 минут
для проверки сделал так, 2-10, все равно рефрешит одну и ту же страницу, первую.
Подскажите плз как пройтись по остальным ссылкам?
Python
1
2
3
4
5
   for i in range(2,10):
             driver.find_element_by_xpath('//div/div[2]/table/tbody/tr/td[2]/ul/li' + '[' + str(i) + ']' + '/a').click()
             html = html + driver.page_source
             soup = BeautifulSoup(html)
             print(soup.prettify())
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2016, 20:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Python, Selenium - как прокликать страницы (Python):

Python + Selenium, как переключится на окно? - Python
Вставляю текст в input, он вставляется как комментарий (на скрине видно) Все исправляется когда в ручную кликну мышкой по нему или по...

Selenium+python - Python
Всем привет. Подскажите пожалуйста как работать с выпадающими списками? Пытаюсь сделать так theme = &quot;sirius&quot; themeSelect = ...

python+selenium - Python
Пытаюсь изучать python+selenium (python 2.7, selenium 2), тестирую портал. HTML код тестируюемой страницы &lt;div class=&quot;new_position&quot;&gt; &lt;a...

Python Selenium и FireFox 48+ - Python
Недавно обнаружил что отвалился WebDriver FireFox т.е. раньше работало, а теперь перестало(после обновлений FF вероятно). Открывается...

Добавление Selenium к Python - Python
Помогите разобраться что я делаю не так Добавляю Селениум с помощью пип инстал селениум Питон 2.7.10 (т.е. пип имеется изначально) ...

Как скачивать страницы с сайта и разбирать их в Python 3? - Python
Добрый день, не могу найти где можно скачать библиотеку urllib 2 для python 3.2 Подскажите пожалуйста где ее можно скачать, или другую...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Jabbson
Модератор
Эксперт по компьютерным сетям
3141 / 2219 / 455
Регистрация: 03.11.2009
Сообщений: 7,001
Записей в блоге: 3
18.12.2016, 07:46 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
первых 10 страниц обойти можно так:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
 
 
def get_list(n):  # n page number
    timeout = 3
    try:
        # waiting for the paginator to have current page as class "active" li with span
        element_present = EC.presence_of_element_located((By.XPATH, '//li[@class="active"]/a/span[text()="{}"]'.format(n)))
        WebDriverWait(driver, timeout).until(element_present)
    except TimeoutException:
        print("Timed out waiting for page to load")
 
    # looking for record names and record authors
    lst_divs = driver.find_elements_by_class_name('display-field.message-in-list')
    lst_as = driver.find_elements_by_xpath('//div[starts-with(@id, "ctl00_MainContent_lvMessageList_ctrl")]')
    
    for d, a in zip(lst_divs, lst_as):
        print('\t{} :: {}'.format(d.text, a.text))
 
 
driver = webdriver.Firefox(executable_path='/usr/local/bin/geckodriver')
url = 'http://fedresurs.ru/messages/IsSearching'
 
driver.get(url)
 
# getting last page
a = driver.find_element_by_css_selector('div.right > table.paging td > ul > li:last-child')
last_page = int(a.text)
 
# go over first page
print('Page 1')
get_list(1)
 
# loop thru other pages
for i in range(1, last_page):
    print('Page {}'.format(i+1))
    link = "javascript:__doPostBack('ctl00$MainContent$ucTopDataPager$ctl00$ctl{0:02d}','')".format(i)
    
    # finding next page
    a = driver.find_element_by_xpath('//a[@href="{}"]'.format(link))
    
    # click, wait + parse
    a.click()
    get_list(i+1)
 
driver.close()
дальше в случае необходимости - ткнуть в троеточие и начать все заново.
0
Дмитрий Л
0 / 0 / 0
Регистрация: 03.03.2016
Сообщений: 39
18.12.2016, 14:05  [ТС] #3
Jabbson, круто, спасибо, то что нужно
а можно несколько комментариев по коду, не совсем понимаю пока
и почему мой вариант не так работал как нужно?

Добавлено через 2 часа 16 минут
и еще вопросик, там форма выше, с выпадающим списком - выбрать и ткнуть найти..
с кнопками и кликами более-менее понятно, а как в select подставить значение свое? (или из списка)
0
Jabbson
Модератор
Эксперт по компьютерным сетям
3141 / 2219 / 455
Регистрация: 03.11.2009
Сообщений: 7,001
Записей в блоге: 3
18.12.2016, 16:29 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Обновил с небольшими комментами,

по выпадающему меню:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
from selenium import webdriver
from selenium.webdriver.support.ui import Select
 
 
driver = webdriver.Firefox(executable_path='/usr/local/bin/geckodriver')
url = 'http://fedresurs.ru/messages/IsSearching'
driver.get(url)
 
select = Select(driver.find_element_by_id('ctl00_MainContent_ddlMessageTypeList'))
select.select_by_visible_text('Иные сведения')
 
 
driver.close()
0
Дмитрий Л
0 / 0 / 0
Регистрация: 03.03.2016
Сообщений: 39
19.12.2016, 16:19  [ТС] #5
Jabbson, Спасибо!!))

Добавлено через 15 часов 6 минут
Jabbson,
А не подскажете как с помощью супа разложить тэг тд на пару ключ:значение? На общем примере:
<tr>
<td>name</td>
<td>value</td>
</tr>
На выходе : name:value
У меня получилось все разложить, но только в одну колонку, подряд

Добавлено через 7 часов 43 минуты
Вопрос снят
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.12.2016, 16:19
Привет! Вот еще темы с ответами:

Динамические страницы на python - Python
Здравствуйте! Хотелось бы узнать, подходит ли python для моей задачи? Есть сервер с windows server 2012R2 с ролью веб-сервера на котором...

Python - момент истины. Python - как оружие возмездие против системы - Python
Какие модули в python мне нужны для взлома баз данных? Перехвата информации? Внедрения в систему? Добавлено через 10 минут Хочу...

Как из Python скрипта выполнить другой python скрипт? - Python
Как из Python скрипта выполнить другой python скрипт? Если он находится в той же папке но нужно передать еще передать скрипту аргументы.

Парсинг страницы python и получение запроса (beautifulSoup, requests) - Python
Здравствуйте. Суть проблемы заключается в том, что для парсинга я получаю страницу, где должна быть таблица с данными, но в print(r.text)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.12.2016, 16:19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru