Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
6 / 6 / 0
Регистрация: 23.12.2015
Сообщений: 227

Переключить город на сайте

26.06.2019, 06:59. Показов 2870. Ответов 9

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Подскажите как переключить город на сайте - " http://lekvapteke.ru/ "
Не понимаю как реализовать.

Пробовал- request, selenium, использовать куки.
Ничего не помогло.


P.S. если не сложно, то с примером) Всем заранее Спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.06.2019, 06:59
Ответы с готовыми решениями:

Выбрать другой город на сайте
Доброго времени суток. Пишу парсер. Столкнулся с проблемой => не знаю как переключить город на сайте ( https://vitaexpress.ru/ ) ...

Выбрать другой город на сайте
Доброго времени суток, подскажите как можно реализовать =>Есть код(ниже). Выгружает данные по определенным товарам в файл. 1 проблема,...

Как точно определить город пользователя на сайте
Нужно точно определить автоматом город пользователя, без вывода окна с вопросом о разрешении использования его местоположения. Все должно...

9
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
26.06.2019, 20:53
maksonech, ты будешь смеяться, но можно просто подставить название города в урл
http://tomsk.lekvapteke.ru

если это не устраивает - можно в селениуме сделать
1
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
26.06.2019, 23:58
lxml или bs не определяет города?
0
6 / 6 / 0
Регистрация: 23.12.2015
Сообщений: 227
27.06.2019, 05:37  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
maksonech, ты будешь смеяться, но можно просто подставить название города в урл
http://tomsk.lekvapteke.ru

если это не устраивает - можно в селениуме сделать
Это регионы, а города внутри в url не прописываются )
У меня не получилось их переключить при помощи BS.
0
151 / 86 / 35
Регистрация: 05.08.2017
Сообщений: 257
27.06.2019, 07:42
maksonech, там в html есть один div(смотри скриншот), тебе его нужно из него спарсить названия городов и data-id и сохранить где-нибудь в бд. Далее, когда тебе нужно сменить город, делаешь сначала запрос на "http://lekvapteke.ru/ajaxupdatecity/3", где 3 - это data-id и затем делаешь запрос на сайт
Миниатюры
Переключить город на сайте  
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
27.06.2019, 08:29
Лучший ответ Сообщение было отмечено maksonech как решение

Решение

maksonech, ну ладно, а как ты пробовал селениум?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
 
 
def locator_by_city(name: str) -> str:
    return f'li[data-name="{name}"]'
 
 
try:
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get("http://lekvapteke.ru/")
    driver.find_element_by_class_name("city-selector").click()
    driver.find_element_by_css_selector(locator_by_city('Дивногорск')).click()
    ActionChains(driver).pause(5).perform()  # Это тебе не нужно, просто пауза, чтобы убедиться, что город выбран
finally:
    driver.quit()
1
6 / 6 / 0
Регистрация: 23.12.2015
Сообщений: 227
27.06.2019, 10:48  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
maksonech, ну ладно, а как ты пробовал селениум?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
 
 
def locator_by_city(name: str) -> str:
    return f'li[data-name="{name}"]'
 
 
try:
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get("http://lekvapteke.ru/")
    driver.find_element_by_class_name("city-selector").click()
    driver.find_element_by_css_selector(locator_by_city('Дивногорск')).click()
    ActionChains(driver).pause(5).perform()  # Это тебе не нужно, просто пауза, чтобы убедиться, что город выбран
finally:
    driver.quit()
Python
1
2
3
4
5
6
7
8
9
10
from selenium import webdriver
import time
 
browser = webdriver.Chrome()
browser.get('http://lekvapteke.ru/medicaments/detskiy-panadol')
 
#browser.find_element_by_class_name("header-city-selector").send_keys('Искитим')
browser.find_element_by_xpath('//*[@id="cities-list"]/div[1]/ul/li[2]').find_element_by_name('class').send_keys('active')
time.sleep(20)
browser.quit()
Как-то так пробовал, пробовал с click(), тоже не получалось

Добавлено через 6 минут
Цитата Сообщение от Resistanse Посмотреть сообщение
maksonech, там в html есть один div(смотри скриншот), тебе его нужно из него спарсить названия городов и data-id и сохранить где-нибудь в бд. Далее, когда тебе нужно сменить город, делаешь сначала запрос на "http://lekvapteke.ru/ajaxupdatecity/3", где 3 - это data-id и затем делаешь запрос на сайт
Можете пояснить,
Цитата Сообщение от Resistanse Посмотреть сообщение
делаешь сначала запрос на "http://lekvapteke.ru/ajaxupdatecity/3", где 3 - это data-id и затем делаешь запрос на сайт
, я пытаюсь делать так(все работает):
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
 
import requests,bs4
http='http://'
nameRegion= ['kemerovo.','tomsk.']#,'krasnoyarsk.','abakan.','barnaul.']
nameurl ='lekvapteke.ru/'
search ='searchmedicaments?search='
tovar='Аспирин'
 
counttt=0
for n in nameRegion:
    #print(http+nameRegion[count]+nameurl+search+tovar)
    r = requests.post(http+nameRegion[counttt]+nameurl+search+tovar)
    #print(nameRegion[counttt])
 
    print(http + nameRegion[counttt] + nameurl + search + tovar)
    #data = r.text
    #print(data)
    soup = bs4.BeautifulSoup(r.text, "html.parser")
    nametovar = []
    print(nametovar)
    testdict = []
    tt = []
    t = []
    coount = 0
    e = soup.find('div', {'class': 'analogues-list'}).find_all('a')
    # print(e)
    for g in e:
        # print(g.get('href'))
        t.append(g.get('href'))
 
        coount += 1
    countT = 0
    for nT in t:
        # print(movie_link[0].split('/medicaments/'))
        nametovar.append(t[countT].replace('/medicaments/', ''))
 
        # nametovar[countT].strip(' ')
 
        countT += 1
    #count += 1
    schet = 0
    for tov in nametovar:
        nameMed = nametovar[schet]
        data = requests.get(http+nameRegion[counttt]+nameurl+'ajaxget******cieswithmedicamentshortname/' + nameMed + '/0?shown_elements=0')
        #print(nameRegion[counttt])
        #print(data.url)
        d = data.json()
        y = d["******cies"]
        # print(y)
 
        #colvo = len(y)
 
        cooount = 0
 
        for leng in y:
            e = y[cooount]
            #print(e)
            aptekaName = e['apteka_name']
            # print(aptekaName)
            street = e['street']
            # print(street)
            name = e["name"]
            # print(name)
            place = e["raion"]
            # print(place)
            price = e["price"]
            city = e["city"]
            #print(city)
            manufactory = str(e["manufactory"])
            # print(type(manufactory))
            #ns = '\n'
 
            # print(manufactory)
            if manufactory == 'None':
                manufactory = 'Не Указанно'
                data2 = aptekaName + ';' + street + ';' + name + ' ;' + price + '; ' + city + '; ' + manufactory + ';'
                testdict.append(data2)
            else:
                data2 = aptekaName + ';' + street + ';' + name + ' ;' + price + '; ' + city + '; ' + manufactory + ';'
                testdict.append(data2)
 
            cooount += 1
 
        schet += 1
        #print(city)
 
    counttt += 1
 
 
 
 
 
 
 
print(counttt)
print(len(nameRegion))
И мне не хватало только обработки прочих городов, какой запрос сделать? (get\post) ?
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
27.06.2019, 10:54
Цитата Сообщение от maksonech Посмотреть сообщение
//*[@id="cities-list"]/div[1]/ul/li[2]
за такие локаторы бьют по рукам. вариант с селениумом мой устроил?
1
6 / 6 / 0
Регистрация: 23.12.2015
Сообщений: 227
27.06.2019, 11:07  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
за такие локаторы бьют по рукам. вариант с селениумом мой устроил?
Да , больше спасибо)

Только теперь думаю как нужно править то что уже написал с использованием селениума.
0
151 / 86 / 35
Регистрация: 05.08.2017
Сообщений: 257
27.06.2019, 12:57
Лучший ответ Сообщение было отмечено maksonech как решение

Решение

maksonech, вот как пример:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import requests
from bs4 import BeautifulSoup
 
#data-id для разных районов
cities = {
    "krasnoyarsk.": ("165", "228", "170"),
    "kemerovo.": ("368", "409")
}
 
session = requests.Session()
for city in cities:
    print(city)
    for sub_city in cities[city]:
        session.get("http://lekvapteke.ru/ajaxupdatecity/" + sub_city) #меняем район
        html = session.get("http://" + city + "lekvapteke.ru/").text
        bs4 = BeautifulSoup(html, "html.parser")
        print("\tCurrent sub city is: ", end="")
        print(bs4.find("a", {"data-domain": city}).text)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.06.2019, 12:57
Помогаю со студенческими работами здесь

Как «запомнить» выбраный город на сайте с городами на поддоменах?
Как запомнить выбор города на сайте, учитывая что города реализованы в виде поддоменов. Стоит задача сделать для сайта региональные...

Из города А одновременно выехали две машины, первая в город В, вторая в город С
Из города А одновременно выехали две машины, первая в город В, вторая в город С. Известны расстояния между городами А и В, и А и С, и...

Массив записей о поездах. Структура: номер поезда, город отправления, город назначения, расстояние, средняя скорость, количество остановок
Сведения о поездах содержат следующую информацию: номер поезда, город отправления, город назначения, расстояние, средняя скорость,...

Вывести время отправления самолетов в город Х, наличие свободных мест на рейс в город Х с временем отправления
Написать программу, выдающую информацию следующего вида: - время отправления самолетов в город Х, - наличие свободных мест на рейс в...

Напечатать время отправления самолётов в город X и наличие свободных мест на рейс в город X c временем отправления Y.
ЗдравствуйтЕ! Помогите пожалуйста с задачей на тему "Записи" Дан массив данных содержащий сведения о наличие билетов и рейсах...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru