Задача за умници!

dalasweb

Well-Known Member
Влизам в един немски сайт за телефонни услуги.
Имам възможност да си избера тел.номер.
Натискам кръгчето и се появяват нови номера, после пак и пак.
Изключвам си нета.
Натискам си кръга и пак се въртят произволни номера
Поглеждам сорс кода, но няма никакви номера.Нещо за програмсти ще е:)
Някой може ли да ги изкара всички?
ето линка
https://www simplytel de/bestellung/optionen/0
Избираш второто кръгче eine Wunschrufnummer (kostenpflichtig)
и ти се показват произволните телефонни номера.
 
Последно редактирано:
Не мога да репродуцирам какво нацъкваш. Дай го в картинки, по като за дъмис :D
 
Идват с първоначалния html. Търси в кода WunschrufnummerBox, вътре в тоя div са номерата. Ако гледаш html кода, това е най-дългия ред. И те са 650 номера, от които първоначално само първите 10 са видими, а останалите имат клас hide. Като натиснеш бутона се скриват видимите номера и се появяват други номера от списъка (чрез класа hide). JS кода за това джуркане също идва в първоначалния html, търси p-order_process-module-wunschrufnummer-box-item.
 
Идват с първоначалния html. Търси в кода WunschrufnummerBox, вътре в тоя div са номерата. Ако гледаш html кода, това е най-дългия ред. И те са 650 номера, от които първоначално само първите 10 са видими, а останалите имат клас hide. Като натиснеш бутона се скриват видимите номера и се появяват други номера от списъка (чрез класа hide). JS кода за това джуркане също идва в първоначалния html, търси p-order_process-module-wunschrufnummer-box-item.
Супер си! Благодаря!Ето затова не съм станал програмист.
А според мой приятел и полицай.Не мисля!
Искам да попитам-според теб на всяко влизане ли тези 60 номера се променят
или през някакъв времеви интервал?
Има ли опция в нотпад +++ да изчистя кода и да ми останат цифрите т.е тел.номера след value, за да ги разгледам.Примерно вместо
value="017685952054" пиша value="************"
Би било хубаво, да не се лутам из кода!

Сега се сетих друго.Мога ли да променя кода вместо 10, да се покажат всички телефонни номера на страницата ?
 
Последно редактирано:
Искам да попитам-според теб на всяко влизане ли тези 60 номера се променят
или през някакъв времеви интервал?
Това изисква някой да виси в сайта, да го рефрешва и да наблюдава какво се случва с номерата, но този някой няма да съм аз :)

Отваряш Dev Tools (Ctrl+Shift+I на браузъра), в Elements таба (ако е Chrome) намираш въпросния div в който се намират номерата и почваш да си рефрешваш през колкото минути искаш :)

1666779981205.png

Ама от 650 номера един па да не можеш да си харесаш...

Ако искаш да покажеш всички номера в браузъра, цъкни на някой елемент с hide, после в Styles намираш къде е дефиниран класа hide, цъкаш там където съм показал и преименуваш none !important в block !important:

1666780156012.png
 
Това изисква някой да виси в сайта, да го рефрешва и да наблюдава какво се случва с номерата, но този някой няма да съм аз :)

Отваряш Dev Tools (Ctrl+Shift+I на браузъра), в Elements таба (ако е Chrome) намираш въпросния div в който се намират номерата и почваш да си рефрешваш през колкото минути искаш :)

Виж файлът 26314

Ама от 650 номера един па да не можеш да си харесаш...

Ако искаш да покажеш всички номера в браузъра, цъкни на някой елемент с hide, после в Styles намираш къде е дефиниран класа hide, цъкаш там където съм показал и преименуваш none !important в block !important:

Виж файлът 26315
Точно това ми трябваше.Отново благодаря.Проблема е винаги ползвам по навик фирефокса, макар хрома да е по хубав.
 
  • Like
Реакции: ROA
Това изисква някой да виси в сайта, да го рефрешва и да наблюдава какво се случва с номерата, но този някой няма да съм аз :)

Отваряш Dev Tools (Ctrl+Shift+I на браузъра), в Elements таба (ако е Chrome) намираш въпросния div в който се намират номерата и почваш да си рефрешваш през колкото минути искаш :)

Виж файлът 26314

Ама от 650 номера един па да не можеш да си харесаш...

Ако искаш да покажеш всички номера в браузъра, цъкни на някой елемент с hide, после в Styles намираш къде е дефиниран класа hide, цъкаш там където съм показал и преименуваш none !important в block !important:

Виж файлът 26315
Полезен урок :)
 
Благодаря отново.Да знаеш колко време ми спести.
Значи има ли начин за следното:
Копирам всички и ги пествам в нотепад +++
а оттам с някаква команда да ги подредя по големина или последователност на числата.
01575 / 8219044
0176 / 87643374
01575 / 8216597
0176 / 85964398

Това е за програмисти :)
 
Последно редактирано:
Python:
import re
import collections

phones = {}

with open('phones.txt', 'rt') as fp:
    while True:
        l = fp.readline()
        if not l:
            break
        m = re.search('(?P<code>\d+)\s?/\s?(?P<number>\d+)', l)
        code = m.group('code')
        number = m.group('number')
        if code not in phones:
            phones[code] = []
        phones[code].append(number)

obc = collections.OrderedDict(sorted(phones.items()))
with open('sorted_phones.txt', 'wt') as fp:
    for c in obc:
        print(c)
        for n in sorted(obc[c]):
            fp.write(f'{c} / {n}\n')
 
Python:
import re
import collections

phones = {}

with open('phones.txt', 'rt') as fp:
    while True:
        l = fp.readline()
        if not l:
            break
        m = re.search('(?P<code>\d+)\s?/\s?(?P<number>\d+)', l)
        code = m.group('code')
        number = m.group('number')
        if code not in phones:
            phones[code] = []
        phones[code].append(number)

obc = collections.OrderedDict(sorted(phones.items()))
with open('sorted_phones.txt', 'wt') as fp:
    for c in obc:
        print(c)
        for n in sorted(obc[c]):
            fp.write(f'{c} / {n}\n')
Хубаво си го написал но като не разбирам нищо.
Къде да пестна номерата?
Писал си phones.txt
май уеб хост ще ми трябва.
Може ли по-подробно.Къде да кача твоя файл и как да вкарам текст файла?
Благодаря!
 
Принципно би могло да се прочете съдържанието на която и да е страница като стринг и след това да се действа подобно на решението на @hristonev. Но в случая ако решим да заредим директно линка, то няма телефонни номера, трябва преди това да сме цъкнали на някой план в браузъра, сигурно се сетват разни куки... кой знае. Любимото ми в такива случаи е Chrome Extension. Даже драснах такъв да се поупражнявам.

Значи по принцип тия разширения са уебаджийски файлове (html, css, js и други) пакетирани в .zip. Но в Chrome можеш да заредиш такова нещо от папка. Ето ти кода на файловете:

manifest.json
JSON:
{
  "name": "Simplytel Phones Reader",
  "version": "0.1",
  "manifest_version": 3,
  "action": {
    "default_popup": "popup.html",
    "default_title": "Click to get phone numbers"
  },
  "permissions": [
    "activeTab",
    "scripting"
  ]
}

popup.html
HTML:
<!DOCTYPE html>
<html lang="en">
<head>
  <script src="popup.js"></script>
</head>
<body>
  <textarea id="phone-numbers" cols="18" rows="50"></textarea>
</body>
</html>

popup.js
JavaScript:
function readPhoneNumbers() {
  const selector = '#WunschrufnummerBox > div > label'
  const elements = document.querySelectorAll(selector)

  let phoneNumbers = []

  elements.forEach((element) => {
    phoneNumbers.push(element.innerText)
  })

  return phoneNumbers
}

async function getCurrentTab() {
  const queryOptions = { active: true, lastFocusedWindow: true }
  // `tab` will either be a `tabs.Tab` instance or `undefined`.
  const [tab] = await chrome.tabs.query(queryOptions)

  return tab
}

async function executeFunctionOnTab(pageTab, fn) {
  const injectionResult = await chrome.scripting.executeScript({
    target: { tabId: pageTab.id },
    function: fn
  })

  return injectionResult?.[0].result
}

async function start() {
  const currentTab = await getCurrentTab()
  const phoneNumbers = await executeFunctionOnTab(currentTab, readPhoneNumbers)

  document.getElementById('phone-numbers').value = phoneNumbers.sort().join('\n')
}

document.addEventListener('DOMContentLoaded', async function () {
  await start()
})

Слагаш тия 3 файла в една папка, после отиваш в More Tools -> Extensions на Chrome, там има бутон Load unpacked, и съответно намираш папката. В разширенията трябва да ти се появи нещо такова:

1666951555288.png

После се връщаш в сайта и от дясно на адрес бара си пинваш разширението за да стои като бутонче. Това трябва да го знаеш как става, но за всеки случай - от тия иконки...
1666951703528.png
... дясната дето е като пъзел, намираш разширението (Simplytel Phones Reader), пинваш го и то се появява като лявата безлична сива иконка S.

Сега когато си на сайта с номрата само я цъкаш и те се появяват сортирани така:

1666951871126.png

И вече ако разбираш от JavaScript можеш да си манипулираш номерата както там решиш :)
 
Принципно би могло да се прочете съдържанието на която и да е страница като стринг и след това да се действа подобно на решението на @hristonev. Но в случая ако решим да заредим директно линка, то няма телефонни номера, трябва преди това да сме цъкнали на някой план в браузъра, сигурно се сетват разни куки... кой знае. Любимото ми в такива случаи е Chrome Extension. Даже драснах такъв да се поупражнявам.

Значи по принцип тия разширения са уебаджийски файлове (html, css, js и други) пакетирани в .zip. Но в Chrome можеш да заредиш такова нещо от папка. Ето ти кода на файловете:

manifest.json
JSON:
{
  "name": "Simplytel Phones Reader",
  "version": "0.1",
  "manifest_version": 3,
  "action": {
    "default_popup": "popup.html",
    "default_title": "Click to get phone numbers"
  },
  "permissions": [
    "activeTab",
    "scripting"
  ]
}

popup.html
HTML:
<!DOCTYPE html>
<html lang="en">
<head>
  <script src="popup.js"></script>
</head>
<body>
  <textarea id="phone-numbers" cols="18" rows="50"></textarea>
</body>
</html>

popup.js
JavaScript:
function readPhoneNumbers() {
  const selector = '#WunschrufnummerBox > div > label'
  const elements = document.querySelectorAll(selector)

  let phoneNumbers = []

  elements.forEach((element) => {
    phoneNumbers.push(element.innerText)
  })

  return phoneNumbers
}

async function getCurrentTab() {
  const queryOptions = { active: true, lastFocusedWindow: true }
  // `tab` will either be a `tabs.Tab` instance or `undefined`.
  const [tab] = await chrome.tabs.query(queryOptions)

  return tab
}

async function executeFunctionOnTab(pageTab, fn) {
  const injectionResult = await chrome.scripting.executeScript({
    target: { tabId: pageTab.id },
    function: fn
  })

  return injectionResult?.[0].result
}

async function start() {
  const currentTab = await getCurrentTab()
  const phoneNumbers = await executeFunctionOnTab(currentTab, readPhoneNumbers)

  document.getElementById('phone-numbers').value = phoneNumbers.sort().join('\n')
}

document.addEventListener('DOMContentLoaded', async function () {
  await start()
})

Слагаш тия 3 файла в една папка, после отиваш в More Tools -> Extensions на Chrome, там има бутон Load unpacked, и съответно намираш папката. В разширенията трябва да ти се появи нещо такова:

Виж файлът 26342

После се връщаш в сайта и от дясно на адрес бара си пинваш разширението за да стои като бутонче. Това трябва да го знаеш как става, но за всеки случай - от тия иконки...
Виж файлът 26343
... дясната дето е като пъзел, намираш разширението (Simplytel Phones Reader), пинваш го и то се появява като лявата безлична сива иконка S.

Сега когато си на сайта с номрата само я цъкаш и те се появяват сортирани така:

Виж файлът 26344

И вече ако разбираш от JavaScript можеш да си манипулираш номерата както там решиш :)
Велик си!
Благодаря ти!
Дори ме е срам да пиша, че съм ти колега/ само за форумен драскач става/
Това, което демонстрираш със знания - просто нямам думи.
Цели 6 години влизам в сайта за телефонните номера и си джуркам да хвана шарана.Нещо като психотерапия ще кажа, като кефа когато играеш на карти солитаре, но си е чист мазохизъм.Аз в уеб пространството си бях хамалин.Преправяш страници, готови cms инсталирвах.Това е доста, ама далеч от моите познания.Чест и почтания!

пс.Възможно ли, ако има 3 или 4 еднакви числа примерно 999, 8888 . Да бъдат с друг цвят.
Или пък две двойни или три двойни. 7788, 997788.
Това си е чисто програмиране.
Но и този вариат е достатъчен, но ми е интересно дали е възможно.
За мен улеснение - за програмиста удовлетвореие.
 
Последно редактирано:
Кой да ти знае, че е толкова лесно да пишеш екстенжъни за хрома. Мерси имаш бира от мен!
Малко е досадно от гледна точка че много рядко ги пиша и всеки път отново трябва да преоткривам кое какво беше :)

Велик си!
Благодаря ти!
Дори ме е срам да пиша, че съм ти колега/ само за форумен драскач става/
Това, което демонстрираш със знания - просто нямам думи.
Цели 6 години влизам в сайта за телефонните номера и си джуркам да хвана шарана.Нещо като психотерапия ще кажа, като кефа когато играеш на карти солитаре, но си е чист мазохизъм.Аз в уеб пространството си бях хамалин.Преправяш страници, готови cms инсталирвах.Това е доста, ама далеч от моите познания.Чест и почтания!
Молим :)

Споделям това с мазохистичната психотерапия. И аз твърде често предпочитам да правя нещо по трудния начин и ме мързи да си го улесня :D
 
ексел няма ли за вас? :D
ок копирам всички 650 номера и после как да ги подредя или
Възможно ли, ако има 3 или 4 еднакви числа примерно 999, 8888 . Да бъдат с друг цвят.
Или пък две двойни или три двойни. 7788, 997788.
Това си е чисто програмиране.
 
Това си е чисто програмиране.
Явно ти е време да започнеш да го учиш това програмиране :) Да ти трябват да речем месец-два докато разцъкаш нещата на такова ниво, че да можеш да си спестяваш многогодишни мъки после :D То си е един вид инвестиция, и то доста добра инвестиция.
 
Явно ти е време да започнеш да го учиш това програмиране :) Да ти трябват да речем месец-два докато разцъкаш нещата на такова ниво, че да можеш да си спестяваш многогодишни мъки после :D То си е един вид инвестиция, и то доста добра инвестиция.
А аз вече съм дърт и на простамол.Един немски не мога да науча.С английския ги миксирам.Почвам на немски да говоря и като не знам думата на немски автоматично я казвам на английски без да се замислям и да пелтеча и продължавам на немски.Просто си говоря миксирано..И да се похваля.В Германия даскалката ми по-немски вика това го могат само гениите :). И обратно почвам на английски и, като не се сетя за думата.Автоматично я замествам с немската дума.Доста ми правят забележки отностно този мой начин на говорене.Но не го правя умишлено.Казват ми или на немски или само на английски.
Затова далеч и от програмирането.
защото тогава и руски думи ще влезна.
 

Горе