Я пытаюсь создать бота на Python, который выполняет следующие 7 шагов:
Вход в мой аккаунт TradingView
Один разв, поиск определенной торговой пары / индекса и т. д.
После отображения интересующей пары необходимо перейти в раздел «подробный график»
Затем необходимо сделать снимок / снимок экрана с отображаемой диаграммой. Это можно сделать в TradingView с помощью «Alt + s»
Отображается диалоговое окно, содержащее 3 очень важных элемента: URL-адрес снимка экрана, справа от этого URL-адреса a "Кнопка «Скопировать URL» и кнопка «Сохранить изображение», которая при нажатии перенаправит вас на новую страницу, содержащую только указанный скриншот.
На этом этапе процесса это необходимощелкните правой кнопкой мыши на изображении, перейдите в «Сохранить как» и появится обычное меню сохранения Windows.
Последний шаг - ввести имя для снятого скриншота и сохранить его наопределенная папка на моем компьютере.
До сих пор я успешно написал код, который завершает шаги 1 - 4, поэтому, когда я достигаю шага 5, я не нашел способаодин из следующих 2:
Либо нажмите кнопку «Сохранить изображение», чтобы перейти к oage, отображающему скриншот, либо
скопируйте URL и откройте его на другой странице.
Я пробовал оба,но с небольшим успехом. Однажды случилось так, что когда я превратил свой сценарий в блокнот Jupyter, запуск ячейки, которая должна была нажать кнопку «Сохранить изображение», однажды привел к ошибке, но если я запустил ее снова (без изменений), это фактически заставило менястраница, которая отображает снимок экрана.
Я даже скачал X Path Helper для поиска элемента HTML, который мне нужно было передать в мой код, но я обнаружил, что это тоже очень сложно.
X pathпомощник получил следующую информацию:
Для кнопки «Сохранить изображение»: html [@ class = 'is-authenticated is-not-pro-not-trial is-trial-available-availableFeature-JS Feature-Flexbox Feature-Canvas Feature-CanteText Feature-No-touchevents Feature-History Feature-Draganddrop Feature-Websockets Feature-Multibgs Feature-Csscolumns Feature-Csstransitions Feature-Localstorage Feature-No-MobileTouch функция сенсорный объект функция-pointerevents тема-light '] / body [@ class =' страница диаграммы недоступна для выбора '] / div [@ id =' overlap-manager-root '] / div / div / div [@ class =' wrap-3axdIL2R - '] / div[@ class = 'container-p3zks2PX -'] / div [@ class = 'modal-GUK9cvUQ -'] / div [@ class = 'modal-C2LSTwhC- dialog-2Ei1ngXh- dialog-2APwxL3O- округлый-tXI9mwGE- shadowed-2M13-xZa - '] / дел [@ класс =' тело-2н-vuwQW - '] / дел [@ класс =' Content-tr28wPlV - '] / дел [@ класс =' форма-2GifjSKe - '] / дел [@class = 'actions-3fKk-h7d -'] / a [@ class = 'link-1alPBTTQ -'] / span [2]
Для кнопки «Копировать URL»: /html [@ class = 'is-authenticated is-not-pro-not-trial is-trial-available-feature-js feature-flexbox feature-canvas feature-canvastext feature-no-toucheventsfeature-multiplebgs feature-csscolumns feature-csstransitions feature-localalstorage feature-no-mobiletouch feature-touch feature-pointerevents theme-light '] / body [@ class =' диаграмма-страница недоступна для выбора '] / div [@ id =' overlap-менеджер-корень '] / дел / дел / дел [@ класс =' наматывается 3axdIL2R - '] / дел [@ класс =' контейнер-p3zks2PX - '] / дел [@ класс =' модальной GUK9cvUQ - '] / дел[@ class = 'modal-C2LSTwhC- dialog-2Ei1ngXh- dialog-2APwxL3O- округленный-tXI9mwGE- затененный-2M13-XZA - '] / дел [@ класс =' тело-2н-vuwQW - '] / дел [@ класс =' Content-tr28wPlV - '] / дел [@ класс =' форма-2GifjSKe - '] / дел [@ class = 'copyForm-1HuPoKA0 -'] / div [@ class = 'copyBtn-1oB8tEqo- shadow-2JTdO0Fb -'] / button [@ class = 'button-2O-nMUcz- active-2UxWxOgk- withPadding-_5CJoO5q- ghost3yO24wIn- primary-1rSzOFdX - '] / span [@ class =' text-2KOWx3rB - ']
и для текста URL: / html [@ class = 'is-authenticated is-not-pro-not-trial is-trial-available-js feature-flexbox feature-canvas feature-canvastextfeature-no-touchevents feature-history Feature-draganddrop Feature-Websockets Feature-Multibgs Feature-Csscolumns Feature-Csstransitions Feature-Localstorage Feature-No-MobileTouch Feature-Touch Feature-Pointerevents тема-свет '] / тело [@ class =' диаграмма-страница невыбираема '] / div [@ id =' overlap-manager-root '] / div / div / div [@ class =' wrap-3axdIL2R - '] / div [@ class =' container-p3zks2PX - '] /div [@ class = 'modal-GUK9cvUQ -'] / div [@ class = 'modal-C2LSTwhC- dialog-2Ei1ngXh- dialog-2APwxL3O- округлый-tXI9mwGE- shadowed-2M13-xZa -'] / div [@ class = 'тело-2н-vuwQW - '] / дел [@ класс =' Content-tr28wPlV - '] / дел [@ класс =' форма-2GifjSKe - '] / дел [@ класс =' copyForm-1HuPoKA0 - '] / дел [@ class = 'inputWrapper-6bNZbTW4- inputWrapper-6bNZbTW4 -'] / input [@ class = 'textInput-3WRWEmm7 -']
Но я не смог найти, что передать в мойМетод "find_element_by ..." в селеВеб-драйвер nium.
Вот мой код:
import time
import pyautogui
import PIL
### selenium package tools
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC1
from selenium.webdriver.common.by import By
### PIL image handler
from PIL import Image
##################
### START CODE ###
##################
### We connect to Google Chrome:
```driver = webdriver.Chrome('C:/Users/PC/Desktop/Crypto Trading/chromedriver.exe')``` # change according to loc
### We go into the webpage (TradingView) in this case:
driver.get ("https://www.tradingview.com/#signin") ### Get into webpage
assert "TradingView" in driver.title
driver.maximize_window() ### Set window size
### We declare user and password:
user = 'my_username'
pwd = 'myPassword'
### We enter credentials:
selector = driver.find_element_by_name('username')
selector.send_keys(user)
selector = driver.find_element_by_name("password")
selector.send_keys(pwd)
selector.send_keys(Keys.RETURN) ### Press "Enter"
### We enter the desired chart in the Search Bar:
etherUSD = 'ETHUSD'
bitcoinUSD = 'BTCUSD'
etherBitcoin = 'ETHBTC'
rippleUSD = 'XRPUSDT'
etherXRP = 'XRPETH'
selector = driver.find_element_by_name('query')
selector.send_keys(etherUSD)
selector.send_keys(Keys.RETURN)
### We go to detailed chart:
driver.get('https://www.tradingview.com/chart/?symbol=BITSTAMP:ETHUSD')
### To take a snapshot inside TradingWiew, we need the keyboard shortcur: *Alt + s*
### Press Alt + s
ActionChains(driver).key_down(Keys.ALT).send_keys('s').perform() ### Alt + s
#wait_time = 25
### Find class
selector = driver.find_element_by_class_name("actions-3fKk-h7d-")
### Go to the link of the picture inside the class
urlImage = selector.find_element_by_css_selector('a').get_attribute('href')
### Open link of page with picture only
driver.get(urlImage)
time.sleep(3)
### In this page, this is the tag name of the picture of interest
### It is a .PNG image
image = driver.find_element_by_tag_name('IMG')
### ActionChains to "right-click" on image
actionChain = ActionChains(driver)
actionChain.context_click(image).perform()
pyautogui.typewrite(['down','down','enter'])
### Enter name and save
pyautogui.typewrite('TVImage_1\n', interval=0.5)```