Как скрести цифры после нажатия кнопок на нескольких страницах? - PullRequest
0 голосов
/ 01 апреля 2019

Ранее я спрашивал, как нажать кнопку на странице.И это сработало в первый раз, но я понял, что иногда это работает, иногда нет.Проблема в том, что у меня есть несколько страниц, и иногда я получаю числа для некоторых страниц, но для некоторых я ничего не получаю.Есть ли способ получить все данные, которые мне нужны?Project - мой последний экзамен на этом начальном курсе Python.

Кнопки, которые нужно нажать, находятся в верхней правой части страницы, и на них отображается текст «Prikaži broj».Это моя попытка, но она не работает так, как я хочу:

condos = [
'https://www.nekretnine.rs/stambeni-objekti/stanovi/vracar-lokacija-juzni-bulevar-adresa-vojvode-hrvoja-beograd/1958955/',
'https://www.nekretnine.rs/stambeni-objekti/stanovi/vozdovac-autokomanda-trise-kaclerovica-90m2-trise-kaclerovica/NkvU3_gZyb6/',
'https://www.nekretnine.rs/stambeni-objekti/stanovi/vracar-prote-mateje-78m2-id1187/NkwQVDgJqsw/',
'https://www.nekretnine.rs/stambeni-objekti/stanovi/palilula-botanicka-basta-bulevar-despota-stefana-60m2-bulevar-despota-stefana/1734451/',
'https://www.nekretnine.rs/stambeni-objekti/stanovi/palilula-postanska-stedionica-dalmatinska-94m2-dalmatinska/Nk1bTYWifZj/',
'https://www.nekretnine.rs/stambeni-objekti/stanovi/stari-grad-kalemegdan-strahinjica-bana-37m2-strahinjica-bana/NklcRCutVNB/',
'https://www.nekretnine.rs/stambeni-objekti/stanovi/palilula-borca-moravske-divizije-73m2-moravske-divizije/207667/',
'https://www.nekretnine.rs/stambeni-objekti/stanovi/palilula-visnjicka-banja-slobodana-jovanovica-75m2-slobodana-jovanovica/Nk2nu-zdbzW/',
'https://www.nekretnine.rs/stambeni-objekti/stanovi/zvezdara-mirijevo-jovanke-radakovic-61m2-jovanke-radakovic/NkW5Qg22seE/',
'https://www.nekretnine.rs/stambeni-objekti/stanovi/zvezdara-deram-pijaca-duke-dinic-80m2-duke-dinic/Nk26as4b71N/']

condo_agency_home_phones = []
condo_agency_cell_phones = []

options = Options()
options.headless = False
driver = webdriver.Chrome('/Users/Nenad/chromedriver', options=options)
for condo in condos:
    driver.get(condo)
    try:
        element = driver.find_element_by_css_selector('body > div:nth-child(14) > div.row.pt-4 > div.col-lg-4.mb-5 > div.border-box.pt-3.pl-3.pr-3.pb-0.d-none.d-lg-block > div > div.row > div.col-12.col-sm-6.contact-footer > div > div > form:nth-child(2) > button').click()
        sleep(randint(3, 5))
        element2 = driver.find_element_by_css_selector('body > div:nth-child(14) > div.row.pt-4 > div.col-lg-4.mb-5 > div.border-box.pt-3.pl-3.pr-3.pb-0.d-none.d-lg-block > div > div.row > div.col-12.col-sm-6.contact-footer > div > div > form:nth-child(4) > button').click()
        sleep(randint(3, 5))
        home_phone = driver.find_element_by_css_selector('body > div:nth-child(14) > div.row.pt-4 > div.col-lg-4.mb-5 > div.border-box.pt-3.pl-3.pr-3.pb-0.d-none.d-lg-block > div > div.row > div.col-12.col-sm-6.contact-footer > div > div > form:nth-child(2) > span')
        cell_phone = driver.find_element_by_css_selector('body > div:nth-child(14) > div.row.pt-4 > div.col-lg-4.mb-5 > div.border-box.pt-3.pl-3.pr-3.pb-0.d-none.d-lg-block > div > div.row > div.col-12.col-sm-6.contact-footer > div > div > form:nth-child(4) > span')
        condo_agency_home_phones.append(home_phone.text)
        condo_agency_cell_phones.append(cell_phone.text)
    except:
        condo_agency_home_phones.append('NaN')
        condo_agency_cell_phones.append('NaN')

Решение, которое я получил, было:

element = driver.find_element_by_css_selector('button[type="button"]').click()

Иногда нажимаю на кнопку, а я до сих пор не могузнать, как извлечь номер после клика.Если кто-нибудь знает, как это сделать, скажите, пожалуйста.

Ответы [ 4 ]

0 голосов
/ 02 апреля 2019

Следующий код связан с Adblock, и с его помощью я получаю большую часть времени всех чисел:

path_to_extension = r'C:\Users\Nenad\Desktop\3.42.0_0'
options = Options()
options.add_argument('load-extension=' + path_to_extension)
options.headless = False
driver = webdriver.Chrome('/Users/Nenad/chromedriver', options=options)
driver.create_options()

Путь для расширения копируется из:

C: \ Users \ Nenad \ AppData\ Local \ Google \ Chrome \ Данные пользователя \ Default \ Extensions \ gighmmpiobklfepjocnamgkkbiglidom

Я думаю, что это рабочее решение.

0 голосов
/ 01 апреля 2019

Вы также можете попробовать подождать кликабельного

WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "form button[type=button]"))).click()

Дополнительный импорт:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
0 голосов
/ 02 апреля 2019

Используйте WebDriverWait для обработки динамического элемента. Однако вам нужно дать некоторое время.sleep (1) после нажатия на кнопку, чтобы получить весь номер телефона.

condo_agency_home_phones = []
condo_agency_cell_phones = []
 for condo in condos:
        driver.get(condo)

        try:
            wait=WebDriverWait(driver,10)
            element =wait.until(expected_conditions.element_to_be_clickable((By.XPATH,"//button[contains(text(),'broj')]")))
            element.click()
            time.sleep(1)
            home_phone=wait.until(expected_conditions.element_to_be_clickable((By.XPATH,"(//span[@class='cell-number'])[1]")))
            condo_agency_home_phones.append(home_phone.text)

            wait1 = WebDriverWait(driver, 10)
            element2 =wait1.until(expected_conditions.element_to_be_clickable((By.XPATH,"//button[contains(text(),'broj')]")))
            element2.click()
            time.sleep(1)
            wait2 = WebDriverWait(driver, 10)
            cell_phone=wait2.until(expected_conditions.element_to_be_clickable((By.XPATH,"(//span[@class='cell-number'])[2]")))
            condo_agency_cell_phones.append(cell_phone.text)
        except:
            condo_agency_home_phones.append('NaN')
            condo_agency_cell_phones.append('NaN')

    print(condo_agency_home_phones,condo_agency_cell_phones)

Обратите внимание, что вам нужно использовать следующие операции импорта.

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium import webdriver
import time
0 голосов
/ 01 апреля 2019

Добро пожаловать на SO.Вот параметры.

Опция 1: Использование ожидаемых условий (тем самым вы убедитесь, что элемент расположен перед щелчком)

wait = WebDriverWait(self.driver, 10)
ele = wait.until(EC.presence_of_element_located((By.XPATH, "//button[.='Prikaži broj']")))
ele.click

Опция 2: Использование сценария Java.(Это как отправка события нажатия на кнопку)

ele = driver.find_element_by_xpath("//button[.='Prikaži broj']")
driver.execute_script("arguments[0].click();",ele);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...