1

Тема: Натискання на кнопку (на сайті) за допомогою Python

Доброго дня, як за допомогою пайтона натиснути на кнопку на сайті? опишу трішки проблему, хочу щоб скрипт на олх натискав на кнопку (показати номер).... варіантів поки що ніяких немає, буду радий почути ваші  :)

2

Re: Натискання на кнопку (на сайті) за допомогою Python

https://pypi.org/project/selenium/
але, може є щось свіжіше

Подякували: Zolin_777, leofun01, plusxx3

3

Re: Натискання на кнопку (на сайті) за допомогою Python

ping написав:

https://pypi.org/project/selenium/
але, може є щось свіжіше

Ще треба той номер спарсити за допомогою requests та bs4, так що це напевно не підійде

4 Востаннє редагувалося plusxx (26.01.2020 23:40:22)

Re: Натискання на кнопку (на сайті) за допомогою Python

Zolin_777 написав:
ping написав:

https://pypi.org/project/selenium/
але, може є щось свіжіше

Ще треба той номер спарсити за допомогою requests та bs4, так що це напевно не підійде

Можна то парсити самим webdriverom без bs4 також по селекторах вибирати. А шоб воно вам немигало на дисплею запустити хедлес режимі.
То звичайно не чудо інженерної думки але як приклад реалізації може підійти

    def selenium_parser_uk(word):
    
        chromedriver = '/usr/local/bin/chromedriver'
        options = webdriver.ChromeOptions()
        options.add_argument('headless')  #Запускаєм вебдрейвер в хедлес режимі щоб бравзер працював в фоні без графіки
        browser = webdriver.Chrome(chrome_options=options)
        browser.get('http://rymy.in.ua/')
        browser.find_element_by_css_selector("#query").send_keys(word)
        browser.find_element_by_css_selector("#search").click()#Клік по елементі з відповідним унікальним СSS cелетором
        rhymes = []
        for rhyme in browser.find_elements_by_css_selector(".three > a"):#Получаєм необхідний елемент цикл фор був потрібний в даному конкретному випадку була велика кількість елементів причому при кожнім запуску різна взалежності від аргумента word а так то без цикла робиться.
            rhymes.append(rhyme.text)
        browser.quit()
        return(rhymes)

парсер для пошуку рим на сайті rymy.in.ua

Подякували: Zolin_777, leofun012

5 Востаннє редагувалося Zolin_777 (27.01.2020 18:57:20)

Re: Натискання на кнопку (на сайті) за допомогою Python

Дякую за код, але парсити селеніумом не вмію поки що... може підкажете що  тут потрібно натиснути, саме через селеніум?

<ul id="contact_methods_below" class="form">
   <li class="link-phone clr rel margintop10 {'path':'phone', 'id':'Fl3HB', 'id_raw': '610848899'} atClickTracking contact-a cpointer" data-rel="phone">
  <div class="fleft">
 <i data-icon="phone"></i>
 </div>
<div class="overh fleft marginleft10 brkword contactitem">
                                                                        <strong class="fnormal xx-large">09x xxx xxxx</strong>
                                    <span class="link spoiler small nowrap">
                                        <span>Показати</span>
                                    </span>
                                                                    </div>
                            </li>
                                                    </ul>

6

Re: Натискання на кнопку (на сайті) за допомогою Python

Впринципі можна на це ".overh > .nowrap > span:nth-child(1)"

 <span>Показати</span>

або на це ".overh > .xx-large"

<strong class="fnormal xx-large">09x xxx 

або на це ".margintop10 >.fleft > i:nth-child(1)"

 <i data-icon="phone"></i>

А це селектор щоб клацнути по синій кнопці з номером вверху.
"div.contact-button"

І почитайте про headless режим в селеніум бо якщо він буде працювати в графічному режимі то ви нічого більше не зможете зробити плюс в хеадлес воно шибше працює. Як запускати геко-драйвер в  хеадлес особистоя не розібрався а хром працює на ура.

Подякували: leofun011

7

Re: Натискання на кнопку (на сайті) за допомогою Python

Але тут не так все просто на olx чере зраз вискакує вікно з опитуванням плюс прохання прийняти куки а це все буде перекривати необхідні елементи. Тому треба написати серйозніший скрипт.

8

Re: Натискання на кнопку (на сайті) за допомогою Python

pluszz написав:

Але тут не так все просто на olx чере зраз вискакує вікно з опитуванням плюс прохання прийняти куки а це все буде перекривати необхідні елементи. Тому треба написати серйозніший скрипт.

У мене в планах було таке, завантажується сторінка з оголошенням, натискається  кнопка, завантажується сайт на локалочку і звідти витягується спокійно номер) тільки кнопочка то не натискається і номер не показує....

9

Re: Натискання на кнопку (на сайті) за допомогою Python

Я вчора подивився там важко але не неможливо треба посидіти. Кажу там вискакує  віконечко з опитуванням. А вебдрайвер працює так якби працював користувач. Якщо для вас кнопка прикрита алертом то для нього теж. Якщо вам треба проскролити сторінку то йому теж

10

Re: Натискання на кнопку (на сайті) за допомогою Python

pluszz написав:

Я вчора подивився там важко але не неможливо треба посидіти. Кажу там вискакує  віконечко з опитуванням. А вебдрайвер працює так якби працював користувач. Якщо для вас кнопка прикрита алертом то для нього теж. Якщо вам треба проскролити сторінку то йому теж

якщо заходити на олх вручну та пару раз закрити те віконичко то воно більше не появляється, у мене вже його немає...

11 Востаннє редагувалося plusxx (29.01.2020 23:27:26)

Re: Натискання на кнопку (на сайті) за допомогою Python

Ось так можна натискати на кнопки в графічному режимі.

# -*- coding: utf-8 -*-
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



def selenium_parser_uk(url="https://www.olx.ua/obyavlenie/garazhne-hraneniya-IDGQhnL.html#e6ae76423f;promoted"):

    chromedriver = '/usr/local/bin/chromedriver'
    options = webdriver.ChromeOptions()
   # options.add_argument('headless')  #Запускаєм вебдрейвер в хедлес режимі щоб бравзер працював в фоні без графіки
    browser = webdriver.Chrome(chrome_options=options)
    browser.maximize_window()
    browser.get(url)
    #browser.save_screenshot("screenshot.png")
    WebDriverWait(browser,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#cookiesBar > button"))).click()
    WebDriverWait(browser,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"span.spoiler:nth-child(3)"))).click()
    telefon_number = browser.find_elements(By.CSS_SELECTOR,"div.contact-button")
    browser.quit()
    print(telefon_number[0])

selenium_parser_uk()

Погана новина olx курва чує хеадлес режим і блокує доступ
Скріншот:

Прихований текст

https://replace.org.ua/uploads/images/9084/2e659f0534e7d50f35e446acf2108de1.png

12 Востаннє редагувалося plusxx (30.01.2020 00:00:16)

Re: Натискання на кнопку (на сайті) за допомогою Python

О це парсить норм але браузер відкривається на цілий екран ну але можна то за юзати на віртуалці

.
# -*- coding: utf-8 -*-
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

def selenium_parser_uk(url, chromedriver):#chromedriver - шлях до хромдрайвера

    chromedriver = chromedriver
    options = webdriver.ChromeOptions()
    browser = webdriver.Chrome(chrome_options=options)
    browser.maximize_window()
    browser.get(url)
    WebDriverWait(browser,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#cookiesBar > button"))).click()#клікнути коли кнопка стане активна якщо сторінка довго грузиться то збільшити час очікування число в дужках.
    WebDriverWait(browser,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"span.spoiler:nth-child(3)"))).click()#
    telefon_number = browser.find_elements(By.CSS_SELECTOR,"strong.xx-large:nth-child(2)")[0].text
    return(telefon_number)
    browser.quit()
Подякували: Zolin_7771

13

Re: Натискання на кнопку (на сайті) за допомогою Python

# -*- coding: utf-8 -*-
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
from bs4 import BeautifulSoup


def selenium_parser_uk(url, chromedriver):

    chromedriver = chromedriver
    options = webdriver.ChromeOptions()
    browser = webdriver.Chrome(chrome_options=options)
    browser.maximize_window()
    browser.get(url)
    WebDriverWait(browser,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#cookiesBar > button"))).click()
    WebDriverWait(browser,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"span.spoiler:nth-child(3)"))).click()

    with open("olx.html", "w") as f:
            f.write(browser.page_source)
    browser.quit()

    page = open("olx.html", "r").read()
    soup = BeautifulSoup(page,'lxml')
    phone_number = soup.select('strong.xx-large:nth-child(2)')[0].text
    return(phone_number)

То саме лиш з bs і лишнім шаманством.

Подякували: Zolin_7771