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

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 :)

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

0

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

0

Daj ".text" na koniec: https://stackoverflow.com/questions/20996392/how-to-get-text-with-selenium-web-driver-in-python
Przykład z podobną metodą:

zmienna = driver.find_element_by_class_name("ctsymbol").text
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")
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.

0

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

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?

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 :)

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)

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()
0
artur_waw napisał(a):

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()

Działa :) Jak to zrobiłeś?

0

A moge podzielić to

liczba = 5 x 4

jakoś żeby 5 było w jednej zmiennej a 4 w drugiej?

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