[Selenium] Zapisanie do zmiennej jakiegoś tekstu ze strony internetowej.

Odpowiedz Nowy wątek
2020-01-14 19:00
0

Witam! Chcę żeby to co jest zaznaczone na zdjęciu program zapisał do jakiejś zmiennej. Czy wie może ktoś jak to zrobić? Używam Selenium. Nie wiem jak inaczej wrzucić tutaj zdjęcie :)

edytowany 1x, ostatnio: krysteq28, 2020-01-14 19:02

Pozostało 580 znaków

2020-01-14 19:34
0

Jeśli położenie tego diva na stronie nie zmienia się, to bym użył find_elements_by_xpath: https://selenium-python.readthedocs.io/locating-elements.html

Pozostało 580 znaków

2020-01-14 19:40
0

Dobrze, ale jak moge to 3 x 3 zapisać do zmiennej?

Pozostało 580 znaków

2020-01-14 20:37
0

Daj ".text" na koniec: https://stackoverflow.com/que[...]selenium-web-driver-in-python
Przykład z podobną metodą:

zmienna = driver.find_element_by_class_name("ctsymbol").text

Pozostało 580 znaków

2020-01-14 22:09
0

Otrzymałem takie coś :)

Traceback (most recent call last):
  File "C:\Users\Krystek\Desktop\test.py", line 18, in <module>
    a = driver.find_element_by_class_name("card-title").text
  File "C:\Program Files\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 564, in find_element_by_class_name
    return self.find_element(by=By.CLASS_NAME, value=name)
  File "C:\Program Files\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element
    'value': value})['value']
  File "C:\Program Files\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Program Files\Python36\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".card-title"}
  (Session info: chrome=78.0.3904.108)

A kod wygląda tak

#-*- coding: utf-8 -*-

from time import sleep
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver import Firefox
from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
import os,sys

systemdrive = os.getenv('systemdrive')

os.system("cls")
driver = webdriver.Chrome(systemdrive + "/chromedriver78/chromedriver78.exe")
driver.get('https://freerice.com/game')

os.system("cls")
a = driver.find_element_by_class_name("card-title").text
print(a)
driver.quit()
os.system("pause >nul")
edytowany 1x, ostatnio: krysteq28, 2020-01-14 22:10

Pozostało 580 znaków

2020-01-15 09:39
0

Elementów z klasą cart title może być kilka. Jeżeli jest więcej niż jeden to Selenium zwróci, że nie może zlokalizować elementu (bo widzi LISTĘ elementów). Nie bawiłem się dawno we frontend, ale poszukaj jednoznacznego identyfikatora, devtoolsy obsługują xpathy i one mogą być bardziej pomocne niż css w tym wypadku.

Pozostało 580 znaków

2020-01-15 09:50
0

STOP! najpierw naucz sie programowac i myslec w ten sposob, potem zacznij pisac testy. uwierz mi bo przechodziłem podobną drogę co Ty.

Poza tym już dużo umiem, a jak czegoś nie umiem to korzystam z zasobów internetu :) - krysteq28 2020-01-15 14:07
paaanie duzo umiesz xd nie potrafisz wymyslec jak znalezc element z np listy. szkoda czasu na ciebie. 3maj sie - m123 2020-01-15 19:20

Pozostało 580 znaków

2020-01-15 14:06
0
null null napisał(a):

Elementów z klasą cart title może być kilka. Jeżeli jest więcej niż jeden to Selenium zwróci, że nie może zlokalizować elementu (bo widzi LISTĘ elementów). Nie bawiłem się dawno we frontend, ale poszukaj jednoznacznego identyfikatora, devtoolsy obsługują xpathy i one mogą być bardziej pomocne niż css w tym wypadku.

Zrobiłem zamiast po klasie to po xpath i rzeczywiście działa, tylko znowu mam problem ponieważ program uważa że klika przycisk a go nie klika. Wejdź sobie na stronę https://freerice.com/game i w prawym górnym rogu są trzy kreseczki chodzi o ten przycisk, czy pomożesz mi znaleźć xpath tego przycisku?

edytowany 1x, ostatnio: krysteq28, 2020-01-15 14:12
skorzystaj z zasobów internetu :) podobno umiesz - m123 2020-01-15 19:20
juz dostałem jakąś odpowiedź na stackoverflow :) - krysteq28 2020-01-15 19:27

Pozostało 580 znaków

2020-01-16 10:55
0

@krysteq28: Te trzy kreski mają xpath:

//header/div[@class="toolbar__menu-toggle"]

Ale uwaga... jak odpalisz stronę przez Selenium to nie masz tam swojego profilu / ciasteczek wiec warstwa z cookies / newsletterem itd moze zasłonić przycisk z menu :)

Wiem że mogą zasłonić dlatego na początku dałem żeby zaakceptowal cookies - krysteq28 2020-01-16 13:09
tylko tu nie wrzucilem :) - krysteq28 2020-01-16 13:09

Pozostało 580 znaków

2020-01-16 13:49
0
artur_waw napisał(a):

@krysteq28: Te trzy kreski mają xpath:

//header/div[@class="toolbar__menu-toggle"]

Ale uwaga... jak odpalisz stronę przez Selenium to nie masz tam swojego profilu / ciasteczek wiec warstwa z cookies / newsletterem itd moze zasłonić przycisk z menu :)

Nadal uważa że klika ale nie klika. Ale po zamknięciu programu robi się plik debug.log w którym jest:

[0116/134647.258:ERROR:process_reader_win.cc(123)] NtOpenThread: {Odmowa dostępu} Proces zażądał dostępu do obiektu, ale prawa dostępu nie zostały przyznane. (0xc0000022)
[0116/134647.313:ERROR:exception_snapshot_win.cc(98)] thread ID 16628 not found in process
[0116/134647.313:ERROR:scoped_process_suspend.cc(40)] NtResumeProcess: Podjęto próbę uzyskania dostępu do procesu kończącego działanie. (0xc000010a)

Pozostało 580 znaków

2020-01-16 14:16
0

Działająca wersja (testowane na Ubutu w Chrome):

from selenium import webdriver

driver = webdriver.Chrome(
    executable_path="<chromedriver path>"
)

driver.get("https://freerice.com/game")
driver.maximize_window()

# close cookie popup
driver.find_element_by_xpath('//button[contains(@class, "as-js-optin")]').click()

# click on hamburger menu
driver.find_element_by_xpath('//header/div[contains(@class, "toolbar__menu-toggle")]/*[@class="toolbar__menu-toggle-icon"]').click()

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0